如何使用ui:repeat标签在dataTable中动态生成id

Bas*_*sit 2 el jsf-2

我正在使用ui:repeat标记渲染图像.我有五个图像,我想在每次迭代时,我的图像得到ID像image1,image2,image3 .... imagen.我试过这个,但它没有用.

<div id="imageGallery">
    <ui:repeat value="#{countryPages_Setup.images}" var="image" varStatus="status">
        <tr>
            <td>
                <a href="javascript:void()" class="launchLink">
                    <p:graphicImage id="image#{status.index}"         //problem
                                    value="/resources/images/#{image}"
                                    width="100"
                                    height="100"
                                    rendered="#{countryPages_Setup.renderImages}"/>
                </a>
            </td>
        </tr>
    </ui:repeat>
</div>
Run Code Online (Sandbox Code Playgroud)

我也试过{staus.index + 1}.我也试过id = image#{1 ++}但它也没有用.我该怎么做?

谢谢

Bal*_*usC 10

您可以在id属性中使用EL ,但必须在视图构建期间使用它.所述<ui:repeat>然而运行视图中呈现时,它会重复使用相同的<p:graphicImage>,以产生多个HTML <img>元素.它不会在视图构建期间运行,因此id遗留下来image.

如果更换<ui:repeat><c:forEach>,那么它会工作,你intented.该<c:forEach>视图中建立运行时间,它会生成多个<p:graphicImage>,这将随后分别获得仅呈现一次的部件.

<div id="imageGallery">
    <c:forEach items="#{countryPages_Setup.images}" var="image" varStatus="status">
        <tr>
            <td>
                <a href="javascript:void()" class="launchLink">
                    <p:graphicImage id="image#{status.index}"
                                    name="images/#{image}"
                                    width="100"
                                    height="100"
                                    rendered="#{countryPages_Setup.renderImages}"/>
                </a>
            </td>
        </tr>
    </c:forEach>
</div>
Run Code Online (Sandbox Code Playgroud)