2012-05-13 60 views
1

我目前對Apache Tapestry 5.3.1有以下問題: 用戶應該能夠編輯他的配置文件的詳細信息並更改其密碼。 對於數據有一個「用戶」實體。Tapestry 5:密碼字段的值不會綁定到變量

我不能使用用戶的getPassword方法,因爲密碼是使用一個始終更改的鹽(使用Apache Tynamo)加密存儲的。因此,我試圖將這些值存儲在兩個頁面屬性中,分別稱爲passwordValue1和passwordValue2,並使用bean的其餘部分。 驗證兩個passwordValue字段都是空的,即使我輸入了一些內容然後提交了表單。 任何想法爲什麼?

 <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

說明: 每場也觸發驗證的事件,所以它被調用爲每個字段。這些驗證在字段設置後立即觸發。 因此,當設置第一個字段時,將調用onValidate並檢查BOTH字段,但當然,所有其他字段尚未設置並且未通過驗證。

這可能有助於:What is called when在jumpstart頁面上。

+0

感謝您抽出時間:) – user3001