尝试为密码字段显示必需消息,但是无法使用Ajax,一旦输入密码,它就会消失。
目前它完全由h:inputSecret
的 required 属性完成,但在进行HTTP提交之前,Ajax会好得多。
相关代码段:
<h:inputSecret id="newPassword"
value="#{changePassword.password}"
autocomplete="off"
required="true"
requiredMessage="#{i18n['javax.faces.component.UIInput.REQUIRED']}">
<f:ajax event="blur"
render="@this Password_Message"/>
</h:inputSecret>
<h:message id="Password_Message" for="newPassword" errorClass="error"
tooltip="true" />
对于为什么会发生这种情况的说明性解释的答案非常感谢,仍在学习JSF 2.0:)
答案 0 :(得分:3)
您在输入元素中添加了render="@this"
,这导致在ajax请求完成时将重新呈现整个输入元素。默认情况下,由于安全原因,表单提交后不会重新显示<h:inputSecret>
值。 tag documentation也按字面意思告诉它:
当且仅当“redisplay”组件属性为字符串“true”时,才将组件的当前值渲染为“value”属性的值。
同样的故事适用于<h:inputSecret>
领域的ajax重新渲染。但是,您可以通过添加redisplay="true"
来强制重新显示。
<h:inputSecret redisplay="true">
<f:ajax event="blur" render="@this messageid" />
</h:inputSecret >
或者只是摆脱render="@this"
,因为这实际上是完全没必要的。
<h:inputWhatever>
<f:ajax event="blur" render="messageid" />
</h:inputWhatever>