我正在将应用程序从JSF1.2 / MyFaces + Facelets迁移到JSF2.1 / MyFaces。我有以下模板,它曾用于JSF1.2 / MyFaces + Facelets。
<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的组件&#34; mainLeftTree:treeNodeForm:tree2Id:tree2PGridSelNodeId &#34;发现 在org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkIds(CheckDuplicateIdFaceletUtils.java:100) 在org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkIds(CheckDuplicateIdFaceletUtils.java:116)
我在SO中发现了类似的问题,但我无法将解决方案与上述问题联系起来。我试图找到解决方案很多天/小时但不能。
请帮助您提出我可以尝试修复的建议和指示,因为我不确定问题是否与f:subview或t:tree2或jsf2 facelets有关。
非常感谢你。
此致 库马尔。
答案 0 :(得分:1)
我认为问题是由使用<f:subview id="#{id}>"
引起的,当启用PSS时,显然会中断,因为每次构建视图时都会评估EL。首先尝试将web配置参数javax.faces.PARTIAL_STATE_SAVING设置为false。或者您可以使用config参数javax.faces.FULL_STATE_SAVING_VIEW_IDS来指示哪些视图需要完全状态保存。也许最好避免使用id中的EL,并在该部分中使用其他策略,但这可能需要对逻辑进行一些更改。