我有两个组合框(类别和子类别),我想渲染子类别组合框,这取决于类别组合框的选择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中打印出来,但它没有出现。 如果您有任何想法,请告诉我。
答案 0 :(得分: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...
}
看到您的代码,看起来您正在检索bean的getter上的bookManager.subCategoryList
(来自数据库或缓存资源)。确保您的托管bean getter和setter非常简单(如public int getNumber() { return this.number; }
)并且中不包含任何业务逻辑代码,因为JSF可以多次调用getter方法。有关此内容的更多信息,请参阅:
现在,如何解决在更改<rich:combobox>
中的值时检索子类别列表的问题?使用action
的{{1}}组件属性调用在<a4j:support>
中检索和准备数据的方法。
JSF代码
bookManager.categoryList
Java代码
<a4j:support event="onchange" reRender="subCombo" ajaxSingle="true"
action="#{bookManager.obtainSubcategoryList}" limitToList="true" />