2012-05-13 3 views
1

В настоящее время у меня есть следующая проблема с Apache Tapestry 5.3.1: Пользователь должен иметь возможность редактировать свои данные профиля и изменять его пароль. Для данных есть объект «Пользователь».Гобелен 5: Значение поля пароля, не связанного с переменной

Я не могу использовать метод getPassword пользователя, поскольку пароли хранятся в зашифрованном виде с солью, которая всегда изменяется (используя Apache Tynamo). В результате я пытаюсь сохранить значения в двух свойствах страницы, называемых 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> 

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 и он проверяет поля BOTH, но, конечно, все остальные поля еще не установлены и не прошли проверку.

Это может помочь: What is called when на странице перехода.

+0

Спасибо, что нашли время :) – user3001

Смежные вопросы