DWR如何获取Struts2中的Session

April_Java 2011-04-26 05:12:24
首先,具体结构是这样的,定一了一个BaseAction,里面定义了一个sessoin
public void setSession(Map<String, Object> arg0) {
// TODO Auto-generated method stub
this.session = ActionContext.getContext().getSession();
}

然后一个AdminAction extends BaseAction
现在要用DWR进行一部登陆,登录时向Session中set一些信息,应该如何做?

还有个问题就是页面刷新时,我进行的操作都是用js做的 页面又恢复到了最开始的状态,我想在页面load的时候应该加一个从session中读的操作。
又应该如何做。求指导!谢谢各位.

因为初学乍练还请各位讲的详细一点。不胜感激。
...全文
615 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
April_Java 2011-05-09
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 clarck_913 的回复:]
引用 17 楼 april_java 的回复:


DWR可以进行类型转换的,之前进行异步查询的时候已经转换过了
这次不知道怎么回事,就单纯的JS而讲,有把Object转换成引用类型的方法吗。


DWR进行类型转换的前提是,你的对象不够复杂,比如Map<String , List<Map<String, List<Map<String, List<Object>>>>>>

你……
[/Quote]
............我的没那么复杂! 晕了..- -#
clarck_913 2011-05-09
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 april_java 的回复:]


DWR可以进行类型转换的,之前进行异步查询的时候已经转换过了
这次不知道怎么回事,就单纯的JS而讲,有把Object转换成引用类型的方法吗。
[/Quote]

DWR进行类型转换的前提是,你的对象不够复杂,比如Map<String , List<Map<String, List<Map<String, List<Object>>>>>>

你怎么转?
April_Java 2011-05-06
  • 打赏
  • 举报
回复
以解决,结贴散分,分不多,谢谢各位啦!
UPC_思念 2011-05-06
  • 打赏
  • 举报
回复
检查dwr配置类型转换是否正确
April_Java 2011-05-06
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 clarck_913 的回复:]
容器里的Java对象和浏览器里的JS对象之间是不能直接传递的

就像Form里的信息,最终是字符串方式传到应用服务器上然后再进行转换的

建议你使用某特定格式的字符串进行前后台的数据传递

比如, JSON或者XML
[/Quote]

DWR可以进行类型转换的,之前进行异步查询的时候已经转换过了
这次不知道怎么回事,就单纯的JS而讲,有把Object转换成引用类型的方法吗。
clarck_913 2011-05-06
  • 打赏
  • 举报
回复
容器里的Java对象和浏览器里的JS对象之间是不能直接传递的

就像Form里的信息,最终是字符串方式传到应用服务器上然后再进行转换的

建议你使用某特定格式的字符串进行前后台的数据传递

比如, JSON或者XML

April_Java 2011-05-06
  • 打赏
  • 举报
回复
上面的代码有些不对, 而且我在dwr.xml文件里也配置了Administrator的Converter了。仍为undefined


DwrSession.getSession('online', function(data){
if(data==null){
alert('请登录');
}else{
var admin = {
admin_email:data.admin_email,
admin_name:data.admin_name
};
$('login').style.display='none';
$('info').style.display="block";
$('load').style.display="none";
$('menu').style.display="block";
$('info-email').innerHTML='用户:'+admin.admin_email+' 姓名:'+ admin.admin_name;
}
});
April_Java 2011-05-06
  • 打赏
  • 举报
回复

DwrSession.getSession('online', function(data){
if(data==null){
alert('请登录');
}else{
var email = data.admin_email;
var name= data.admin_name;
var admin = {
admin_email:email,
admin_name:name
};
admin=data;
$('login').style.display='none';
$('info').style.display="block";
$('load').style.display="none";
$('menu').style.display="block";
$('info-email').innerHTML='用户:'+admin.admin_email+' 姓名:'+ admin.admin_name;
}
});

我这里写的在info-email里面显示出来的都是undefined
April_Java 2011-05-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 clarck_913 的回复:]
引用 9 楼 april_java 的回复:

不行啊,我用的是Struts2的session啊 Struts2的session是ActionContext里面的那个,和这个不一致啊,我把action写在dwr。xml配置文件里,也是不行,alert的时候打出来的都是undefined


Struts2中的Session是一个Map 里面的元素是拷贝的HttpSession里的信息。
……
[/Quote]

谢谢各位了,我终于弄懂了...原来对Struts2 Session的原理不清楚,所以一直想得struts2的session。
直接获得HttpSession已经明白了,谢谢各位。

