for
JSF/ICEFaces で非常に基本的なサイクルを実行する必要があるだけで、基本的には列番号をレンダリングします
次の疑似コードのようなもの
for(int i=0; i<max; i++)
{
<td>#{i}</td>
}
タグは<c:forEach>
コレクションを繰り返しますが、バッキング Bean をより複雑にして、愚かな整数のコレクションを返したくありません。
より短くてスマートな方法を知っていますか?
ありがとうございました
<c:forEach var="i" begin="1" end="#{someBean.max}">
<td>#{i}</td>
</c:forEach>
タグは、<ui:repeat>
実際に使用する必要があるものです。JSTL タグは、JSF ライフサイクルの外で動作します。Cay Horstman には、この事実を説明する JSF コースがあります: ui:repeat and Handling Variable-Length Data。
以下に、ある程度の柔軟性を示すいくつかのソリューションを示します。次のようなことができます。
<ui:param name="max" value="5"/>
<ui:repeat var="i" value="#{indexBean.values}" size="#{max}" >
<tr><td>#{i}</td></tr>
</ui:repeat>
行の最大数は、aa <ui:parameter>
namedによって決定されmax
ます。これは必須ではありませんが、柔軟性を示します。または、次のようなものを使用できます。
<ui:param name="max" value="5"/>
<ui:repeat var="i" value="#{indexBean.rowNumbers(max)}">
<tr><td>#{i}</td></tr>
</ui:repeat>
バッキング Bean コードは次のとおりです。
@ManagedBean
public class IndexBean {
public List<Integer> getValues() {
List<Integer> values = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
values.add(i);
}
return values;
}
public List<Integer> rowNumbers(final int max) {
List<Integer> values = new ArrayList<Integer>();
for (int i = 0; i < max; i++) {
values.add(i);
}
return values;
}
}
HTML タグをレンダリングするという観点ではなく、必要なことを行うコンポーネントを使用するという観点から、より高いレベルの抽象化を検討することをお勧めします。たとえば、Primefaces のデータテーブルは動的列をサポートしており、ページ上の反復ロジックを置き換えることができます。
リッチフェイスデータテーブルを使用すると、列のヘッダーと値を動的に生成できます