1

私はjsfアプリケーションをコーディングしています。これが私のコードです:

register.xhtml:

        <fieldset>
            <div>
              <h:outputLabel class="Float" for="username" value="Username"/>
              <h:inputText id="username" rendered="true" value="#{Register.username}" label="Username">
              <f:validateLength minimum="3" maximum="8"/>
              </h:inputText>
        </div>
        <div>
              <h:outputLabel class="Float" for="password" value="Passwort"/>
              <h:inputText id="password" rendered="true" value="#{Register.password}" label="Passwort">
                <f:validateLength minimum="3" maximum="8"/>
              </h:inputText>
            </div>
       </fieldset>

<div id="buttons">
  <h:form id="buttons">
    <h:commandButton id="enter" accesskey="r" value="Registrieren" action="#{Register.registerPlayer()}" immediate="true"/>
    <h:outputText value="#{msg.wrongpwd}" rendered="#{loginCtrl.loginfailed}" style="color: red"/>
    <h:messages style="color: red"/>
  </h:form>
</div>
</form>
...

Register.java:

public String getUsername() {
    return username;
}

public String getPassword() {
    return pwd;
}

public void registerPlayer() {
    this.nameList.add(getUsername());
    this.passwordList.add(pwd);
    System.out.println(getUsername() + " : " + pwd  + " :successfully registered!!!");
}

私の問題は、ボタンを押したときに出力として得られることです:

null : null : 登録に成功!!!

どうしてこれなの?

更新 1 ------------------------------

わかりました h:form タグを使用しましたが、それでも null が返されます:

これがjsfの仕組みだと思うサイクルです:最初:inputTextに書き込む-> Beanがそれを読み取る->その値を操作できます(例:リストに書き込む)...

そのサイクルの何が問題なのですか?または私のコード...

更新 2 ------------------------------ 私のセッター メソッド:

public void setUsername(String username) {
    this.username = username;
}
public void setPassword(String pwd) {
    this.pwd = pwd;
}

彼らは手の届かないところにありますが、なぜですか?

4

1 に答える 1

3

フィールドh:inputTextはフォーム内にある必要があります。以下を試してください:

<h:form>
    <fieldset>
        <div>
            <h:outputLabel class="Float" for="username" value="Username"/>
            <h:inputText id="username" rendered="true" value="#{Register.username}" label="Username">
                <f:validateLength minimum="3" maximum="8"/>
            </h:inputText>
        </div>
        <div>
            <h:outputLabel class="Float" for="password" value="Passwort"/>
            <h:inputText id="password" rendered="true" value="#{Register.password}" label="Passwort">
                <f:validateLength minimum="3" maximum="8"/>
            </h:inputText>
        </div>
    </fieldset>

    <div id="buttons">
        <h:commandButton id="enter" accesskey="r" value="Registrieren" action="#{Register.registerPlayer()}" immediate="true"/>
        <h:outputText value="#{msg.wrongpwd}" rendered="#{loginCtrl.loginfailed}" style="color: red"/>
        <h:messages style="color: red"/>
    </div>
</h:form>

inputTextフォームにフィールドとcommandButtons の両方が含まれるようになりました

于 2012-05-06T21:18:51.583 に答える