让我们开始简单: - 一个简单的搜索表单 - 两个h:selectOneMenu组件在表单中声明 - 第二个selectOneMenu,基于选择第一个selectOneMenu的项目(使用ajax)进行刷新 为此,我在请求范围中使用中央Bean,因为两个selectOneMenus在许多其他页面上声明,所以我不需要多次定义以下两个方法:
pageSupport:
@SuppressWarnings("unchecked")
public List<BranchenRubrik> getLst_branchenRubrik() {
if(lst_branchenRubrik == null) {
Session session = hibernate.InitSessionFactory.getInstance().getCurrentSession();
Transaction tx = session.beginTransaction();
this.lst_branchenRubrik = session.createQuery("from BranchenRubrik").list();
tx.commit();
}
return lst_branchenRubrik;
}
// Loading Subkats with parameter
@SuppressWarnings("unchecked")
public List<BranchenRubrikSub> getBranchenRubrikSub(long p_parent) {
List<BranchenRubrikSub> lst_branchenRubrikSub = new ArrayList<BranchenRubrikSub>();
if(p_parent > 0) {
Session session = hibernate.InitSessionFactory.getInstance().getCurrentSession();
Transaction tx = session.beginTransaction();
lst_branchenRubrikSub = session.createQuery("from BranchenRubrikSub BRS WHERE BRS.parentRubrik.id = :p1").setLong("p1",p_parent).list();
tx.commit();
}
return lst_branchenRubrikSub;
}
VDL:
<p:selectOneMenu value="#{searchBean2.fvz.branchenRubrikID}">
<f:selectItem itemLabel="Bitte wählen" itemValue="0"/>
<f:selectItems value="#{pageSupport.lst_branchenRubrik}" var="rubrik" itemValue="#{rubrik.id}" itemLabel="#{rubrik.rubrik}"/>
<f:ajax render="uiBranchenSubKat"/>
</p:selectOneMenu>
<h:outputText value="Unterkategorie" />
<p:selectOneMenu id="uiBranchenSubKat" value="#{searchBean2.fvz.branchenRubrikSubID}">
<f:selectItems value="#{pageSupport.getBranchenRubrikSub(searchBean2.fvz.branchenRubrikID)}" var="brs" itemLabel="#{brs.rubrik}" itemValue="#{brs.id}"/>
</p:selectOneMenu>
这很好用,我可以提交表格,所有数据都会保存并重新显示。 现在,我想包含一个h:panelGroup,它绑定到一个方法,它构建了一个分页菜单。 如果我包含h:panelGroup binding =“#{searchBean2.paginationMenu}”/&gt;然后,我无法提交表单,因为它表示第二个h:selectOneMenu的值无效。
如果我删除“h:panelGroup binding”全部按预期工作。 h:panelgroup也可以绑定到空方法“return new HtmlPanelGroup()” 然后,错误再次发生。 看起来,组件绑定会打破一些验证。
感谢您的时间