camiloqp
camiloqp

Reputation: 1140

Ajax Not Working with h:inputSecret

Trying to display a Required Message for a Password field, however it is not working with Ajax, once the password is entered it disappears.
Currently its solely done by the required property of the h:inputSecret, however the Ajax would be much better, before doing the HTTP submit.
Relevant Snippet:

<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" />

An answer with an illustrative explanation of why is this happening is very appreciated, still learning JSF 2.0 :)

Upvotes: 2

Views: 1514

Answers (1)

BalusC
BalusC

Reputation: 1109635

You've added a render="@this" to the input element which causes that the whole input element will be rerendered when ajax request has finished. By default, <h:inputSecret> values are not redisplayed after a form submit due to security reasons. The tag documentation also tells it literally:

Render the current value of the component as the value of the "value" attribute, if and only if the "redisplay" component attribute is the string "true".

The same story applies on ajax rerendering of <h:inputSecret> fields. You can however force redisplaying by adding redisplay="true".

<h:inputSecret redisplay="true">
    <f:ajax event="blur" render="@this messageid" />
</h:inputSecret >

Or just get rid of render="@this", because this is in essence completely unnecessary.

<h:inputWhatever>
    <f:ajax event="blur" render="messageid" />
</h:inputWhatever>

Upvotes: 3

Related Questions