我想将一个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");
但目标页面适用于源页面的数据。原因可能是我的软件架构,我在这里无法详细解释......
我的问题:有没有人有类似的问题和解决方案?
答案 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>