【问题标题】:How to use RequestContext in primefaces?如何在primefaces中使用RequestContext?
【发布时间】: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 页面中的 &lt;p:ajax&gt; 元素及其父元素,以及 (b) 您的动作监听器来自托管 bean 的方法。
  • 我可以在这里发布它们,但仅在我的参考文献中。
  • 你想通过调用 handleComplete 来完成什么?您希望将什么args 作为参数自动传递?请记住,JSF 有自己的内置验证,如果服务器端验证失败,则不会调用操作 #{user.saveUser}。我认为你让这变得比它需要的更复杂。
  • 感谢您的回复。我现在只是在玩组件。我希望从客户端看到所需/创建的 beans 属性,而不是希望看到是否有关于该操作的验证。

标签: jsf-2 primefaces


【解决方案1】:

解决了!这是关于包含命令按钮的表单的范围问题。命令按钮(我认为..没有阅读有关它的正式文档。)在表单中具有自己的表单范围。无法访问/更新/修改表单中的元素。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
相关资源
最近更新 更多