【发布时间】:2013-07-30 09:56:00
【问题描述】:
当我设置 ajax="false" 时,下面的简化代码正在工作。使用 ajax="true" 时,第二个 commandButton 在由 Button1 或 Button2 更新后推送时不会调用 personPM.commitEditPerson()。
有人可以帮我看看这里有什么问题吗?因为好像不太好解决,所以我添加了可以轻松复现的整个代码(JSF 2.2,Primefaces 是 3.5,GlassFish 4.0):
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:p="http://primefaces.org/ui">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form id="f1">
<p:commandButton id="Button1" update=":neuePerson" value="Neue Person" action="#{testPM.setCurrentPerson()}"/>
</h:form>
<h:panelGroup id="neuePerson">
<h:form id="f2" >
<p:commandButton id="Button2" update=":neuePerson" value="Übernehmen" action="#{testPM.commitEditPerson()}"/>
</h:form>
</h:panelGroup>
</h:body>
</html>
Session Scoped Bean TestPM.java:
package at.feimas.administration.presentation;
import java.util.logging.Level;
import java.util.logging.Logger;
public class TestPM {
private String currentPerson;
private String firstName;
private static final Logger logger = Logger.getLogger(TestPM.class.getName());
public void setCurrentPerson() {
logger.log(Level.INFO, "New Person");
}
public void commitEditPerson(){
logger.log(Level.INFO, "Edit Person");
}
}
【问题讨论】:
-
这是您的实际代码吗?第二种形式的字段是否有任何验证器?检查 JavaScript 控制台以查看是否确实有请求发送到服务器。 BTW
ajax=true是默认值。 -
不确定这是否能解决问题,但您在使用
action时应该使用actionListener:stackoverflow.com/questions/3909267/… -
@user1983983 是的,这是实际代码。没有验证器。 JavaScript 控制台告诉我一个请求将发送到服务器。但是 personPM.commitEditPerson() 没有被调用(我已经实现了一条日志消息)。
-
@Lester 我试过了,但没有任何改变:没有调用 personPM.commitEditPerson()。
标签: ajax jsf primefaces