【问题标题】:JSF Ajax updates makes commandLink fails at the first clickJSF Ajax 更新使 commandLink 在第一次单击时失败
【发布时间】:2011-04-09 04:02:38
【问题描述】:

在我的 JSF 页面中,我有一个组合框,当组合框的一个项目被选中时,它会更新表格。

表格包含带有编辑链接的项目。

问题是当组合框更改表格时,您需要在链接上单击两次才能转到页面。第一次点击只是刷新页面。

这里是 xhtml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <body>
        <ui:composition template="/template.xhtml">
            <ui:define name="windowTitle">Comment packages</ui:define>
            <ui:define name="content">
                <h3>Select the package to comment.</h3>
                <h:form prependId="false">
                    Section:
                    <h:selectOneMenu id="selectSection" value="#{platformService.currentSection}">
                        <f:ajax render=":list-packages" />
                        <f:selectItems value="#{platformService.releasePlatform.sections}" />
                    </h:selectOneMenu>
                </h:form>
                <p/>
                <h:panelGroup id="list-packages">
                    <h:dataTable id="packageList" var="package" value="#{packageService.packages}" border="1" >
                        <h:column>
                            <f:facet name="header">Package name</f:facet>
                            #{package.name}
                        </h:column>
                        <h:column>
                            <h:form>
                                <h:commandlink action="#{commentService.commentPackage}" value="Comment">
                                    <f:param name="packageName" value="#{package.name}" />
                                </h:commandLink>
                            </h:form>
                        </h:column>
                    </h:dataTable>
                </h:panelGroup>
            </ui:define>
        </ui:composition>
    </body>
</html>

我也尝试过使用 commandButton,但您还需要在按钮上单击两次。

我在 Maven/Jetty 中运行 JSF 2.0.1-FCS。

【问题讨论】:

  • 为什么在 f:ajax 渲染属性中有 ":list-packages" 而不是 "list-packages"?也许这就是问题所在?也许表格没有重新渲染?
  • ':' 是因为要渲染的组件在表单之外。 ocpsoft.com/java/jsf2-java/… 表格已正确更新/呈现,但表格中的链接需要单击两次才能转到页面。

标签: java ajax jsf jsf-2


【解决方案1】:

当您将表格放在单个 &lt;h:form&gt; 中时,它会起作用。从列中删除内部&lt;h:form&gt;,并将&lt;h:panelGroup id="list-packages"&gt; 替换为&lt;h:form id="list-packages"&gt;

我不确定这个问题是如何/为什么引起的(需要更多时间来调查),但这可能与表的状态对于知道选择了哪一行很重要这一事实有关。

【讨论】:

    【解决方案2】:

    这个问题很可能是由JSF bug 引起的,在该JSF bug 中,您不能拥有包含从另一个表单更新的表单的ajax 目标。该问题被视为规范问题并被跟踪here。如果您喜欢生活在边缘,则错误报告有一个涉及编辑 jsf.js 的解决方法。

    通过使用 ajax 以及使用 execute= 控制提交到服务器的内容的能力,我个人认为每页使用一个表单是一个很好的论据(除非在极少数情况下,例如某些文件上传和对话框实现),并且您不会被容易忘记的命名容器事故以及诸如此类的问题所困扰。

    【讨论】:

      猜你喜欢
      • 2012-11-23
      • 2011-11-17
      • 2013-01-06
      • 2020-10-18
      • 2019-11-05
      • 2011-09-23
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      相关资源
      最近更新 更多