2012-08-01 70 views
0

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

对于较低数目的参数我在监听方法使用的ExternalContext#重定向()与含有这样的参数的URL:

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

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

我试着像

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

向前但随后的目标页面工程对源页的数据。原因可能是我的软件archticture,我不能在这里详细解释...

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

+0

我想这是你需要的答案:http://serverfault.com/questions/56691/whats-the-maximum-url-length-in-tomcat – Luxspes 2012-08-01 08:11:48

回答

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> 
+1

非常感谢 - 这是一种解决问题的方法。我没有考虑将数据放入会话中,因为如果可能的话,我会避免使用会话变量。但在这种情况下,似乎是必要的。感谢名单 – HelmutH 2012-08-01 10:40:35