2016-12-19 5 views
1

アプリケーションでは検索が可能で、結果は他のページに表示されます特定のsessionScope変数を使用したままにし、他のsessionScope変数を削除する方法はありますか?

たとえば、search.xspはユーザーが検索する情報を入力するためのもので、searchresult.xspは検索結果の表示用です。

search.xspとsearchresult.xspでは、sessionScope変数を使用して検索機能を実行します。

検索機能は、次のようなものです:searchresult.xspで

var qstring= ""; 
if ((sessionScope.ItemSearch != null && sessionScope.ItemSearch != "")||(sessionScope.CategorySearch != null && sessionScope.CategorySearch != "")|| (sessionScope.LocationSearch != null && sessionScope.LocationSearch !="")) 
{ 
    qstring = " FIELD Item contains " + sessionScope.ItemSearch + 
    " | FIELD Category contains " + sessionScope.CategorySearch + 
    " | FIELD Location contains " + sessionScope.LocationSearch 
} 
return qstring; 

、私はsearch.xspに戻ります戻るボタンを追加します。 ユーザーの要件を読みました。ユーザーが戻るボタンをクリックすると、ユーザーはsearch.xspにリダイレクトされますが、以前の選択はクリアされます。

sessionScopeと変数をクリアするには、私はafterPageLoadイベントでsearch.xspにコードを適用 https://openntf.org/XSnippets.nsf/snippet.xsp?id=clear-session-current-nsf

clearMap(sessionScope); 
//facesContext.getExternalContext().redirect("./?logout"); 

// Clear Map function 
function clearMap(map:Map){ // Get iterator for the keys 
    var iterator = map.keySet().iterator(); // Remove all items 
    while(iterator.hasNext()){ 
     map.remove(iterator.next()); 
      } 
} 

このウェブサイトから、このコードを見つけた私は、[戻る]ボタンをクリックしたときので、search.xspはなります以前の検索選択を削除します。

ここは私の質問です。

すべてのページの上部には、ユーザーのログインロールを示す計算フィールドがあります。この理由は、ユーザーの役割を示す必要があるのは、ユーザーがアプリケーション内で複数の役割を果たすことで、ユーザーがログインする役割をユーザーが選択できるように別のページを作成したためです。私は、ユーザーの役割を示すために、sessionScopeと変数を使用しているため、ユーザはsearch.xspに行く場合は、検索機能を実行すると、ユーザーここ

は、その計算されたフィールドのコード

var selectrole =sessionScope.role; 
if(selectrole == "Common User") 
{ 
    return "You logged in as Common User role"; 
} 
else if(selectrole == "Senior User") 
{ 
    return "You logged in as Senior User role"; 
} 
else if(selectrole == "Manager") 
{ 
    return "You logged in as Manager role"; 
} 
else if(selectrole == "Administrator") 
{ 
    return "You logged in as Administrator role"; 
} 
else 
{ 
} 

ですsearchresult.xspの「戻る」ボタンをクリックします。 clear sessionScope関数は、sessionScope.roleの値も削除します。

私は明確な特定のsessionScopeと変数について、インターネット上で検索が、明確なsessionScopeと変数が正常に動作しますので、それはこの問題

に多くの情報をいないようだ、私は特定のsessionScopeと変数を削除しようとしました。冒頭

clearMap(sessionScope.ItemSearch); 
//facesContext.getExternalContext().redirect("./?logout"); 

// Clear Map function 
function clearMap(map:Map){ // Get iterator for the keys 
    var iterator = map.keySet().iterator(); // Remove all items 
    while(iterator.hasNext()){ 
     map.remove(iterator.next()); 
      } 
} 

、私は特定のsessionScopeと変数を削除することは困難であると思うし、その結果、私はエラーを取得することを私のためには驚くに当たりません。

特定のsessionScope変数を使用したままにし、他のsessionScope変数をクリアする方法はありますか?

この場合の方が良いでしょうか?

お気軽にご相談ください。

+0

Paul Stephen WithersとKnut Herrmannの答えに感謝したいと思います。私は1つの答えしか受け入れることができませんが、私のアプリケーションに合っているので、私は両方の回答者をupvoteします。 – beginner

+0

sessionScopeについて、私は、派生したアプリケーションで多くのsessionScope変数を使用する必要があり、セッションのタイムアウトまでそれらの値を保持する必要があり、そのうちのいくつかをクリアする必要があるという強い思いがありますすぐに。それでは、xpage開発でうまくいくのですか?私はサーバーがコードを実行するためにもっと多くのリソースを取るのだろうか?私はサーバー管理者ではないので、アプリケーションで多くのsessionScope変数を使用すると、サーバーがクラッシュする心配があります。 – beginner

答えて

2

あなたがリンクしているコードが何をしているのか心に留めてください。最初の行は、HTTPからユーザーを完全にログアウトしています。残りの部分はsessionScopeを通り、すべてのキーについて、変数のsessionScopeマップからその変数を削除します。

ユーザーがちょうどHTTPの外にログオンした場合、その後、別のユーザーとしてログインするので、私は、簡単なログアウトボタンを置き換えるためにそのスニペットを追加sessionScopeブラウザあるので、彼ら(デフォルトでは)、同じsessionScope変数を保持セッションではなく、ユーザーセッション。

あなたはそのスニペットが欲しくないようです。代わりに、特定のsessionScope変数を消去したいだけです。 sessionScope.remove("myKey")はこれを行います。myKeyはsessionScopeの可変キーです。

+0

ご報告いただきありがとうございます。アプリケーションのログアウトボタンのコードも使用します。この記事から解決策を受け取る前に、私はこのコード 'facesContext.getExternalContext()。redirect(" ./?logout ");でsession.Spec変数を削除することができますので、アプリケーションに適用します。私はそれが良い習慣ではないことを知っていますが、私はその瞬間に特定のsessionScope変数を取り除く方法を知らない。 ここで、_sessionScopeはユーザーセッションではなくブラウザセッションであることに注意してください。あなたの答えをありがとう。 – beginner

+0

ご質問くださいお願いしますか? 'sessionScope.remove(" myKey ")'を試してみました。私は 'sessionScope.remove(" myKey ")'と 'sessionScope.myKey =" ";'の違いは何ですか?これらのコードはどちらもsessionScopeをクリアできます。 – beginner

+0

'.remove()'は変数を完全に削除します。 'myKey =" "'は変数があることを意味しますが、その値は空文字列です。 XPages OpenNTFのデバッグツールバーは、スコープされた変数やその他のデバッグ機能を検査するための素晴らしいリソースです。 –

1

単純に設定された検索のsessionScopeと変数は、これは生きている他のsessionScopeと変数を保持し、検索フォームがクリアされる

sessionScope.ItemSearch = ""; 
sessionScope.CategorySearch = ""; 
sessionScope.LocationSearch = ""; 

空の文字列に感謝します。

+0

ありがとうございます。どうか質問してもらえますか?私はあなたのコードを試して、それは動作します。私は 'sessionScope.remove(" myKey ")'と 'sessionScope.myKey =" ";'の違いは何ですか?これらのコードはどちらもsessionScopeをクリアできます。 – beginner

+0

.remove()は、sessionScopeマップから変数を削除します。 search.xspを開くと、再び作成されます。 '=" "'変数を空にします。それはsessionScopeマップにとどまり、値として空の文字列を持ちます。 search.xspを開いたときに再度作成する必要はありません。 .remove()よりも1ミリ秒早いかもしれません。 –

関連する問題