Вопрос по jsf-2 – Как динамически генерировать идентификатор в dataTable с помощью тега ui: repeat

2

Я использую тэг: repeat, который отображает изображения. У меня есть пять изображений, которые я хочу, чтобы на каждой итерации мое изображение получало идентификаторы, такие как 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>

Я также попробовал {staus.index + 1}. Я также попробовал id = image # {1 ++}, но он также не работает. Как мне это сделать?

Спасибо

Ваш Ответ

4   ответа
-1

<ui:repeat> в<c:forEach>

10

id атрибут, но он должен быть доступен во время сборки представления.<ui:repeat> однако работает во время представления рендера, он будет использовать то же самое<p:graphicImage> генерировать несколько HTML<img> элементы. Он не запускается во время создания представления, поэтомуid остаткиimage.

Если вы замените<ui:repeat> от<c:forEach>тогда он будет работать так, как вы намеревались.<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>
2

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

Вы также можете использовать переменные с обработчиками событий (начиная с JSF 2.0):

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

Но твой круг сc:forEach может вызвать проблемы. Помните, что теги JSTL (все, что начинается сc:) не полностью совместимы с JSF. Если вам повезет, то они работают как положено. Но в любом случае замедляется механизм рендеринга, поскольку страница обрабатывается несколько раз с помощью механизма рендеринга JSF и JSP.

Лучше использоватьui:repeat.

4

id приписывать. Это должно быть статичным.ui:repeat Сам генерирует префикс к вашему идентификатору. Вам не нужно заботиться об уникальности.

Так, например, если у вас естьid="image", тогда сгенерированные идентификаторы

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

Error: User Rate Limit Exceeded Basit
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Basit

Похожие вопросы