8

forJSF/ICEFaces で非常に基本的なサイクルを実行する必要があるだけで、基本的には列番号をレンダリングします

次の疑似コードのようなもの

for(int i=0; i<max; i++)
{
   <td>#{i}</td>
}

タグは<c:forEach>コレクションを繰り返しますが、バッキング Bean をより複雑にして、愚かな整数のコレクションを返したくありません。

より短くてスマートな方法を知っていますか?

ありがとうございました

4

5 に答える 5

11
<c:forEach var="i" begin="1" end="#{someBean.max}">
             <td>#{i}</td>      
 </c:forEach>
于 2011-03-10T10:06:03.883 に答える
5

タグは、<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;
}
}
于 2012-05-14T14:51:24.970 に答える
4

HTML タグをレンダリングするという観点ではなく、必要なことを行うコンポーネントを使用するという観点から、より高いレベルの抽象化を検討することをお勧めします。たとえば、Primefaces のデータテーブルは動的列をサポートしており、ページ上の反復ロジックを置き換えることができます。

于 2011-03-10T10:07:44.473 に答える
-1

リッチフェイスデータテーブルを使用すると、列のヘッダーと値を動的に生成できます

于 2011-10-01T10:54:28.283 に答える