0

我正在将应用程序从 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:在 org.apache.myfaces 的 org.apache.myfaces.view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkIds(CheckDuplicateIdFaceletUtils.java:100) 中找到具有重复 ID“ mainLeftTree:treeNodeForm:tree2Id:tree2PGridSelNodeId ”的组件。 view.facelets.compiler.CheckDuplicateIdFaceletUtils.checkIds(CheckDuplicateIdFaceletUtils.java:116)

我在 SO 中发现了类似的问题,但我无法将解决方案与上述问题联系起来。我试图找到解决方案很多天/几个小时,但找不到。

请帮助您提供我可以尝试修复的建议和指示,因为我不确定问题是否与 f:subview 或 t:tree2 或 jsf2 facelets 有关。

非常感谢您提前。

问候,库马尔。

4

1 回答 1

1

我认为问题是由使用 引起的<f:subview id="#{id}>",这显然会在启用 PSS 时中断,因为每次构建视图时都会评估 EL。首先尝试将 web 配置参数 javax.faces.PARTIAL_STATE_SAVING 设置为 false。或者您可以使用配置参数 javax.faces.FULL_STATE_SAVING_VIEW_IDS 来指示哪些视图需要完全状态保存。避免 id 中的 EL 并在该部分使用其他策略可能是一个好主意,但这可能需要对逻辑进行一些更改。

于 2012-07-03T11:41:18.153 回答