0

我想将大量参数从一个 JSF 页面传递到另一个页面。

对于较少数量的参数,我在侦听器方法中使用 ExternalContext#redirect() ,其 url 包含如下参数:

 FacesContext.getCurrentInstance().getExternalContext().redirect("/faces/someDir/index.jsf?p1=a&p2=b");

如果我对大量参数做同样的事情,它就不起作用。我的理解是,浏览器对 URL 的大小有限制。如果 URL 有更多 tahn 约。2000个字符它不起作用。

我尝试了一个前锋

FacesContext.getCurrentInstance().getExternalContext().dispatch("/faces/someDir/index.jsf?p1=a&p2=b");

但随后目标页面对源页面的数据起作用。原因可能是我的软件架构,我在这里无法详细解释......

我的问题:有没有人有类似的问题和解决方案?

4

1 回答 1

0

如果您想跨更多页面发送大量参数,那么最好将它们封装到会话范围的 bean 中,而不是将它们作为 GET 参数发送。

例如:

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
@ManagedBean
@SessionScoped
public class SESSION_Bean_Class {

    // Declare members
    // all parameters
    private int p1;
    private int p2;
    private String p3;
    private String p4;

    // Getter(s) and Setter(s)
    public int getP1() {
        return p1;
    }
    public void setP1(int p1) {
        this.p1 = p1;
    }
    public int getP2() {
        return p2;
    }
    public void setP2(int p2) {
        this.p2 = p2;
    }
    public String getP3() {
        return p3;
    }
    public void setP3(String p3) {
        this.p3 = p3;
    }
    public String getP4() {
        return p4;
    }
    public void setP4(String p4) {
        this.p4 = p4;
    }
}

然后您可以在任何页面上轻松访问它们,如下所示:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets">
</h:head>
<h:body>
    Value parameter 1 is That #{sESSION_Bean_Class.p1}
    <br />
    Value parameter 2 is That #{sESSION_Bean_Class.p2}
    <br />
    Value parameter 3 is That #{sESSION_Bean_Class.p3}
    <br />
    Value parameter 4 is That #{sESSION_Bean_Class.p4}
    <br />  
</h:body>
</html>
于 2012-08-01T08:23:18.377 回答