Гобелен 5: значение поля пароля не привязано к переменной

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

Я не могу использовать метод пользователя 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");
    }
}

person user3001    schedule 13.05.2012    source источник


Ответы (1)


Ваш метод проверки не указывает, что вы хотите проверить. Переименуйте метод в onValidateFromRegisterForm.

Объяснение: Каждое поле также инициирует событие проверки, поэтому оно вызывается для каждого поля. Эти проверки запускаются сразу после установки поля. Поэтому, когда установлено первое поле, вызывается onValidate, и он проверяет ОБА поля, но, конечно, все остальные поля еще не были установлены и не проходят проверку.

Это может помочь: Что вызывается, когда находится на странице JumpStart.

person dube    schedule 14.05.2012
comment
Спасибо, что нашли время :) - person user3001; 14.05.2012