1

JSf2.1 を使用して Web アプリケーションを開発しています。selectOneMenu (ドロップダウン リスト ボックス) をコーディングするためのチュートリアルに従っています。

2 つのドロップダウン ボックス (A と B) が必要ですが、基本的には同じ ajax リスナー関数を呼び出して、A と B の選択で計算を行います...

では、このように selectOneMenu をネストできますか?

<h:form id= "ourForm">
    <h:selectOneMenu value= "#{bean.valA}"...>
       <f:selectItems ... />
        <h:selectOneMenu value= "#{bean.valB}"...>
             <f:selectItems ... />
             <f:ajax listener="#{bean.listener}" render="ourForm"/>
        </h:selectOneMenu>
    </h:selectOneMenu>
</h:form>

そしてビーンリスナーメソッド:

public void Listener{

//use valA and valB


}

さて、私は上記をやろうとしましたが、ページに警告が表示されます:

フォーム コンポーネントには、その祖先に UIForm が必要です。提案は、必要な withing を囲みます。

各selectOneMenuで同じリスナーを呼び出してネストなしで試しましたが、同じランダムな動作が得られます..ie:Bで「前の」選択を保持するAの要素1を選択すると、ボックスBはその選択をデフォルトにランダムに更新し、その逆も同様です!

お知らせ下さい。

4

1 に答える 1

1

これは無効な構文です。JSF が HTML コードを生成することを理解する必要があります。A<h:selectOneMenu>は を生成し<select><option/></select>ます。<h:selectOneMenu>あなたの試みのようにネストされた<select><option/><select><option/></select></select>ものは、完全に無効なHTML (したがって、本質的に完全に無効な JSF) を生成します。

具体的な機能要件についてはあまり明確ではありませんが、親メニューの特定の選択でのみ子メニューを表示したいということは理解していますか? その場合は、rendered属性を使用して で参照してください<f:ajax render>

これは大まかなキックオフの例です。必要に応じて、より単純化できます (たとえば、renderMenuB何も言わなかった具体的な機能要件に応じて、プロパティは必要ありません)。

<h:selectOneMenu value="#{bean.selectedValueA}">
    <f:selectItems value="#{bean.availableValuesA}" />
    <f:ajax listener="#{bean.handleChangeA}" render="menuB" />
</h:selectOneMenu>
<h:panelGroup id="menuB">
    <h:selectOneMenu value="#{bean.selectedValueB}" rendered="#{bean.renderMenuB}">
        <f:selectItems value="#{bean.availableValuesB}" />
        <f:ajax listener="#{bean.handleChangeB}" render="ourForm" />
    </h:selectOneMenu>
</h:panelGroup>

以下も参照してください。

于 2013-01-29T14:10:27.727 に答える