Ajax不能使用h:inputSecret

时间:2011-03-15 15:16:32

标签: java ajax validation jsf jsf-2

尝试为密码字段显示必需消息,但是无法使用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:)

1 个答案:

答案 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>