0

少し重要なシナリオがあります。

3ページを考えてみましょう。Page1Page2Page3

Page1から。1つのパラメータは'note'という名前のQueryStringにあります。'CreateNote'または'UpdateNote'の2つの値があります。それらの値に基づいて、私は非表示にし、Page2のいくつかのコンテンツを表示します。

ここまで問題ありません。

次に、Page2からPage3に移動する必要があります。Page3の戻るボタン。Backにnote属性を設定しようとしましたが、それでもこれらの情報が設定されていないため、Page2でnullポインターアクセスが発生します。


以下のようないくつかのコード

Page1のようなURL

http://localhost:9095/Oscer/pages/UpdateNote.jsf?modified=NO&note=UpdateNote&docid=206&callFrom=prescribe

Page2 _

次のようなスクリプトレットを使用して処理します...

backingbeanコンストラクター呼び出しでnoteオブジェクトを設定します。

<%
    String note = request.getParameter("note");
    if(note == null || note.equals("")){
        note = (String)request.getAttribute("note");
    }
    request.setAttribute("note",note);
%>

3ページ目

次のようにBackButtonを処理しようとしました。

if(note == null){
            FacesContext facesContext = FacesContext.getCurrentInstance();
            Map<String,String> requestObj = facesContext.getExternalContext().getRequestParameterMap();
            if(requestObj != null){
                note = requestObj.get("note"); //Either of CreateNote or UpdateNote
            }
        }

        request.setAttribute("note", note);

設定したのにPage3からPage2に戻ると、まだ設定されていないPage2request.setAttribute("note", note); に注意のNULLポインタ例外が発生します:(

クエリ文字列で処理されたjspページのような場合のナビゲート方法がわかりませんか?

4

2 に答える 2

0

やったよ... :)

私がしたことは...

backingBeanの1つでPage1からPage2に移動するときに、sampleBackingBean1つの変数を設定するとします。SampleBackingBeanのデフォルトコンストラクターのリクエストスコープからメモを取得して、その値を初期化します。

そして、jsp Page2では、コンテンツを表示および非表示にするものはすべて、{sampleBackingBean.note}

今、すべてが正常に機能しています... :)

于 2012-05-18T05:41:20.993 に答える
0

属性をリクエストスコープに保持する代わりに、notePage1からPage2へのナビゲーション中にセッションスコープに保持することができます。Page2で、クエリ文字列(またはリクエストスコープ)ではなく、セッションからこの属性を取得します。したがって、Page3では、戻るボタンが押されても、コードは正常に機能するはずです。

于 2012-05-18T12:43:08.523 に答える