重置Java Faces中的属性

时间:2011-11-05 15:38:21

标签: java jsf

我添加了一些代码来验证javafaces站点中的字段:

<h:outputLabel value="Password:"></h:outputLabel>
<h:inputSecret id="password" binding="#{password}" value="#{register.password}" required="true" requiredMessage="Password field must be filled in"></h:inputSecret>
<h:outputLabel value="Repeat password:"></h:outputLabel>
<h:inputSecret id="password2" required="true" requiredMessage="Repeat password field must be filled in">
    <f:validator validatorId="sameValueValidator"/>
    <f:attribute name="value" value="#{password.value}"/>
    <f:attribute name="message" value="Passwords do not match"/>
</h:inputSecret>

第一次提交表单时,会将正确的属性值传递给验证程序。以下时间虽然该值与第一个值相同,但无论用户在字段中键入什么内容。知道怎么重置吗?

2 个答案:

答案 0 :(得分:1)

代码看起来很好并且应该可以正常工作,假设您的验证器已正确实现。只有当您离开该字段为空时,才会出现获取先前提交的第一个密码字段值的症状。那是因为你传递#{password.value},当验证失败时,它会包含先前的值。您应该传递#{password.submittedValue},但在验证成功时,它会包含null

如果您在字段中输入其他内容时确实获得了以前的值,则可能是由于您在问题中显示的内容而导致的其他错误。也许在JSF实现中,或者在代码中的其他内容中。也许您在命令按钮上使用<f:ajax>而不是重新渲染输入字段。

答案 1 :(得分:-1)

<h:inputSecret id="password2" required="true" requiredMessage="Repeat password field must be filled in"> <f:validator validatorId="sameValueValidator"/> <f:attribute name="value" value="#{password.value}"/> <f:attribute name="message" value="Passwords do not match"/> </h:inputSecret>

我想你应该立即为inputSecret

做出“真实”