【发布时间】:2011-07-11 14:12:13
【问题描述】:
我是 primefaces 的新手。我在primeface showcase中尝试了一些示例
但是;
在saveUser 之后,在ajax 方法handleComplete(xhr, status, args) 上,参数没有在saveUser 方法中添加的参数。
编辑:我刚刚添加了 @ManagedBean 注释,因为我使用的是 jsf 2.0
EDIT-2
在我的 pom 中;
<dependency>
<groupId>org.primefaces</groupId>
<artifactId>primefaces</artifactId>
<version>2.2</version>
</dependency>
在我的 web.xml 中
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
在我的 .xhtml 页面中
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
<script type="text/javascript">
function handleComplete(xhr, status, args) {
if(args.validationFailed) {
alert("Validation Failed");
} else {
alert("Save:" + args.saved);
alert("FirstName: " + args.user.firstname + ", Lastname: " + args.user.lastname);
}
}
</script>
</h:head>
<h:body>
<h:form>
<p:panel id="panel" header="New User">
<h:panelGrid columns="2">
<h:outputLabel for="firstname" value="Firstname: *" />
<p:inputText id="firstname" value="#{user.firstName}" required="true"/>
<h:outputLabel for="surname" value="Lastname: *" />
<p:inputText id="surname" value="#{user.surName}" required="true"/>
</h:panelGrid>
</p:panel>
<p:commandButton value="Save" actionListener="#{user.saveUser}" oncomplete="handleComplete(xhr, status, args)" />
</h:form>
</h:body>
</html>
在我的豆子里;
@ManagedBean(name = "user")
public class User {
private String firstName = "";
private String surName = "";
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
public void setSurName(String surName) {
this.surName = surName;
}
public String getSurName() {
return surName;
}
public void saveUser(ActionEvent actionEvent) {
// save user
RequestContext context = RequestContext.getCurrentInstance();
context.addCallbackParam("saved", true);
context.addCallbackParam("user", this);
}
}
编辑 -3
我可以使用 this.PrimeFaces.ajax.RequestManager.requests[0].data 在 ajax 响应中捕获带有数据的属性,它带有该数据;
"j_id2059540600_7ac21836=j_id2059540600_7ac21836&j_id2059540600_7ac21836%3Afirstname=qweq&j_id2059540600_7ac21836%3Asurname=asda&javax.faces.ViewState=8900392402396831372%3A-8139730777939772917&javax.faces.partial.ajax=true&javax.faces.source=j_id2059540600_7ac21836:j_id2059540600_7ac218a5&javax.faces.partial.execute=@all&j_id2059540600_7ac21836:j_id2059540600_7ac218a5=j_id2059540600_7ac21836:j_id2059540600_7ac218a5"
但我很确定还有另一种选择。就是看不出来。
感谢您的帮助。
【问题讨论】:
-
如果您编辑问题以包含以下代码,这将更容易为您提供帮助:(a) Facelets 页面中的
<p:ajax>元素及其父元素,以及 (b) 您的动作监听器来自托管 bean 的方法。 -
我可以在这里发布它们,但仅在我的参考文献中。
-
你想通过调用 handleComplete 来完成什么?您希望将什么
args作为参数自动传递?请记住,JSF 有自己的内置验证,如果服务器端验证失败,则不会调用操作#{user.saveUser}。我认为你让这变得比它需要的更复杂。 -
感谢您的回复。我现在只是在玩组件。我希望从客户端看到所需/创建的 beans 属性,而不是希望看到是否有关于该操作的验证。
标签: jsf-2 primefaces