1

現在、Apache Tapestry 5.3.1で次の問題が発生しています。ユーザーはプロファイルの詳細を編集したり、パスワードを変更したりできるはずです。データには「ユーザー」エンティティがあります。

パスワードは常に変更されるソルトで暗号化されて保存されるため、ユーザーのgetPasswordメソッドを使用できません(Apache Tynamoを使用)。その結果、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");
    }
}
4

1 に答える 1

3

検証方法では、検証する対象が指定されていません。メソッドの名前をonValidateFromRegisterFormに変更します

説明:すべてのフィールドは検証イベントもトリガーするため、フィールドごとに呼び出されます。これらの検証は、フィールドが設定された直後にトリガーされます。したがって、最初のフィールドが設定されると、onValidateが呼び出され、両方のフィールドがチェックされますが、もちろん、他のすべてのフィールドはまだ設定されておらず、検証に失敗します。

これは役立つかもしれません:ジャンプスタートページで何が呼ばれるか。

于 2012-05-14T08:09:17.503 に答える