我正在從JSF1.2/MyFaces + Facelets向JSF2.1/MyFaces遷移應用程序。我有以下模板,曾用於JSF1.2/MyFaces + Facelets。從JSF1.2 + Facelets遷移到JSF2「具有重複ID的組件」問題
<ui:component>
<f:subview id="#{id}">
.
.
<script
function blockLinkClicks(){
//Disables all the HyperLink Controls to prevent repeated submits
var allLinks = document.getElementById("#{id}:treeNodeForm").getElementsByTagName('a');
var count = allLinks.length;
.
.
</script>
.
.
.
<h:form id="treeNodeForm">
<h:panelGroup id="treePanelId">
<t:tree2 id="tree2Id"
value="#{treeBean.treeModel}" var="node" varNodeToggler="t"
binding="#{treeBean.component}" clientSideToggle="false" showNav="false">
<f:facet name="selectableNode">
<h:panelGrid id="tree2PGridSelNodeId" columns="3" cellpadding="0" cellspacing="0" border="0">
.
.
.
遷移後,我收到以下錯誤:
java.lang.IllegalStateException:組件與副本ID 「mainLeftTree:treeNodeForm:tree2Id:tree2PGridSelNodeId」 在org.apache.myfaces發現 .view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkIds(CheckDuplicateIdFaceletUtils.java:100) 在org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkIds(CheckDuplicateIdFaceletUtils.java:116)
我在這裏發現了類似的問題,但我無法將解決方案與上述問題聯繫起來。我試圖找到許多天/小時的解決方案,但不能。
請幫助您的建議和指針,我可以嘗試修復,因爲我不確定問題是否與f:subview或t:tree2或jsf2 facelets。
非常感謝您提前。
Regards, Kumar。
非常感謝您的時間和出色的建議。將javax.faces.PARTIAL_STATE_SAVING設置爲false即可。我以上述方式在10多頁中使用子視圖和EL。如果可能,請幫助策略避免子視圖ID中的EL。複合組件是一種備用解決方案嗎?如果是的話,我能夠在複合組件定義中使用Javascript,就像我在上面的代碼中使用的那樣(即,通過id獲取元素)? – Kumar
我認爲將所有東西都包裹到複合組件中會更好。使用#{id},您可以使用#{cc.clientId},並通過該更改,您可以再次啓用PSS。畢竟,複合材料部件背後的意圖之一是在這種情況下(但並非所有情況下)取代facelets模板。 – lu4242
非常感謝你。這是非常有用的信息。 – Kumar