让我们从简单的开始: - 一个简单的搜索表单 - 在表单中声明了两个 h:selectOneMenu 组件 - 第二个 selectOneMenu,根据选择第一个 selectOneMenu 的项目(使用 ajax)进行刷新为此,我在请求中使用了一个中央 Bean范围,因为这两个selectOneMenus在很多其他页面上都声明了,所以我不需要多次定义以下两个方法:
页面支持:
@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}"/> 那么,我无法提交表单,因为它表示第二个 h:selectOneMenu 的值无效。
如果我删除“h:panelGroup 绑定”所有按预期工作。h:panelgroup 也可以绑定到一个空方法“return new HtmlPanelGroup()”,然后错误再次发生。看起来,组件绑定打破了一些验证。
谢谢你的时间