【问题标题】:What is the equivalent of JSTL <c:forTokens> in JSF or PrimeFaces?JSF 或 PrimeFaces 中的 JSTL <c:forTokens> 等价物是什么?
【发布时间】:2017-11-28 17:18:03
【问题描述】:

假设我们有以下 JSP 代码:

<c:forTokens items="${someBean.aStringOfIntNumbersSeparatedBySemicolons}" 
             delims=";" 
             var="item" 
             varStatus="stat">
  ${item}
  <c:if test="${!stat.last}">;</c:if>
  <c:if test="${stat.count %5 == 0}">
    <br/>
  </c:if>
</c:forTokens>

其中的输出以每行 5 列的形式呈现,如下所示:

我怎么可能用 JSF 或 Primefaces 标签做到这一点?

【问题讨论】:

  • 您可以在 JSF 中使用这些核心标签,xmlns:c="java.sun.com/jsp/jstl/core" 否则只需使用 ui:repeat 并使用自定义函数计算 var 属性,例如
  • @Mick 我试过了,但我不能将${...} 表达式的&lt;c:forTokens&gt; 标记与JSF 一起使用。它不会起作用。

标签: java jsf primefaces jstl


【解决方案1】:

没有直接的等价物,您应该将令牌转换为托管 bean 中的列表并在框架组件中使用该列表。

List<String> tokens = Arrays.asList("car1,car2,car3,car4".split(","));

对于这种简单的场景,您可能不需要 primefaces 组件。当您选择面向对象的模型时,您可以利用 PF 组件来遍历列表并使用数据绑定呈现其字段。例如:

DataList - 对于 cars1 列表中的每个 Car 类型,将在列表中添加一行。

<p:dataList value="#{dataListView.cars1}" var="car" type="ordered">
    <f:facet name="header">
        Basic
    </f:facet>
    #{car.brand}, #{car.year}
</p:dataList>


DataTable - 对于汽车列表中的每辆汽车,都会在表格组件中添加一行。

<p:dataTable var="car" value="#{dtBasicView.cars}">
    <p:column headerText="Id">
        <h:outputText value="#{car.id}" />
    </p:column>

    <p:column headerText="Year">
        <h:outputText value="#{car.year}" />
    </p:column>

    <p:column headerText="Brand">
        <h:outputText value="#{car.brand}" />
    </p:column>

    <p:column headerText="Color">
        <h:outputText value="#{car.color}" />
    </p:column>
</p:dataTable>

使用这样的component framework,您可能会加快专注于业务逻辑而不是 UI 设计的开发。

【讨论】:

【解决方案2】:

我找到的唯一可行的解​​决方案

目前,我发现的唯一可行的解​​决方案部分在于 JSF,部分在于后端代码:

  1. 编辑后端代码,使其在String 字段aStringOfIntNumbersSeparatedBySemicolons 的每五个元素之后添加一个&amp;lt;br/&amp;gt;

  2. escape="false" 添加到保存前端数据的&lt;h:outputText&gt; 标记。 (默认值为escape="true",将&amp;lt;br/&amp;gt;渲染为&amp;lt;br/&amp;gt;

【讨论】:

  • 抱歉,这是非常“非网络式”的解决方案。您可以轻松地使用在赞成的答案中完成的拆分,然后使用 ui:repeat 呈现 div 并使用 stackoverflow.com/questions/22013925/…...
猜你喜欢
  • 1970-01-01
  • 2014-02-15
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 2020-07-01
  • 1970-01-01
相关资源
最近更新 更多