2012-05-13 4 views
1

현재 Apache Tapestry 5.3.1에 다음과 같은 문제점이 있습니다. 사용자가 프로필 세부 정보를 편집하고 암호를 변경할 수 있어야합니다. 데이터에는 "사용자"엔티티가 있습니다.Tapestry 5 : 암호 필드의 값이 변수에 바인드되지 않았습니다.

암호가 항상 변경되는 소금으로 암호화되어 저장되므로 (Apache Tynamo 사용) 사용자의 getPassword 메소드를 사용할 수 없습니다. 따라서 passwordValue1 및 passwordValue2라는 두 페이지 속성에 값을 저장하고 나머지 빈을 사용하려고합니다. 유효성 확인시 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> 

태피스트리 페이지의 자바 코드 :

@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가 호출되고 두 필드가 모두 확인되지만 다른 모든 필드는 아직 설정되지 않았으므로 유효성 검사가 실패합니다.

도움이 될만한 내용 : 바로 시작 페이지의 What is called when

+0

시간을내어 주셔서 감사합니다. :) – user3001