簡単に始めましょう:-簡単な検索フォーム-2つのh:selectOneMenuコンポーネントがフォーム内で宣言されます-2番目のselectOneMenuは、最初のselectOneMenuの項目の選択に基づいて更新されます(ajaxを使用)このために、リクエストで中央のBeanを使用します2つのselectOneMenusは他の多くのページで宣言されているため、スコープ。次の2つのメソッドを複数回定義する必要はありません。
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}" />を含めると、2番目のh:selectOneMenuの値が無効であると表示されるため、フォームを送信できません。
「h:panelGroupバインディング」を削除すると、すべて期待どおりに機能します。h:panelgroupは、空のメソッド「return new HtmlPanelGroup()」にバインドすることもできます。その後、エラーが再度発生します。コンポーネントバインディングがいくつかの検証を破っているように見えます。
御時間ありがとうございます