1

2 つのコンボボックス (カテゴリとサブカテゴリ) があり、カテゴリ コンボボックスの選択 ID に依存するサブカテゴリ コンボボックスをレンダリングしたいと考えています。しかし、サブカテゴリのコンボボックスがレンダリングされませんか? ここに私のコードがあります、

<h:panelGrid>
    <h:outputText value="Cateogyr : "/>
    <rich:comboBox defaultLabel="Enter some value" >
      <a4j:support event="onchange" reRender="subCombo" ajaxSingle="true"/>
      <f:selectItems value="#{bookManager.categoryList}" />
    </rich:comboBox>
    </h:panelGrid>

    <h:panelGrid>
    <h:outputText value="Sub Category : "/>
    <rich:comboBox defaultLabel="Enter some value" id="subCombo">
       <f:selectItems value="#{bookManager.subCategoryList}" />
    </rich:comboBox>  
    </h:panelGrid>

サブカテゴリ コンボボックスがレンダリングされるバッキング Bean で出力しましたが、表示されません。何かアイデアがあれば教えてください。

4

1 に答える 1

1

JSF 1.2 と RichFaces を使用しているようです。投稿されたコードによると、実際のコードでいくつかの修正を行う必要があるようです。

  • <h:form>サーバーに送信されるデータをラップする がありません。コードは次のようになります。

    <h:form>
        <h:panelGrid>
            <h:outputText value="Category : "/>
            <rich:comboBox defaultLabel="Enter some value" >
              <a4j:support event="onchange" reRender="subCombo" ajaxSingle="true"/>
              <f:selectItems value="#{bookManager.categoryList}" />
            </rich:comboBox>
        <!-- rest of JSF/HTML code... -->
    </h:form>
    
  • マネージド Bean が正常に機能するためには、問題なく機能するためにbookManager、Session Scope または Request スコープとアノテーションが必要です。@KeepAliveパフォーマンス ヒットについては、Request スコープを使用することをお勧めします。クラスは次のようになります

    @KeepAlive
    public class BookManager {
        //class code...
    }
    

bookManager.subCategoryListコードを見ると、Bean の getter で (データベースまたはキャッシュされたリソースから) を取得しているように見えます。public int getNumber() { return this.number; }マネージド Bean のゲッターとセッターが非常に単純であり (のように)、ビジネス ロジック コードが含まれていないことを確認してください。JSF はゲッター メソッドを複数回呼び出す可能性があるためです。詳細については、次を参照してください。

<rich:combobox>では、 ?の値を変更するときにサブカテゴリ リストを取得するというこの問題を解決するにはどうすればよいでしょうか。のデータを取得して準備するメソッドを呼び出すactionコンポーネント属性を使用します。<a4j:support>bookManager.categoryList

JSF コード

<a4j:support event="onchange" reRender="subCombo" ajaxSingle="true"
    action="#{bookManager.obtainSubcategoryList}" limitToList="true" />

Java コード

@KeepAlive
public class BookManager {
    public void obtainSubcategoryList() {
        //retrieve the data in this action.
        this.subCategoryList = ...;
    }
    //class code...
}
于 2012-10-29T06:13:26.727 に答える