引き続き、MonacoinのWEB Walletを作成していきます。
今回はアカウント名を保持するバッキングBeanです。
- UserBean
ユーザ情報としてアカウント名をセッションスコープで保持するバッキングBean。
ログイン、ログアウト、ログイン状態確認のメソッドを持つ。(認証は未実装)
エラーメッセージ表示用のメソッドもここに作成。
エラーメッセージ表示については、ここに作るのが適正なのかはちょっとよく分からないですが、このバッキングBeanをInjectしてしまえば他からも使えるので、とりあえず。
それではまずコードです。
package monawebwallet; import java.io.Serializable; import javax.enterprise.context.SessionScoped; import javax.inject.Named; import javax.validation.constraints.NotNull; import lombok.Getter;import lombok.Setter; @Named(value = "userBean") @SessionScoped @Setter @Getter public class UserBean implements Serializable { @NotNull String accountStr; public boolean isLogin() { return accountStr != null && accountStr.length() > 0; } public void login() { if (true) { System.out.println("login"); } else { logout(); } } public void logout() { accountStr = ""; System.out.println("logout"); } public void loginFormMessage(String message) { message("loginForm:account", message); } public void sendFormMessage(String message) { message("sendForm:send", message); } private void message(String formId, String message) { FacesContext context = FacesContext.getCurrentInstance(); UIComponent component = context.getViewRoot().findComponent(formId); String clientId = component.getClientId(context); context.addMessage(clientId, new FacesMessage(message)); } }
まず、この辺はおさらいですが、@NamedでCDI管理とし、EL式から参照するためにuserBeanという名前をつけます。
IDを保持させるので@SessionScopedでセッションスコープを設定します。
バッキングBeanの初期設定が終わったら、ユーザID保持用のaccountStr変数を用意します。
accountStrはnullや空文字をNGとしたいので、BeanValidationのアノテーションを設定します。
ただし、@NotNullを設定しても、デフォルトでは空文字を通してしまいます。
テキストボックスに何も入力されていない状態はnullではなく空文字です。
JSF標準のValidatorではなく、HibernateValidatorの@NotBlankを使う手もありますが、以下のようにweb.xmlに若干追加するだけで@NotNullでも空文字を蹴るようになります。
<context-param> <param-name> javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL </param-name> <param-value>true</param-value> </context-param>
ただ、h:inputTextタグのrequired属性をtrueにすることで、どうやら同じことが可能なようなので、そちらのほうが良いかもしれません。
(と、後で気づいたけどせっかくなのでメモとして残しておく)
メソッドはlogin()、logout()と、ログイン状態を判定するisLogin()を作成します。
現時点では認証ロジックの実装は行わず、login()メソッドを呼ぶと無条件でログイン成功とします。
最後にエラーメッセージ表示用のmessage()メソッドも作成しておきます。
formIdはformタグのIDとinputタグなどのIDをコロンでつないだものです。
formIdをキーにしてUIComponentを取得し、getClientId()でclientIdを取得します。
これでエラーメッセージをハンドリング出来るようになります。
まだ続きます。
0 件のコメント:
コメントを投稿