只有在JSF </h:inputtext>中传递了验证时,<h:inputtext>才会执行焦点侦听器

时间:2014-07-01 17:40:50

标签: jsf jsf-2.2

我有以下观点:

查看:

<div class="#{formAccountRegister.formTest}">
    <h:inputText id="field-firstname" value="#{formAccountRegister.account.person.firstName}" required="true" requiredMessage="#{account['validate.required']}" styleClass="#{ component.valid ? 'default' : 'default error'}">
        <f:validator validatorId="validatorNameFirst"/>
        <f:ajax event="focus" listener="#{formAccountRegister.changeIt(event)}"/>
        <f:ajax event="blur" render="field-firstname message-firstname"/>
    </h:inputText>
</div>

class获得div时,我想更改input的{​​{1}}。一切正常,但只有验证通过。如果验证尚未通过,则方法focus不会执行。我使用chageIt(event)

我怎样才能让它发挥作用?

谢谢。

1 个答案:

答案 0 :(得分:2)

JSF有6个生命周期阶段http://docs.oracle.com/javaee/1.4/tutorial/doc/JSFIntro10.html

第三个是Validation阶段。如果验证成功,则仅执行后续阶段Update Modal Values(第4个)和Invoke Application Phase(第5个)。由于验证失败,因此跳过第4和第5阶段并直接执行Render response(第6)阶段。这就是为什么没有调用焦点事件的监听器,它应该在第5阶段执行,这是根据jsf框架的预期行为。

如果要更改CSS,则可以使用onfocus的{​​{1}}属性并在客户端执行此操作。

希望这有帮助。