<c:forEach> not recognized anymore after migration JSF 1.2 to JSF 2.2

不羁岁月 提交于 2019-12-13 01:09:16

问题


I am upgrading my application from JSF 1.2 to JSF 2.

I am trying a below simple forEach tag but it not showing anything inside the loop.

<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>

The value test is not showing up. Has the c:forEach implementaion changed?

I tried replacing with but has some other issue. It is rendering the content inside it. But if I have a component inside , I am not able to assign a backing bean value as ID of the component. Example is as below

<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>

So, with . I am not able to assign backing bean property as ID of the component. I am receiving the error "java.lang.IllegalArgumentException: component identifier must not be a zero-length String "

Can anyone please help me in understanding as to why the c:forEach tag is not working. I have huge code which is using forEach tag. With upgrade, I will have to remove every forEach if it is no more supported in JSF2 :(


回答1:


JSTL taglib/XML namespace URI has changed forth and back across JSTL/JSF/Facelets versions.

For JSF on JSP with JSTL 1.0, it is

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

For JSF on JSP with JSTL 1.1+, it is

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

For JSF 1.x on Facelets with JSTL 1.1+, it is

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

For JSF 2.x on Facelets with JSTL 1.2+, it is

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

For JSF 2.2+ on Facelets with JSTL 1.2+, it is

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

Make sure you pick the right one.

See also:

  • Our JSTL wiki page

Unrelated to the concrete problem, as to the underlying functional requirement which you're actually ultimately trying to solve, head to the following related questions for a thought:

  • Using id="#{...}" causes java.lang.IllegalArgumentException: Empty id attribute is not allowed
  • How to use EL with <ui:repeat var> in id attribute of a JSF component


来源:https://stackoverflow.com/questions/31155460/cforeach-not-recognized-anymore-after-migration-jsf-1-2-to-jsf-2-2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!