如何使用特定的sessionScope变量并删除其他sessionScope变量?

时间:2016-12-19 08:35:54

标签: xpages

该应用程序允许用户搜索,结果显示在另一页

例如search.xsp是供用户填写搜索信息,searchresult.xsp是用于显示搜索结果。

在search.xsp和searchresult.xsp中,我使用sessionScope变量来执行搜索功能。

搜索功能是这样的:

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;

在searchresult.xsp中,我添加了一个返回search.xsp的后退按钮。 我读了用户要求,当用户点击后退按钮时,它会将用户重定向到search.xsp,但是应该清除之前的选择。

要清除sessionScope变量,我在本网站上找到了此代码 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() ); 
          }
}

我在afterPageLoad事件中的search.xsp中应用了代码,因此当我单击后退按钮时,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
{   
}

由于我使用sessionScope变量来显示用户角色,因此如果用户转到search.xsp并执行搜索功能,则当用户点击searchresult.xsp中的后退按钮时。清除sessionScope函数也将删除sessionScope.role的值。

我在互联网上搜索了明确的特定sessionScope变量,但似乎没有太多关于此问题的信息

由于clear 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变量吗?

还是针对此案例的更好方法?

请感谢您的建议。谢谢

2 个答案:

答案 0 :(得分:2)

请记住您链接的代码正在执行的操作。第一行是完全将用户从HTTP中注销。剩下的就是sessionScope,对于每个键,从sessionScope变量图中删除该变量。

我添加了代码片段来替换一个简单的注销按钮,因为如果用户只是注销了HTTP,然后以不同的用户身份登录,他们(默认情况下)会保留相同的sessionScope个变量,因为{{ 1}}是浏览器会话,而不是用户会话。

听起来你不想要那个片段。相反,您只想清除特定的sessionScope变量。 sessionScope会这样做,其中sessionScope.remove("myKey")是sessionScope变量键。

答案 1 :(得分:1)

只需将搜索的sessionScope变量设置为空字符串

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

这会使其他sessionScope变量保持活动状态,并清除搜索表单。