How to dynamically generate id in dataTable using ui:repeat tag

后端 未结 4 487
天命终不由人
天命终不由人 2021-01-07 03:23

I am using ui:repeat tag which render images. I have five images i want that on each iteration my image get ids like image1, image2, image3.... imagen. I tried this but it i

相关标签:
4条回答
  • 2021-01-07 04:02

    You can use EL in the id attribute, but it has to be available during view build time. The <ui:repeat> however runs during view render time, it will reuse the same <p:graphicImage> to generate multiple HTML <img> elements. It doesn't run during view build time, so the id remains image.

    If you replace <ui:repeat> by <c:forEach>, then it'll work as you intented. The <c:forEach> runs during view build time and it will generate multiple <p:graphicImage> components which will then each get rendered only once.

    <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>
    
    0 讨论(0)
  • 2021-01-07 04:05

    Just change <ui:repeat> to <c:forEach>

    0 讨论(0)
  • 2021-01-07 04:10

    But you can use variable in Javascript, for example:

    <h:graphicImage ... onclick="top.location.href='http://blabla.com/imageclicked?id=#{status.index}'"/>
    

    You can also use Variables with event handlers (since JSF 2.0):

    <h:commandLink ... action="#{myBean.imageClicked(status.index)"/>
    

    But your loop with c:forEach can cause problems. Be aware that the JSTL tags (everything that begins with c:) are not fully compatible to JSF. If you have luck, then they work as expected. But anyways the slow down the rendering engine, since the page gets processed multiple times by the JSF and JSP rendering engine.

    Better use ui:repeat.

    0 讨论(0)
  • 2021-01-07 04:21

    You cannot use el expressions within the id attribute. It needs to be static. The ui:repeat itself generates a prefix to your id. You don't need to care about uniqueness.

    So, for instance if you have an id="image", then the generated ids are

    somePrefix:0:image, somePrefix:1:image, ...

    0 讨论(0)
提交回复
热议问题