私は次のように複合コンポーネントを開発しました...
<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イベントが発生しないことだけです。なぜ ??解決策はありますか?