在点击commandButton时没有触发OnBlur事件?

时间:2012-05-29 13:49:57

标签: jsf-2

我开发了一个复合组件如下......

<composite:implementation>   
        <div class="numericBox">
            <h:inputText id="txtInput"
                         size="#{cc.attrs.maxLength}"
                         converterMessage="#{cc.attrs.converterMessage}"
                         validatorMessage="#{cc.attrs.validatorMessage}"
                         required="#{cc.attrs.required}"
                         requiredMessage="#{cc.attrs.requiredMessage}"
                         minlength="#{cc.attrs.minLength}"
                         maxlength="#{cc.attrs.maxLength}"
                         value="#{cc.attrs.value}">
                <f:ajax event="blur" render="@this err"/>
                <f:ajax event="blur" render="#{cc.attrs.renderParent}" disabled="#{empty cc.attrs.renderParent}"/>
            </h:inputText>
        </div>
        <h:panelGroup id="err">
            <utils:fieldError_right id="errText" group="#{cc.clientId}-txtInput"/>
        </h:panelGroup>
    </div>
</composite:implementation>

我有一个如下命令按钮..

<h:commandButton id="btnNext" styleClass="btnNext" action="#{someBean.next}"/>

现在我按以下方式使用组件...(只显示裸骨表示)

 <util:numericInput label="Label" value="#{somebean.number}"
                           maxLength="2" optional="true" renderParent="-vehVal"

/>

    <h:panelGroup id="vehVal">
    <util:amountInput label="label2" value="#{someBean.nubmer2}"                    
                     rendered="#{someBean.number > 0}"
                     required="#{someBean.number > 0}" />
    </h:panelGroup>

所以基本上我想在用户输入某个值&gt;时呈现“amountInput”组件。 “numericInput”组件中的0。 当我在第一个字段中输入一些值并单击浏览器中的某个值时,它工作正常。但是,如果我在字段中输入一些值并直接单击下一个按钮,则会转到下一页,而不验证(呈现)下一个字段。 我所能理解的是当我点击下一个按钮时onBlur事件没有被触发。为什么?有没有解决方案??

1 个答案:

答案 0 :(得分:0)

可能是事件被触发,但表单也被提交,因此下一个视图将被渲染,你将错过ajax事件的结果。

您可能必须使用比blur更直接的事件,例如keyup。此外,如果someBean.number是&gt;您可以有条件地禁用该按钮。 0和someBean.number2为空。