该应用程序允许用户搜索,结果显示在另一页
中例如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变量吗?
还是针对此案例的更好方法?
请感谢您的建议。谢谢
答案 0 :(得分:2)
请记住您链接的代码正在执行的操作。第一行是完全将用户从HTTP中注销。剩下的就是sessionScope
,对于每个键,从sessionScope
变量图中删除该变量。
我添加了代码片段来替换一个简单的注销按钮,因为如果用户只是注销了HTTP,然后以不同的用户身份登录,他们(默认情况下)会保留相同的sessionScope
个变量,因为{{ 1}}是浏览器会话,而不是用户会话。
听起来你不想要那个片段。相反,您只想清除特定的sessionScope
变量。 sessionScope
会这样做,其中sessionScope.remove("myKey")
是sessionScope变量键。
答案 1 :(得分:1)
只需将搜索的sessionScope变量设置为空字符串
即可sessionScope.ItemSearch = "";
sessionScope.CategorySearch = "";
sessionScope.LocationSearch = "";
这会使其他sessionScope变量保持活动状态,并清除搜索表单。