2014-01-22 18 views
0

我們從jsf 1.2升級到jsf 2. 我們使用的是apache myfaces 2.1和豐富的faces 4.3。用JSF標記替換c:forEach的最佳方法

下面是XHTML代碼:

<h:form> 
<h:panelGroup id="myMenu_type"> 

    <div id="myMenu"> 
     <ul> 
     <c:forEach items="#{bean.data}" var="val"> 
       <li> 
        <h:commandLink value="#{val.label}" action="#{val.performAction}"/>                              
       </li> 
     </c:forEach> 
     </ul> 
    </div> 
</h:panelGroup> 
</h:form> 

我收到重複的ID錯誤上面XHTML代碼。 生成的錨鏈接標記<a>獲取上述代碼的重複ID。

我的問題是,我想擺脫c:forEach,因爲我懷疑它是給這個重複的id錯誤,因爲我混合了JSTL和JSF 。

什麼是最好的JSF方式來取代上述構造?我正在嘗試使用rich:dataTable。 有沒有更好的選擇? 請指教。 奇怪的部分是,使用相同的代碼,JSF 1.2沒有觀察到上述問題。

編輯1:

我一直在使用<rich:list>以及<a4j:repeat> 下面是XHTML代碼

<div id="myMenu"> 
        <rich:list value="#{bean.data}" var="val"> 
         #{val} 
        </rich:list> 
     </div> 

奇怪的是,當我打印#{val},它給了我價值的嘗試[email protected]而val是正常的 自定義對象。 由於上述問題,我不能在val上調用任何方法,它會在類型javax.faces.component.UIViewRoot錯誤中找不到Property'xx'。 使用<c:forEach>時,未出現上述錯誤。

編輯2:

我附上用於上述XHTML代碼這給其中重複的ID錯誤即將有清楚的概念生成的HTML。如上面的代碼所示

<tr><td> 

    <span id="form:myMenu_type"> 
    <a href="#" onclick="return myfaces.oam.submitForm(id1);">One</a> 
    <a href="#" onclick="return myfaces.oam.submitForm(id2);">Two</a> 
    <a href="#" onclick="return myfaces.oam.submitForm(id3);">Three</a> 
    <a href="#" onclick="return myfaces.oam.submitForm(id4);">Four</a> 
    <a href="#" onclick="return myfaces.oam.submitForm(id5);">Five</a> 
    <a href="#" onclick="return myfaces.oam.submitForm(id6);">Six</a> 
       <div id="myMenu"> 
          <ul> 
            <li ><a href="#" onclick="return myfaces.oam.submitForm(id1);">One</a> 
            </li> 
            <li ><a href="#" onclick="return myfaces.oam.submitForm(id2);">Two</a> 
            </li> 
            <li ><a href="#" onclick="return myfaces.oam.submitForm(id3);">Three</a> 
            </li> 
            <li ><a href="#" onclick="return myfaces.oam.submitForm(id4);">Four</a> 
            </li> 
            <li ><a href="#" onclick="return myfaces.oam.submitForm(id5);">Five</a> 
            </li> 
            <li ><a href="#" onclick="return myfaces.oam.submitForm(id6);">Six</a> 
            </li> 
            <li ><a href="#" onclick="return myfaces.oam.submitForm(id7);">Seven</a> 
            </li> 
            <li ><a href="#" onclick="return myfaces.oam.submitForm(id8);">Eight</a> 
            </li>        
          </ul> 
        </div> 
    </span>  
</td></tr> 

所以,下方的形式產生的錨鏈接標籤<a>:myMenu_type是真正的問題。它的id與<li>內生成的完全一樣 - 這是正確的,因爲我明確地使用了<li>。爲什麼錨標籤正在生成是真正的問題。即使我動態分配<c:forEach>中的ID,同樣會被分配給<a>以上鍊接給出相同的重複ID錯誤。我使用了僞ID來解釋問題。實際ID由MyFaces的

+0

它看起來更像是MyFaces中的錯誤。在Mojarra實施中存在一些問題,這可能與MyFaces類似。嘗試不同(最新)的MyFaces版本。如果可能的話,嘗試使用Mojarra實現來檢查問題是否由JSF impl中特定的內容引起。 – Andrey

+0

@Andrey:感謝comments.Out上面提到的兩個問題,[email protected]打印和錯誤的html標記,這是你正在談論的問題? – Atul

+1

關於錯誤的標記,h:commandLink生成元素兩次。 – Andrey

回答

0

使用ui生成的動態ID:JSF

重複

例如:

<ui:repeat value="#{productMB.products}" var="product"> 
<table class="cart"> 
    <tr> 
    <td class="image"> 
     <div id="image_container"> 
     <img title="#{product.type} #{product.mark} #{product.family} #{product.subfamily} #{product.model} #{product.partNumber}" src="#{product.imageURL}"/> 
     </div>   
    </td> 
    </tr> 
</table> 
</ui:repeat> 
相關問題