0

私は次のように複合コンポーネントを開発しました...

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

したがって、基本的に、ユーザーが「numericInput」コンポーネントに0より大きい値を入力したときに、「amountInput」コンポーネントをレンダリングしたいと思います。最初のフィールドに値を入力し、ブラウザのどこかをクリックすると、正常に機能します。しかし、フィールドに値を入力して次のボタンを直接クリックすると、次のフィールドを検証(レンダリング)せずに次のページに移動します。私が理解できるのは、次のボタンをクリックしてもonBlurイベントが発生しないことだけです。なぜ ??解決策はありますか?

4

1 に答える 1

0

イベントが発生した可能性がありますが、フォームも送信されているため、次のビューがレンダリングされ、ajaxイベントの結果を見逃すことになります。

blurなど、よりも即時のイベントを使用する必要がある場合がありますkeyupsomeBean.numberさらに、が0より大きく、someBean.number2空の場合、条件付きでボタンを無効にすることができます。

于 2012-05-30T17:08:59.373 に答える