首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tapestry 5:密码字段的值未绑定到变量

Tapestry 5:密码字段的值未绑定到变量
EN

Stack Overflow用户
提问于 2012-05-14 06:43:53
回答 1查看 1.2K关注 0票数 1

我目前在使用Apache Tapestry 5.3.1时遇到了以下问题:用户应该能够编辑他的配置文件详细信息并更改他的密码。对于数据,有一个“用户”实体。

我不能使用user的getPassword方法,因为密码是用始终更改的盐加密存储的(使用Apache Tynamo)。因此,我尝试将值存储在名为passwordValue1和passwordValue2的两个页面属性中,并使用bean的其余部分。在验证时,两个passwordValue字段都为空,即使我输入了一些内容,然后提交了表单。你知道为什么吗?

代码语言:javascript
复制
        <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>

tapestry页面的java代码:

代码语言:javascript
复制
@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");
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-14 16:09:18

您的验证方法没有指定要验证的内容。将该方法重命名为onValidateFromRegisterForm

说明:每个字段还会触发一个验证事件,因此每个字段都会调用该事件。这些验证是在设置字段后立即触发的。因此,当设置了第一个字段时,将调用onValidate并检查这两个字段,但当然,所有其他字段都尚未设置,因此验证失败。

这可能会有所帮助:跳转页面上的What is called when

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10575817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档