1

我有两个组合框(类别和子类别),我想呈现取决于类别组合框的选择 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>

我在渲染子类别组合框的 backing 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>
    
  • 为了正常工作,您的bookManager托管 bean 需要具有会话范围或请求范围和@KeepAlive注释才能正常工作。对于性能问题,我建议使用请求范围。你的班级应该是这样的

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

看到您的代码,您似乎正在检索bookManager.subCategoryListbean 的 getter(从数据库或缓存资源)。确保您的托管 bean getter 和 setter 非常简单(如public int getNumber() { return this.number; }),并且其中不包含任何业务逻辑代码,因为 JSF 可以多次调用 getter 方法。有关这方面的更多信息,请参阅:

现在,如何解决在更改 中的值时检索子类别列表的问题<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 回答