これは、ページ コンポーネントの条件付きレンダリングに関する以前の投稿の更新です。f:ajax タグを使用して、選択したユーザー入力に基づいて、ページ上のさまざまなコンポーネントを条件付きでレンダリングできるようになりました。問題は、コマンドボタンをクリックすると、ajax を使用して条件付きでレンダリングされた入力が送信時に読み取られないことです。新しいコンポーネントを追加してもページ全体が再レンダリングされず、送信ボタンが表示されないためだと思います。これが私のフォームページのセグメントです(ah:formタグでラップされています):
<h:outputLabel for="selectPersonType" value="Select Type: "/>
<h:selectOneMenu id="selectPersonType" value="#{addPersonBean.personType}" label="Person Type" required="true">
<f:selectItem itemValue=""/>
<f:selectItems value="#{listBean.personTypes}" />
<f:ajax render="results"/>
</h:selectOneMenu>
<h:message for="selectPersonType" style="color: red"/>
</h:panelGrid>
<h:panelGroup id="results">
<h:panelGroup rendered="#{addPersonBean.personType == 'STUDENT'}">
<h:outputLabel for="selectSchoolType" value="School Type: " />
<h:selectOneMenu id="selectSchoolType" value="#{addPersonBean.schoolType}">
<f:selectItems value="#{listBean.schoolTypes}" />
<f:ajax execute="selectSchoolType"/>
</h:selectOneMenu>
</h:panelGroup>
<h:panelGroup rendered="#{addPersonBean.personType == 'PATIENT'}">
<h:outputLabel for="smoker" value="Smoker? " />
<h:selectBooleanCheckbox id="smoker" value="#{addPersonBean.smoker}">
<f:ajax execute="smoker"/>
</h:selectBooleanCheckbox>
</h:panelGroup>
</h:panelGroup>
<h:commandButton value="Add Person" action="#{addPersonBean.action}"/>
ここでの問題は、ID が 'selectSchoolType' および 'smoker's values のコンポーネントは、ページが読み込まれた後に selectPersonType 選択メニューを使用して条件付きでレンダリングされるため、commandButton をクリックしても設定されないことです。送信ボタンをクリックするのではなく、値が変更されたときにコンポーネントを起動する方法はありますか (したがって、送信をクリックする前に値を処理する必要があります)。ご覧のとおり、問題のコンポーネントに execute 属性を付けて f:ajax を使用しようとしましたが、うまくいかなかったようです。(これらのコンポーネントのデフォルトのイベントは valueChange だと思うので、f:ajax タグには追加していませんが、'change' と 'valueChange' を試しました)。