我們從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的
它看起來更像是MyFaces中的錯誤。在Mojarra實施中存在一些問題,這可能與MyFaces類似。嘗試不同(最新)的MyFaces版本。如果可能的話,嘗試使用Mojarra實現來檢查問題是否由JSF impl中特定的內容引起。 – Andrey
@Andrey:感謝comments.Out上面提到的兩個問題,[email protected]打印和錯誤的html標記,這是你正在談論的問題? – Atul
關於錯誤的標記,h:commandLink生成元素兩次。 – Andrey