1

Bean は Request Scope にあるため、リダイレクトによって新しいインスタンスが作成されます。Bean をビュー スコープに入れようとすると、[プロパティ名がターゲット ビューよりも狭いオブジェクトを参照しています] というエラーが発生します。

ツリーを表示しています。ユーザーがツリー ノード、たとえば 2 番目のノードをクリックすると、そのノードに対応する値が次のページに表示されます。

@ManagedBean
@RequestScoped
public class ThreeSixtyDegreeBean implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    @ManagedProperty(value="#{param.name1}")
    private String name;
    private String type;
    private String typeName;

    private List<AttributeDetails> attributeList;
    private List<Entity> entityList;
    private boolean rendered;
    private TreeNode root;
    private TreeNode selectedNode;

public void onNodeSelect() {

*selecting Data of the Node selected* 

                String a=fetchData();

                try {
            FacesContext.getCurrentInstance().getExternalContext()
                    .redirect(a);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

axhtml ページの名前はどこにありますか。

4

2 に答える 2

1

新しい JSF 2 Flash Scope に自分のものを隠して、リクエスト間で属性を隠しておくことができます。あなたonNodeSelect()は今このように見えることができます:

 public void onNodeSelect() {

      *selecting Data of the Node selected* 
     FacesContext context = FacesContext.getCurrentInstance();
     Flash flash = context.getCurrentInstance().getExternalContext().getFlash(); //prepare jsf flash scope, to store user data pojo for the next view
     flash.putNow("myData", fetchData());
     try {
        FacesContext.getCurrentInstance().getExternalContext()
                .redirect(a);
       } catch (IOException e) {
           e.printStackTrace();
    }
}
}

#{flash}宛先ページでは、 EL 式を使用してフラッシュスコープに保存したデータを取得できます。基本的にはMap、保存した値のキーを使用するだけです (上記で使用した例では「myData」)。アクセスするには、使用します

     #{flash.myData.someMemberVariable}
于 2012-11-10T00:37:04.817 に答える
0

ビュースコープも機能しませんでした。同じビューにポストバックしている限り存続します。リダイレクトは基本的に新しい GET リクエストを作成し、ビュー スコープも再作成します。

この特定のケースでは、ポストバック リクエストではなく、リダイレクトされたリクエストでデータの初期化を実行することをお勧めします。必要な情報をリクエスト パラメータとして渡す通常の GET リンクを作成することで、これを行うことができます。このようなもの:

<h:link value="#{node.name}" outcome="#{node.viewId}">
    <f:param name="someId" value="#{node.someId}" />
    <f:param name="name1" value="#{param.name1}" />
</h:link>

次に、リダイレクトされたページに関連付けられたリクエスト スコープ Bean で、@ManagedPropertyまたは を使用して<f:viewParam>、リクエスト パラメータをモデル値として設定できます。

以下も参照してください。

于 2012-11-09T11:14:05.797 に答える