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

时间:2012-08-01 07:54:22

标签: jsf redirect parameters forward

我想将一个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");

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

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

1 个答案:

答案 0 :(得分: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>