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
コンポーネントによって検出されません。また、ボタンのAjaxの動作に問題がある可能性があるという考えに切り替えましたp:commandButton
が、PrimeFacesがCommandButtonがフォーム要素内にないことについて不平を言っているため、ページはレンダリングされません。コンテナによってスローされる例外は次のとおりです。
com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Access denied on empty password for user pippo
要約すると、2つの質問があります。
- フォームが送信される前に、パスワードが見つからないためにメッセージが生成されないのはなぜですか?
- LoginExceptionをキャッチして、ダイアログ内にエラーメッセージを表示するにはどうすればよいですか?