Java JSF Ajax更新使commandLink在第一次单击时失败
在我的JSF页面中,我有一个组合框,当选择组合框中的一项时,它会更新一个表 该表包含具有编辑链接的项 问题是,当组合框更改表时,您需要在链接上单击两次以转到页面。第一次单击仅刷新页面 下面是xhtml:Java JSF Ajax更新使commandLink在第一次单击时失败,java,ajax,jsf,jsf-2,Java,Ajax,Jsf,Jsf 2,在我的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=
<?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中运行JSF2.0.1-FCS。当您将表放在单个。从转向柱上拆下内支架并更换为
我不确定这个问题是如何/为什么导致的,需要更多的时间来调查,但这可能与以下事实有关:表的状态对于知道选择了哪一行很重要。这个问题很可能是由于这样的原因,即您不能让ajax目标包含从另一个表单更新的表单。该问题被视为规范问题,并被跟踪。如果您喜欢生活在边缘,bug报告有一个变通方法,涉及到对jsf.js的编辑
通过使用ajax和使用execute=控制提交到服务器的内容的能力,我个人认为,除了在一些罕见的情况下(如一些文件上载和对话框实现),每页使用一个表单是一个很好的理由,而且您不会被容易忘记命名容器的错误所困扰,还有像这样的问题。为什么在f:ajax呈现属性中有:list packages而不是list packages?也许这就是问题所在?可能表没有重新呈现?之所以“:”是因为要呈现的组件在表单之外。表已正确更新/呈现,但需要单击表中的链接两次才能转到页面。