还有个小问题就是从session中得到的是Object类型,如何转换成JS的引用类型呢,我这里是Administrator。
clarck_913 2011-04-30
  • 打赏
  • 举报
回复
你不是想在页面加载的时候先用Ajax读取一下后台Session里是否有用户信息吗?

这么点事,为什么你非必须要Struts2封装的session呢?

DWR方法里这样写:

public 返回类型 方法名(HttpServletRequest req, 参数1, 参数2,.....){

HttpSession session = req.getSession();
用户对象类型 user = (用户对象类型)session.getAttribute("你的用户对象放在session里的key");

if(user == null){
return 还没登录的信息;
}else{
return 已经登录的信息和用户信息;
}

}



前端的JS里你这样调用


DWR类名.方法名(参数1,参数2,......, function(返回信息){
在这里处理你的返回信息。
});



April_Java 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 clarck_913 的回复:]
恩,6楼说的对

你的后台DWR方法,在声明的时候直接就把ServletAPI中的对象写在参数列表里

JS调用的时候,你只传入非ServletAPI的参数和回调函数

DWR会帮你做其他工作的
[/Quote]
不行啊,我用的是Struts2的session啊 Struts2的session是ActionContext里面的那个,和这个不一致啊,我把action写在dwr。xml配置文件里,也是不行,alert的时候打出来的都是undefined
clarck_913 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 april_java 的回复:]

不行啊,我用的是Struts2的session啊 Struts2的session是ActionContext里面的那个,和这个不一致啊,我把action写在dwr。xml配置文件里,也是不行,alert的时候打出来的都是undefined
[/Quote]

Struts2中的Session是一个Map 里面的元素是拷贝的HttpSession里的信息。

你对这个Map修改之后,里面的信息就又被保存到了HttpSession中

我不知道你为什么非要一个Struts2的Session

你的DWR类里写的方法这样写

public 返回类型 方法名(HttpServletRequest req, 参数1, 参数2,.....){

HttpSession session = req.getSession();
}

这样不行吗?我之前做的都可以啊


action写在dwr里?你是要干什么?不明白你的意思。

这样吧,你先说说,你为什么要获取session,你用它都干什么

这样我们再说,你是否一定要用Struts 2里的session

HttpSession不是某个框架提供的,框架只能是对它进行封装
romanitc 2011-04-30
  • 打赏
  • 举报
回复
直接用dwr调用你后台的方法就OK了,不用session是完全可以的。不要太复杂了。程序还是简单的好!
clarck_913 2011-04-27
  • 打赏
  • 举报
回复
恩,6楼说的对

你的后台DWR方法,在声明的时候直接就把ServletAPI中的对象写在参数列表里

JS调用的时候,你只传入非ServletAPI的参数和回调函数

DWR会帮你做其他工作的
UPC_思念 2011-04-26
  • 打赏
  • 举报
回复
更多信息请百度搜索"DWR操作servlet API"
UPC_思念 2011-04-26
  • 打赏
  • 举报
回复
既然都用了DWR了,后台处理类就没必要用ACTION来搞,普通的类即可,DWR可以在普通类中访问session对象。
比如前台用dwr调用java函数getA(id),只需这样写dwrBean.getA(id,function(data){//回调函数});
后台只需要声明一个HttpSession对象,DWR引擎会负责将此处的session变量初始化成WEB程序中的session ,然后在方法中直接使用即可:

public String getA(String id,HttpSession session){
//从session中获得user对象
User user=(User)session.getAtrribute("user");
return user.getName();
}
LY0223 2011-04-26
  • 打赏
  • 举报
回复
如果我们想得到原始的HttpSession可以首先得到HttpServletRequest对象,然后通过request.getSession()来取得原始的HttpSession对象
redlotus_lyn 2011-04-26
  • 打赏
  • 举报
回复
//取得webapp上下文对象
WebContext web= WebContextFactory.get();
//得到servlet中的request/response对象
HttpServletRequest request=web.getHttpServletRequest();
HttpServletResponse response=web.getHttpServletResponse();
//在此可提取request中相关请求参数...
/取得session对象
HttpSession session=request.getSession();
April_Java 2011-04-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 viszl 的回复:]
HttpSession session = org.directwebremoting.WebContextFactory.get().getSession();
[/Quote]
这样定义的session和Struts2 中的session是相同的吗?
April_Java 2011-04-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 viszl 的回复:]
HttpSession session = org.directwebremoting.WebContextFactory.get().getSession();
[/Quote]
尝试过了,取出的值总是undefined的,是什么原因呢。
加载更多回复(1)

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