[Subsonic Airlines] 会員登録画面 – バッキングビーンの作成3

バッキングビーンの説明の第3回です。

これまでの記事
設定ファイルの作成
http://subsonic.info/ja/2015/08/23/subsonic-airlines-会員登録画面-設定ファイルの作成/

テンプレートの作成
http://subsonic.info/ja/2015/08/27/subsonic-airlines-会員登録画面-テンプレートの作成/

トップ画面の作成
http://subsonic.info/ja/2015/08/28/subsonic-airlines-会員登録画面-トップ画面の作成/

入力画面の作成
http://subsonic.info/ja/2015/08/31/subsonic-airlines-会員登録画面-入力画面の作成/

バッキングビーンの作成1
http://subsonic.info/ja/2015/09/03/subsonic-airlines-会員登録画面-バッキングビーンの作成1/

バッキングビーンの作成2
http://subsonic.info/ja/2015/09/06/subsonic-airlines-会員登録画面-バッキングビーンの作成2/

ソースコード
https://github.com/subsonicsystems/subsonic-airlines-members

メソッド呼び出し
入力画面において[登録]ボタンを押すと、フォームの入力値がInputView.javaのフィールドにセットされます。17行目でvalueに”#{registerInputView.user.username}を指定しているので、InputView.javaのuserフィールド(Userオブジェクト)のusernameに入力値がセットされます。パスワードも同様にセットされます。そして、InputView.javaのsaveメソッドが実行されます。

/register/input.xhtml

<h:form id="form">
    <p:panelGrid id="grid" columns="3" styleClass="register-input-panel-grid">
        <p:outputLabel for="username" value="ユーザ名 *"/>
        <p:inputText id="username" value="#{registerInputView.user.username}"
                     styleClass="register-input-panel-grid-username-input-text"/>
        <p:message for="username"/>
        <p:outputLabel for="password" value="パスワード *"/>
        <p:password id="password" value="#{registerInputView.user.password}"
                    redisplay="true" styleClass="register-input-panel-grid-password-password"/>
        <p:message for="password"/>
    </p:panelGrid>
    <div class="height30"></div>
    <p:panelGrid columns="4" styleClass="register-input-button-panel-grid">
        <div class="width10"></div>
        <p:button value="戻る" icon="ui-icon-carat-1-w" outcome="/index"/>
        <div class="width6"></div>
        <p:commandButton value="登録" update="grid"
                         action="#{registerInputView.save()}"/>
    </p:panelGrid>
</h:form>

subsonic-airlines-register-input1

InputView.java

@Named("registerInputView")
@RequestScoped
public class InputView {
/**
 * The User.
 */
private User user;
/**
 * Saves User.
 * 
 * @return the outcome.
 * @throws ServletException if an error occurs.
 */
public String save() throws ServletException {
    facesContext = FacesContext.getCurrentInstance();
    UIViewRoot uiViewRoot = facesContext.getViewRoot();
    resourceBundle = ResourceBundle.getBundle("info.subsonic.subsonicairlines.members.web.messages.Messages",
                uiViewRoot.getLocale());

    UIInput usernameUiInput = (UIInput) uiViewRoot.findComponent("form:username");
    usernameUiInput.setValid(true);

    UIInput passwordUiInput = (UIInput) uiViewRoot.findComponent("form:password");
    passwordUiInput.setValid(true);

    boolean isValid = true;

    if (!isUsernameValid()) {
        usernameUiInput.setValid(false);
        isValid = false;
    }

    if (!isPasswordValid()) {
        passwordUiInput.setValid(false);
        isValid = false;
    }

    if (!isValid) {
        return "";
    }

    userService.add(user);

    return "/register/completed";
}
/**
 * Gets User.
 *
 * @return the User.
 */
public User getUser() {
    return user;
}

/**
 * Sets User.
 *
 * @param user the User.
 */
public void setUser(User user) {
    this.user = user;
}

リソースバンドル
InputView.javaの65行目で、リソースバンドルを取得しています。リソースバンドルには、エラーメッセージを記述しています。ここでは、info.subsonic.subsonicairlines.members.web.messages.Messagesと指定しているので、warファイルの/WEB-INF/classes/info/subsonic/subsonicairlines/members/web/messages/Messages.propertiesを参照します。コード内では、拡張子の.propertiesを付けていないことに注意してください。

Mavenを使用している場合は、src/main/resourcesのところに/info/subsonic/subsonicairlines/members/web/messages/Messages.propertiesを作成します。
subsonic-airlines-backing-bean3-1

Messages.propertiesは、キー = 値となっています。また、値は文字参照で記述します。

JBoss Toolsをインストールしている場合は、JBoss Tools Properties Editorがデフォルトのプロパティエディタになります。JBoss Tools Properties Editorを使用することによって、Propertiesタブで入力した文字列が文字参照に変換されます。

JBoss Tools Properties Editor – Propertiesタブ
subsonic-airlines-backing-bean3-2

JBoss Tools Properties Editor – Sourceタブ
subsonic-airlines-backing-bean3-3

次回に続きます。