我开发了一个简单的登录表单,用于我的 JSF + PrimeFaces 页面:
<form action="j_security_check" method="post">
<p:dialog modal="true" header="Login" widgetVar="loginDlg">
<h:panelGrid columns="3" cellpadding="5">
<h:outputLabel for="j_username">Username:</h:outputLabel>
<h:inputText id="j_username" required="true" />
<h:message for="j_username" />
<h:outputLabel for="j_password">Password:</h:outputLabel>
<h:inputSecret id="j_password" required="true" />
<h:message for="j_password" />
<br />
<h:commandButton value="Login" />
</h:panelGrid>
</p:dialog>
</form>
尝试使用空密码,但组件未捕获缺少的密码(这是必需的)h:message
。我也转而p:commandButton
认为问题可能出在按钮的 Ajax 行为中,但由于 PrimeFaces 抱怨 CommandButton 不在表单元素内,因此未呈现页面。容器抛出的异常是:
com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Access denied on empty password for user pippo
总结一下,我有两个问题:
- 为什么在提交表单之前丢失的密码不会产生消息?
- 如何捕获 LoginException 并在对话框中显示错误消息?