单击浏览器中的后退按钮时JSF中的组件ID错误

时间:2013-11-23 12:38:26

标签: jsf-2

当我点击浏览器中的“后退按钮”时,我收到以下错误

   Component ID "prodRunsList:prodRunIdss" has already been found in the view. JSF 2.1.

以下是导致该异常的代码

其中(prodRunsList:prodRunIdss“)prodRunsList.xhtml和prodRunIdss是”命令链接“下的f:param

   <h:commandLink value="view" action="select">
    <f:param id="prodRunIdss" name="prodRunId" value="#{prodRun.prodRunId}"/>
    </h:commandLink>

注意:

我有“SearchForm.xhtml”页面,我可以输入一些值和搜索事件  我正在导航到“ResultDisplay.xhtml”页面以显示检索到的记录,每个记录的末尾我都有链接来编辑该行。当我点击后退按钮时,点击导航到“更新页面”的编辑链接在浏览器中我收到上述错误..

我的示例代码

<c:forEach items="#{prodRuns}" var="prodRun">
                        <p:row>
                            <p:column>
                                <h:outputText value="#{prodRun.diameter}" />
                            </p:column>
                            <p:column>
                                <h:outputText value="#{prodRun.partyName}" />
                            </p:column>
                            <p:column>
                                <h:outputText value="#{prodRun.millAndCounts}" />
                            </p:column>
                            <p:column>
                                <h:outputText value="#{prodRun.fabric}" />
                            </p:column>

                            <p:column>
                                <h:outputText value="#{prodRun.nightRun}" />
                            </p:column>
                            <p:column>                                  
                                <h:commandLink value="view" action="select">
                                    <f:param id="prodRunIdsss" name="prodRunId" value="#{prodRun.prodRunId}"/>
                                </h:commandLink>
                            </p:column>
                        </p:row>
                    </c:forEach>

1 个答案:

答案 0 :(得分:1)

当JSTL标记在构建/恢复视图中起作用时,这可以被认为是Mojarra中的状态管理错误。我们也在几个月前在zeef.com遇到了这个问题,在将2.1.21升级到2.1.24后得到了解决。我不能指出确切的问题单,但它至少固定在这些版本之间的某个地方。尝试升级到最新的2.1版本,currently已经是2.1.26。

但是,你基本上存在设计/可用性问题。你应该在这里使用GET请求而不是POST请求。

替换

<h:commandLink value="view" action="select">
    <f:param id="prodRunIdsss" name="prodRunId" value="#{prodRun.prodRunId}"/>
</h:commandLink>

通过

<h:link value="view" outcome="select">
    <f:param id="prodRunIdsss" name="prodRunId" value="#{prodRun.prodRunId}"/>
</h:link>

它还应该立即修复此异常而无需升级。额外奖励,该链接现在为idempotent,因此可收藏并且可搜索抓取。