その場でテキストボックスを作成したいですか?
実行するレポートを選択:
<h:selectOneMenu value="#{reportBean.selectReport}">
<f:selectItems value = "#{reportBean.allReports}" />
<f:ajax listener="#{reportBean.getReqID}" render="reqID"> </f:ajax>
</h:selectOneMenu>
その場でテキストボックスを作成したいですか?
実行するレポートを選択:
<h:selectOneMenu value="#{reportBean.selectReport}">
<f:selectItems value = "#{reportBean.allReports}" />
<f:ajax listener="#{reportBean.getReqID}" render="reqID"> </f:ajax>
</h:selectOneMenu>
<h:inputText>
で選択した値に基づいてを表示/非表示にしたいようです<h:selectOneMenu>
。はい、これはプレーンな JSF で簡単に実現できます。
set the rendered
attribute as false
component を使用する場合、コンポーネントはコンポーネント ツリーに表示されないため、任意の呼び出し (ajax 呼び出しでさえも) で参照できないことはありません。更新するには、コンポーネントを別のコンポーネント内にラップし<h:panelGroup>
、ラッパーをレンダリングする必要があります。基本的な例:
<h:form id="frmRep">
<h:selectOneMenu value="#{reportBean.selectReport}">
<f:selectItems value = "#{reportBean.allReports}" />
<!--
assuming your reportBean.getReqID method will change the value of
reportBean.showReqID attribute to render/not render it and works well
-->
<f:ajax listener="#{reportBean.getReqID}" render="pnlRepName" />
</h:selectOneMenu>
<h:panelGroup id="pnlRepName">
<h:inputText id="reqID" rendered="#{reportBean.showReqID}"
value="#{reportBean.reportName}" />
<h:panelGroup>
</h:form>
代わりに、この特定の要件については、コンポーネントをユーザーに表示する必要があるかどうかを確認するためにのみサーバーにアクセスする必要があるため、ajax 呼び出しを使用することはお勧めしません。クライアント側だけでこれを処理するには、JavaScript ソリューションを選択します。