引き続き、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 コメント:
コメントを投稿