我添加了一些代码来验证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>
第一次提交表单时,会将正确的属性值传递给验证程序。以下时间虽然该值与第一个值相同,但无论用户在字段中键入什么内容。知道怎么重置吗?
答案 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
做出“真实”