2012-05-07 4 views
0

私は、JSFに登録フォームをコーディングしています:?:のinputTextだけヌルバックを与える(セッターに達していない)

* .xhtmlファイルに:Bean内の

<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> 
</fieldset> 
</h:form> 

public String getPassword() { 
    return password; 
} 

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

私はブレークポイントを設定し、私のセッターに到達していないことに気づいたでしょうか?

なぜですか?

++++ 1.Update ++++++

Register.java:

import java.io.Serializable; 
import java.util.ArrayList; 
import java.util.Date; 
import java.util.HashMap; 
import java.util.List; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 
import javax.faces.context.FacesContext; 
import javax.faces.event.ValueChangeEvent; 

@ManagedBean(name="Register") 
@SessionScoped 
public class Register implements Serializable{ 

    private String password = "Fill in!"; 

    /** Creates a new instance of Customer */ 
    public Register() { 
     //null 
    } 

    public String getPassword() { 
     return password; 
    } 

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

++++ 2.Update ++++++

<div id="buttons"> 
    <h:commandButton id="enter" accesskey="r" value="Registrieren" action="#{Register.registerPlayer()}" immediate="true"/> 
</div> 

++++ 3 .Update ++++++ 私のフォームコード:

<!-- Login--> 


<h:form> 
         <h3><span xml:lang="en">Login</span> Daten </h3> 
         <div class="formblock"> 

          <fieldset> 
           <div> 
            <h:outputLabel class="Float" for="username" value="Username"/> 
            <h:inputText id="username" rendered="true" value="#{Register.username}" label="Username"> 
            </h:inputText> 
           </div> 

           <div> 
            <h:outputLabel class="Float" for="password" value="Passwort"/> 
            <h:inputSecret id="password" rendered="true" value="#{Register.password}" label="Passwort"> 
            </h:inputSecret> 
           </div> 
          </fieldset> 

         </div> 
         <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> 
+0

「Register」ビーンズのコード –

+0

を私に見せてください。アップデートに投稿しました! – maximus

+0

どのデータを入力してフォームに送信しますか?私はあなたが指定したバリデーションを検証することを願っています –

答えて

0

私はあなたがあなたのcommandButtonimmediate="true"を持って気づきました。これは、あなたのモデルが更新されていない原因のようです。

This blog entryは同じではないにしても、同様の問題を記述しているようです。今、いくつかの回避策があります。bind属性を使用してサブミットされた値をコンポーネントから直接取得するか、入力コンポーネントにimmediate="true"を使用することもできますが、最良の解決方法はimmediate本当に必要な場合を除き、送信ボタンに

+1

私は既にコメントでそれを述べました。 – Fallup

+0

私はちょうどコメントをスキャンし、私はそれを逃した。なぜそれを答えとして投稿しなかったのですか? – waxwing

+0

コメントの議論に関連していたので、それが問題の根源かどうかはわかりません。私は成功の彼の確認の後に答えとしてそれを掲示するでしょう:P、または多分、私は評判についてそれほど気にしません。 – Fallup

1

置きますh:commandButton、あなたが提出しようとしているのと同じ形式で<h:inputText ...

関連する問題