代码之家  ›  专栏  ›  技术社区  ›  Anthony

jsfajax更新使commandLink在第一次单击时失败

  •  7
  • Anthony  · 技术社区  · 16 年前

    该表包含具有编辑链接的项。

    <?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,但你也需要点击两次按钮。

    2 回复  |  直到 16 年前
        1
  •  4
  •   BalusC    16 年前

    当你把桌子放在一个 <h:form> < 从列中删除并替换 <h:panelGroup id="list-packages"> 通过 <h:form id="list-packages"> .

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

        2
  •  2
  •   Oversteer    14 年前

    这个问题很可能就是由于这个原因 JSF bug here . bug报告有一个解决方法,涉及到对jsf.js文件如果你喜欢生活在边缘。

    使用ajax和使用execute=控制提交到服务器的内容的能力,我个人觉得每个页面使用一个表单是一个很好的理由(除了在一些罕见的情况下,例如一些文件上传和对话框实现),而且您不会被容易忘记的命名容器错误所困扰,像这样的问题。