迁移JSF 1.2到JSF 2.2后,<c:foreach>不再被识别

时间:2015-07-01 07:47:57

标签: jsf foreach jstl jsf-2.2

我正在将我的应用程序从JSF 1.2升级到JSF 2。

我正在尝试使用以下简单的forEach标记,但它没有在循环中显示任何内容。

<table 
    id="tab${sectionId}"
    border="0" 
    cellpadding="0" 
    cellspacing="0" 
    width="100%"
    class="listingTable"
>
    <c:forEach
        var="row" 
        rowStatus="index"
        items="#{bean.department.userActivities}"
    >
        <tr>
            <td>
                test
            </td>
         </tr>
    </c:forEach>
</table>

价值测试未显示。 c:forEach实现是否已更改?

我尝试更换但有其他问题。它正在渲染内部的内容。但是如果我有一个组件,我无法将支持bean值指定为组件的ID。示例如下

<table 
    id="tab${sectionId}"
    border="0" 
    class="listingTable"
>
    <t:dataList
        var="row" 
        rowIndexVar="index"
        value="#{bean.department.userActivities}"
    >
        <h:column>
            <h:outputText id="#{row.activityCode}">test1</h:outputText>
        </h:column>
    </t:dataList>
</table>

所以,有了。我无法将支持bean属性指定为组件的ID。我收到错误&#34; java.lang.IllegalArgumentException:组件标识符不能是零长度字符串&#34;

任何人都可以帮助我理解为什么c:forEach标签不起作用。我有很多代码使用forEach标记。升级后,如果在JSF2中不再支持,我将不得不删除每个forEach :(

1 个答案:

答案 0 :(得分:2)

JSTL taglib / XML名称空间URI已经在JSTL / JSF / Facelets版本中发生了变化。

对于使用JSTL 1.0的JSP上的JSF,它是

<%@taglib prefix="c" uri="http://java.sun.com/jstl/core"%>

对于JSP with JSTL 1.1+上的JSF,它是

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

对于使用JSTL 1.1+的JSF 1.x on Facelets,它是

<xxx xmlns:c="http://java.sun.com/jstl/core">

对于JSTL 1.2+的JSF 2.x on Facelets,它是

<xxx xmlns:c="http://java.sun.com/jsp/jstl/core">

对于JSTL 1.2+的JSF 2.2+ on Facelets,它是

<xxx xmlns:c="http://xmlns.jcp.org/jsp/jstl/core">

确保选择正确的。

另见:

无关具体问题,关于您实际上最终试图解决的基本功能要求,请提出以下相关问题: