<ui:include>
1ページを動的に数回含めたい。
コード:
<h:dataTable ..>
<h:column>
<ui:include src="#{create_page}">
<h:column>
<h:dataTable>
今私が提出するとき、それは最後のインクルードだけを持続させます。最後に含まれたページの値のみが記憶されます。各create_pageに一意のエンティティオブジェクトが必要です。どうやってやるの?
これ<ui:include>
は、ビューのビルド時に実行されるタグハンドラーであり、<h:dataTable>
ビューのレンダリング時に実行されるUIコンポーネントです。これは、がの前に<ui:include>
1回だけ実行されるため、反復中には実行されないことを意味します。事実上、すべての行でまったく同じインクルードソースになります。フォームが送信されると、行は最後の行まで1つずつ処理されます。そのため、最終的には最後の行の値になります。<h:dataTable>
これを解決するには、基本的に2つの方法があります。
<c:forEach>
の代わりに使用<h:dataTable>
します。これは、ビューのビルド時にも実行されます。
の代わりにタグファイルまたは複合コンポーネントを使用します<ui:include>
。これは、ビューのレンダリング時にも実行されます。
いずれの場合も、入力値がvar
、同じバッキングBeanプロパティではなく、データテーブルの属性の背後にあるオブジェクトにバインドされていることを確認する必要があります。
<ui:include>
JSTLと同じカテゴリに分類されます)