sun201200204 2008-11-07 15:07
浏览 291
已采纳

dwr创建和获取session的问题

由于各种原因,一直是用的dwr1.0的版本。
一开始,我想在java类中创建一个session传到jsp中:
[code="java"]
public boolean checkUser(String operatorId, String password,
String groupId,HttpSession session) throws Exception {
boolean bValid = true;
try {
........//DAO
} catch (Exception e) {
........
}
session = ExecutionContext.get().getSession();
session.setAttribute("user", "daveli");
return bValid;
}
[/code]
[code="java"]
js:
function handleCheck()
{
User.checkAuthority(opId,psd,sGroupId,callback);
}
jsp:
<%=(String)session.getAttribute("user")%> //[color=red]得到的是空(null),不论怎么刷新[/color]
[/code]
这样不行,于是我换了一种方法,在页面中创建一个session,然后在java类中改变session的值:
[code="java"]
public boolean checkUser(String operatorId, String password,
String groupId,HttpSession session) throws Exception {
boolean bValid = true;
try {
........//DAO
} catch (Exception e) {
........
}
session = ExecutionContext.get().getSession();
String username = (String)session.getAttribute("user");
System.out.println(UserName); //打印出来为空,说明session没有传过来。
session.removeAttribute("user");
session.setAttribute("user", "java sun");
return bValid;
}
[/code]
[code="java"]
js:
function handleCheck()
{
User.checkAuthority(opId,psd,sGroupId,callback);
}
jsp:
<% session.setAttribute("user", "hello");%>

<%=(String)session.getAttribute("user")%> //[color=red]得到的永远是“hello”,不论怎么刷新,说明java类中的设置没传过来[/color]

请问:如何用DWR创建和调用session?
[/code]
[b]问题补充:[/b]
谢谢jones ,你的回答。
既然jsp页面中饿代码已经先于客户端执行的javascript执行,所以第二种方法中的java类中的
System.out.println(UserName);不可能打印出来的空值。我点到其他的jsp页面的话,也应该得到我在java类中设置的session值吧。
[b]问题补充:[/b]
谢谢,我发现问题了。我打印出jsp和java类的session_id。加不加
session = ExecutionContext.get().getSession();

都是不同的。

该怎么把jsp页面的这个session发送到java类呢?如何把java类的session传给jsp中呢?

[b]问题补充:[/b]

dwr和session通讯的方式:
1. java类中把session作为参数,如:
public void makeChart(String chartType,HttpSession session)

2.页面中调用如下:
TestJFreeChartDwr.makeChart(type,show);
无需传递第一步中的session参数,dwr会自动填充到session里

我也是这样做的啊。可是还是传不到java类中?
是不是dwr1.0不支持session呢?
[b]问题补充:[/b]
晓得原因了。
我做验证的时候是用的弹出小页面,所以又创建了一个新的session,当登录页面关掉后,session也就自动关掉了。所以原页面的session还是为null。

该怎么处理这个问题?
[b]问题补充:[/b]
我是这么做的:
A页面:要登录的页面,页面加载的时候加载js:
js:
function init() {
//authority check
var boolIsSupervisor = window.showModalDialog( "check_user.jsp", "", "dialogHeight:10; dialogWidth:22; status:no" );
if ( String( boolIsSupervisor ) == "undefined" || boolIsSupervisor == false ) {
alert ( "Supervisor authentication failed." );
window.location.href = "/mrs/mrsRightPage.do";
}
}
check_user.jsp是登录页面,要求输入用户名,密码,点提交调用js:
function handleCheck()
{

User.check(name,password,getAuth);
}
function getAuth(pass) {
window.returnValue=true;
window.close();
}
java类中:
public boolean checkUser(String name, String password,

HttpSession session){

boolean bValid = true;

//业务处理
session.setAttribute("user", "java sun");

return bValid;

}

我发现check_user.jsp中的session和也登录的页面不是一个session。这么才能让他们共用一个session???
谢谢

  • 写回答

11条回答 默认 最新

  • iteye_521 2008-11-07 15:58
    关注

    [code="java"]# <% session.setAttribute("user", "hello");%>

    <%=(String)session.getAttribute("user")%> [/code]
    你第二中方法中页面上这两句是连着在服务端执行的,当然会永远都是hello了。
    顺便提醒一下,你的
    [code="java"] public boolean checkUser(String operatorId, String password,

    String groupId,HttpSession session) throws Exception {[/code]
    方法既然传递进来了session.为什么还要
    [code="java"]session = ExecutionContext.get().getSession();[/code]
    去重新获取一个session呢,这两个session可以通过打印sessionId看一下是不是同一个session

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(10条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料