2012-05-23 28 views
2

我正在使用ui:repeat標記呈現圖像。我有五個圖像,我希望在每次迭代中,我的圖像都可以獲得像image1,image2,image3 ....等圖像。我試過這個,但它不起作用。如何使用ui動態生成dataTable中的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

不能在id屬性中使用EL表達式。它需要是靜態的。 ui:repeat本身爲您的ID生成一個前綴。你不需要關心唯一性。

所以,舉例來說,如果你有一個id="image",則生成的ID是

somePrefix:0:imagesomePrefix:1:image ...

+0

是的,我在螢火蟲看到它。我可以在圖像上添加id 0,1嗎?就像它變成了image0,image1?以任何方式 。如果這是不可能的與jsf然後用jQuery ...其實我想當我的圖像之一得到點擊,然後我得到的形式image1,image2的id屬性。這裏索引從0開始。但是我想從1開始索引星。就像圖像somePrefix:0:圖像被點擊,然後我得到了id image1,其實我正在使用圖像庫,其中我需要的形式image1,image2的關鍵。謝謝 – Basit

+0

當然,您可以編寫一個jQuery onclick處理程序來構建所需的字符串。 –

+0

嗯好吧我只是想確保它不可能在JSF方面,就像使用el。謝謝 :) – Basit

10

可以在id屬性使用EL,但它必須是在提供查看構建時間。 <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

但是你可以在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

-1

只要改變<ui:repeat><c:forEach>

相關問題