在使用複合材料部件時,有條件地與<c:if>
我知道這個的編譯/渲染時間的問題,我得到一個重複的ID例外,但我真的不知道爲什麼下面的例子不工作。 請看看以下三個簡單的片段重複ID例外使用<c:if>與複合材料部件
會話範圍的bean命名testBean就持有一個布爾值和兩個AJAX聽衆此值更改爲true或false:
@Named
@SessionScoped
public class TestBean implements Serializable {
private boolean isVisible = false;
public void onSetItemVisible(AjaxBehaviorEvent e) {
this.isVisible = true;
}
public void onSetItemInvisible(AjaxBehaviorEvent e) {
this.isVisible = false;
}
public boolean isItemVisible() {
return this.isVisible;
}
}
一個真正命名爲testCmp簡單複合部件:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:cc="http://java.sun.com/jsf/composite">
<cc:interface/>
<cc:implementation>
<h:outputText id="text" value="text"/>
</cc:implementation>
</html>
並允許隱藏/昭之間的切換的圖頁w此複合組件
<h:body>
<h:form id="testForm">
<c:if test="#{testBean.itemVisible}">
<test:testCmp id="test1"/>
</c:if>
<p/>
<test:testCmp id="test2"/>
<p/>
<!-- show/hide dynamic item -->
<h:commandLink value="Show Item">
<f:ajax execute="@this" listener="#{testBean.onSetItemVisible}" render="@form"/>
</h:commandLink>
<br/>
<h:commandLink value="Hide Item">
<f:ajax execute="@this" listener="#{testBean.onSetItemInvisible}" render="@form"/>
</h:commandLink>
</h:form>
</h:body>
事情是:我得到一個重複ID異常當我切換顯示/隱藏。 異常說:「組件ID了testForm:TEST2:文本已經在視圖中找到」
它抱怨「test2的」 ......這是不是有條件地添加的組件。 而當我不使用複合組件並用<h:outputText>
等標準組件替換它時,則任何情況都可以。 爲了重現錯誤,重要的是,複合組件在同一頁面使用兩次,一次使用,其他時間不使用該條件。
經過進一步的搜索,我發現了另一個我認爲和我一樣的問題。但他的例子看起來更復雜一些,更難以重現。 Duplicate component ID in JSF using composite component twice in view
任何人都有線索這裏發生了什麼? 我的設置是JBoss EAP7和Mojarra JSF 2.2.14(但我也使用JSF 2.3.0-m11進行了測試) 有人可以證實這個問題嗎? 如果是這樣,我會爲mojarray傢伙創建一個bug。
沒有人可以證實這種行爲? 如果它是當前jsf實現中的一個Bug,我可以忍受它,但是我還沒有在他們的jira bugtracker中找到任何東西,而現在我不知道我是否做錯了什麼或者誤解了一些JSF基礎知識。 – fmueller19
我在這裏創建了一個Bug:https://java.net/jira/browse/JAVASERVERFACES-4240 – fmueller19
它已被轉移到github上:https://github.com/javaserverfaces/mojarra/issues/4244 –