首先,具体结构是这样的,定一了一个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中读的操作。
又应该如何做。求指导!谢谢各位.因为初学乍练还请各位讲的详细一点。不胜感激。

解决方案 »

  1.   

    HttpSession session = org.directwebremoting.WebContextFactory.get().getSession();
      

  2.   

    尝试过了,取出的值总是undefined的,是什么原因呢。
      

  3.   

    这样定义的session和Struts2 中的session是相同的吗?
      

  4.   

    //取得webapp上下文对象    
    WebContext web= WebContextFactory.get();    
    //得到servlet中的request/response对象    
    HttpServletRequest request=web.getHttpServletRequest();    
    HttpServletResponse response=web.getHttpServletResponse();    
    //在此可提取request中相关请求参数...    
    /取得session对象    
    HttpSession session=request.getSession();    
      

  5.   

    如果我们想得到原始的HttpSession可以首先得到HttpServletRequest对象,然后通过request.getSession()来取得原始的HttpSession对象
      

  6.   

    既然都用了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();
    }
      

  7.   

    更多信息请百度搜索"DWR操作servlet API"
      

  8.   

    恩,6楼说的对你的后台DWR方法,在声明的时候直接就把ServletAPI中的对象写在参数列表里JS调用的时候,你只传入非ServletAPI的参数和回调函数DWR会帮你做其他工作的
      

  9.   

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

  10.   


    Struts2中的Session是一个Map 里面的元素是拷贝的HttpSession里的信息。你对这个Map修改之后,里面的信息就又被保存到了HttpSession中我不知道你为什么非要一个Struts2的Session你的DWR类里写的方法这样写public 返回类型 方法名(HttpServletRequest req, 参数1, 参数2,.....){       HttpSession session = req.getSession();
    }这样不行吗?我之前做的都可以啊
    action写在dwr里?你是要干什么?不明白你的意思。这样吧,你先说说,你为什么要获取session,你用它都干什么这样我们再说,你是否一定要用Struts 2里的sessionHttpSession不是某个框架提供的,框架只能是对它进行封装
      

  11.   

    你不是想在页面加载的时候先用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(返回信息){
                  在这里处理你的返回信息。
          });
      

  12.   

    直接用dwr调用你后台的方法就OK了,不用session是完全可以的。不要太复杂了。程序还是简单的好!
      

  13.   


    谢谢各位了,我终于弄懂了...原来对Struts2 Session的原理不清楚,所以一直想得struts2的session。
    直接获得HttpSession已经明白了,谢谢各位。还有个小问题就是从session中得到的是Object类型,如何转换成JS的引用类型呢,我这里是Administrator。
      

  14.   


    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
      

  15.   

    上面的代码有些不对,  而且我在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;
    }
    });
      

  16.   

    容器里的Java对象和浏览器里的JS对象之间是不能直接传递的就像Form里的信息,最终是字符串方式传到应用服务器上然后再进行转换的建议你使用某特定格式的字符串进行前后台的数据传递比如, JSON或者XML
      

  17.   


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

  18.   

    检查dwr配置类型转换是否正确
      

  19.   


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