1

動的列の問題に直面しています。以前に選択したいくつかのフィルターに列が依存するテーブルがあります。ページに入ると、年と他のいくつかの基準を選択でき、これらの値を使用してテーブルをレンダリングします。私たちの問題は、異なる基準を選択すると列が異なる可能性があることです。これは、c:forEachがそれほど動的ではないために問題になります。

IceSoft Wikiで提供されている例を見ると、コードにあるものと似たものがわかります(ただし、コードははるかに複雑です): http ://www.icesoft.org/wiki/display/ICE/DataTable+動的+列

問題はこの文にあります:

<c:forEach items="#{backing.columns}" var="colModel">

backing.columnsは静的です。ただし、要素の数を変更すると(この例では、「列」リストの値がTaskクラスのプロパティと一致するため意味がありませんが、リストではなくリストを出力する場合)、次のように問題が発生します。 http://drewdev.blogspot.com.es/2008/08/cforeach-with-jsf-could-ruin-your-day.html

次のコマンドで列を変更すると、コンポーネントリストを再作成しようとしました。

component.getChildren().clear(); //component is of UIComponent type

しかし、うまくいきませんでした。また、PhaseListenerでコンテキストからビューを復元しようとしましたが、肯定的な結果は得られませんでした。そして、私たちはアイデアを使い果たしました。

任意のアイデア(または解決策:D)をいただければ幸いです。さらに具体的なコードが必要な場合は、質問してください。

TIA。

PS:この質問はICEFacesフォーラム(http://www.icesoft.org/JForum/posts/list/0/21842.page#76787)にも投稿されており、両方の場所で解決策(ある場合)で更新します。

4

1 に答える 1

1

IceSoftフォーラムで提案されたように、完全に新しいコンポーネントツリーを取得するためにナビゲーションを同じページにリダイレクトすることで、問題を解決しました。このためには、それを生き残るBeanの状態である必要がありますが、通常、バッキングBeanはビュースコープであるため、これは問題ではありません。これを実現するために、 c:foreachの背後にあるリストを変更していたvalueChangeListenerメソッドを変更し 、アクションメソッドを使用しました。このアクションメソッドでは、ページをリロードするためのナビゲーションルールとしてnullを返します。

詳細については、http ://www.icesoft.org/JForum/posts/list/21842.page#sthash.sXtPazmS.dpufをご覧ください。

于 2013-05-16T08:55:36.800 に答える