2

画像をレンダリングする ui:repeat タグを使用しています。私は 5 つの画像を持っています。各反復で画像が image1、image2、image3.... imagen のような ID を取得するようにします。これを試しましたが、うまくいきません。

<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

4 に答える 4

10

属性でEL を使用できますがid、ビューのビルド時に使用できる必要があります。ただし、<ui:repeat>ビューのレンダリング時に実行され、同じものを再利用して<p:graphicImage>複数の HTML<img>要素を生成します。ビューのビルド時には実行されないためidimage.

で置き換える<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>
于 2012-05-23T13:24:26.910 に答える
2

ただし、Javascript では変数を使用できます。たとえば、次のようになります。

<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

于 2012-11-21T18:43:59.367 に答える
-1

に変更<ui:repeat>するだけ<c:forEach>

于 2013-09-25T16:55:03.973 に答える