如何在primefaces中使用RequestContext?

时间:2011-07-11 14:12:13

标签: jsf-2 primefaces

我是新面孔的人。我在primeface showcase

中尝试了一些例子

可是;

saveUser之后,在ajax方法handleComplete(xhr, status, args) args上没有在saveUser方法中添加的参数。

编辑:我刚刚添加了@ManagedBean注释,因为我正在使用jsf 2.0

修改-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"

但我很确定还有另一种选择。只是无法看到它。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

解决!它是关于包含commandButton的表单的范围问题。命令按钮(我认为..didnt阅读关于它的正式文档。)在一个表单中有一个自己形式的范围。无法覆盖/更新/修改表单中的元素。