0

あるJSFページから別のページに多数のパラメーターを渡したい。

パラメータの数を減らすには、次のようなパラメータを含むURLを使用してリスナーメソッドでExternalContext#redirect()を使用します。

 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

より多くのページにまたがって多数のパラメーターを送信する場合は、それらをGETパラメーターとして送信するのではなく、セッションスコープのBeanにカプセル化することをお勧めします。

例えば:

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 に答える