从JSF1.2 + Facelets迁移到JSF2,“具有重复ID的组件”问题

时间:2012-07-03 10:46:43

标签: jsf-2 facelets tomahawk

我正在将应用程序从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有关。

非常感谢你。

此致 库马尔。

1 个答案:

答案 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,并在该部分中使用其他策略,但这可能需要对逻辑进行一些更改。