“为了” JSF 中的循环

发布于 2024-10-21 05:15:05 字数 288 浏览 1 评论 0原文

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

类似于以下伪代码的

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

标记迭代集合,但我不想让我的支持 bean 变得更复杂,返回一个愚蠢的整数集合。

你知道更短更聪明的方法吗?

谢谢

I simply need to perform a very basic for cycle in JSF/ICEFaces, basically rendering column numbers

Something like the following pseudo-code

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

the <c:forEach> tag iterates over collections, but I don't want to make my backing bean more complex returning a stupid collection of integers.

Do you know a shorter and smarter way?

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

得不到的就毁灭 2024-10-28 05:15:05
<c:forEach var="i" begin="1" end="#{someBean.max}">
             <td>#{i}</td>      
 </c:forEach>
<c:forEach var="i" begin="1" end="#{someBean.max}">
             <td>#{i}</td>      
 </c:forEach>
深陷 2024-10-28 05:15:05

标签是您真正应该使用的。 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>

最大行数由名为 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;
}
}

The <ui:repeat> tag is what you should really use. The JSTL tags operate outside of the JSF Lifecycle. Cay Horstman has a JSF coursewhich discusses this fact: ui:repeat and Handling
Variable-Length Data
.

There are a couple of solutions below which demonstrate some flexibility. You could do something like this:

<ui:param name="max" value="5"/>
<ui:repeat var="i" value="#{indexBean.values}" size="#{max}" >
 <tr><td>#{i}</td></tr>
</ui:repeat>

The maximum number of rows is determined by a a <ui:parameter> named max. This is not required, but does demonstrate flexibility. Alternatively you could use something like:

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

The backing bean code is the following:

@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;
}
}
颜漓半夏 2024-10-28 05:15:05

我建议从更高的抽象层次进行思考,不是渲染 HTML 标签,而是使用能够满足您需要的组件。例如,Primefaces 的数据表支持动态列,它应该能够替换您的页面迭代逻辑。

I suggest thinking at a higher level of abstraction, not in terms of rendering HTML tags, but in terms of using a component that does what you need. For example, Primefaces' datatable supports dynamic columns, which should be capable of replacing your on-page iteration logic.

予囚 2024-10-28 05:15:05

使用 ui 重复的简单示例

<ul>
    <ui:repeat var="entry" value="${tourBean.tour.highlights}">
        <li class="pb-1">#{entry}</li>
    </ui:repeat>
</ul>

Simple example using ui repeat

<ul>
    <ui:repeat var="entry" value="${tourBean.tour.highlights}">
        <li class="pb-1">#{entry}</li>
    </ui:repeat>
</ul>
简单 2024-10-28 05:15:05

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

with rich faces data table you can dynamically generate columns headers and values

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文