8

我只需要for在 JSF/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 和处理可变长度数据

下面有几个解决方案展示了一些灵活性。你可以这样做:

<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

使用 ui 重复的简单示例

<ul>
    <ui:repeat var="entry" value="${tourBean.tour.highlights}">
        <li class="pb-1">#{entry}</li>
    </ui:repeat>
</ul>
于 2017-09-12T21:52:34.637 回答
-1

使用丰富的面孔数据表,您可以动态生成列标题和值

于 2011-10-01T10:54:28.283 回答