JSF中的"for"循环

usr*_*ΛΩΝ 8 java jsf icefaces jspx

我只需要for在JSF/ICEFaces中执行一个非常基本的循环,基本上是渲染列号

类似下面的伪代码

for(int i=0; i<max; i++)
{
   <td>#{i}</td>
}
Run Code Online (Sandbox Code Playgroud)

<c:forEach>超过集合标记迭代,但我不想让我的支持bean更复杂返回整数的一个愚蠢的集合.

你知道更短更智能的方式吗?

谢谢

Jig*_*shi 11

<c:forEach var="i" begin="1" end="#{someBean.max}">
             <td>#{i}</td>      
 </c:forEach>
Run Code Online (Sandbox Code Playgroud)


Joh*_*ary 5

<ui:repeat>标签是您真正应该使用的标签。JSTL标记在JSF生命周期之外运行。Cay Horstman拥有一门JSF课程,该课程讨论了以下事实:ui:repeat和处理可变长度数据

下面有几个解决方案显示出一定的灵活性。您可以执行以下操作:

<ui:param name="max" value="5"/>
<ui:repeat var="i" value="#{indexBean.values}" size="#{max}" >
 <tr><td>#{i}</td></tr>
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)

最大行数由<ui:parameter>名为的aa确定max。这不是必需的,但确实显示了灵活性。另外,您可以使用类似:

<ui:param name="max" value="5"/>
<ui:repeat var="i" value="#{indexBean.rowNumbers(max)}">
 <tr><td>#{i}</td></tr>
</ui:repeat>
Run Code Online (Sandbox Code Playgroud)

支持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;
}
}
Run Code Online (Sandbox Code Playgroud)