2012-05-13 8 views
1

現在、Apache Tapestry 5.3.1に次の問題があります。 ユーザーはプロフィールの詳細を編集してパスワードを変更できる必要があります。 データには「ユーザー」エンティティがあります。Tapestry 5:パスワードフィールドの値が変数にバインドされていません

パスワードは常に変更される塩(Apache Tynamoを使用)で暗号化されて保存されているため、userのgetPasswordメソッドは使用できません。その結果、私はpasswordValue1とpasswordValue2という2つのページプロパティに値を格納しようとしていて、残りのBeanを使用しようとしています。 妥当性検証では、何か入力してからフォームを送信したとしても、両方のpasswordValueフィールドはnullです。 アイデアは何故ですか?

 <t:beaneditform object="currentUserInfo" add="password1,password2" t:id="registerForm" 
      exclude="username,password,accountLocked,credentialsExpired"> 
      <p:password1> 
       <t:label for="password1" >Passwort</t:label> 
       <t:passwordfield t:id="password1" value="passwordValue1" validate="password"/> 
      </p:password1> 
      <p:password2> 
       <t:label for="password2" >Passwort wiederholen</t:label> 
       <t:passwordfield t:id="password2" value="passwordValue2" validate="password"/> 
      </p:password2> 

     </t:beaneditform> 

タペストリーページのJavaコード:

@RequiresUser 
public class UserDetails { 

@InjectPage 
private Index index; 

@Inject 
UserUtility userUtil; 

@Inject 
private Session session; 

@Inject 
@Property 
@SessionState(create = false) 
private User currentUserInfo; //value is set 

@Component(id="password1") 
private PasswordField password1; 

@Component(id="password2") 
private PasswordField password2; 

@Property 
private String passwordValue2; 

@Property 
private String passwordValue1; 

@InjectComponent 
private BeanEditForm registerForm; 

    //...snip.... 

void onValidate() { 
    System.out.println("onvalidate"); 
    if (registerForm.getHasErrors()) { 
     return; 
    } 
      // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
      // both passwordValue1 and passwordValue 2 are null here 
    if ((passwordValue1 == null && !("".equals(passwordValue1)) 
      || !passwordValue1.equals(passwordValue2))) { 
     registerForm.recordError(password1, "Passwords must match"); 
     registerForm.recordError(password2, "Passwords must match"); 
    } 
} 

答えて

3

あなたの検証方法は、あなたが検証したいものを指定していません。 onValidateFromRegisterForm

説明にメソッドの名前を変更します。 すべてのフィールドも、Validateイベントをトリガし、それをフィールドごとに呼び出されます。これらの検証は、フィールドが設定された直後にトリガーされます。 最初のフィールドが設定されると、onValidateが呼び出され、両方のフィールドがチェックされますが、他のフィールドはまだ設定されておらず、検証に失敗します。

これは役立つかもしれません:ジャンプスタートページのWhat is called when

+0

時間をとっていただきありがとうございます:) – user3001

関連する問題