我以登录注册为例,有login.jsp  register.jsp  ok.jsp  index.jsp
四个页面,我想不管是登录(login.jsp)或者是注册(register.jsp),如果成功的话,都经过ok.jsp(因为显示一些登录成功或者注册成功的话哈,然后让它自己倒数延时自动跳转跳转到index.jsp页面),因为登录或者注册之后,都可以编写方法使它返回一个类对象(就以user对象为例),然后在index.jsp中获得这个对象。所以问题来了,怎么才传递这个对象呢?
我自己用ActionContent生成的对象方法来试过可是不行。请看下面我做的代码:
Action层:ActionContext ctxt = ActionContext.getContext();
ctxt.put("user", user);struts.xml        <action name = "login" class = "user.action.UserAction" method = "login">
            <result name = "success">../ok.jsp</result>
            <result name = "fail">login.jsp</result>
        </action>ok.jsp<%
...
response.setHeader("refresh", "5; url = "+ctxt.get("hyperLink")); 
...
%>
我个人觉得可能是ActionContent的put方法的作用域太小或者是struct.xml里的规定了ok.jsp,所以当在index.jsp中使用ActionContext ctxt = ActionContext.getContext();
User user = null;
user = (User)ctxt.get("user");也得不到user对象。
我也层找到网上的一些方法可以解决,但是我个人认为太难看了也太不专业了,这个方法是在ok.jsp页面中写<%
ActionContext ctxt = ActionContext.getContext();
User user = null;
user = (User)ctxt.get("user"); //传递user对象到index.jsp
request.setAttribute("user", user);
request.getRequestDispatcher("index.jsp").forward(request, response);
%>然后在index.jsp页面中写:<%
User user = null;
user = (User)request.getAttribute("user");
%>
如果用这个方法的话,我试过,也行,就是太丑了,请问各位高人有没有什么好的方法没哈

解决方案 »

  1.   

    建议吧对象存储到session中
    而不是ActionContext中,这个对象太大了。存到是request级别,不适合直接存对象。
    存到session这个对象直接在页面获取seesion,吧session当成map获取就可以了。
    另外ok这个页面你打算怎么处理?然后在设定一个链接跳到对应页面?
    那样就不如直接设一个alert提示登陆成功然后跳到对应的页面了。
    当然你可以跳到ok页面后设一个JS若干秒后自动跳新页面。
      

  2.   


    大神,给点seesion的例子呗!不会用啊,然后那个ok.jsp我是用
    response.setHeader("refresh", "5; url = "+ctxt.get("hyperLink")); 
    这句话来进行5秒跳转的。
    对了,是不是把东西存进seesion里,只要不关闭浏览器,里面的数据都一直存在呢?然后不管在哪个JSP页面和JAVA类中都可以使用呢?
      

  3.   

    如果你要放到Session里面的话,把这句:
    ActionContext ctxt = ActionContext.getContext();
    ctxt.put("user", user);
    换成:
    Map session = (Map)ActionContext.getContext().getSession();
    session.put("user",user);
    跳转到首页后用struts2标签读取就可以了
    <s:property value="#session.user.属性"/>
    存入session的数据,有时间限制的,过了时间session就失效了
      

  4.   


    大神,给点seesion的例子呗!不会用啊,然后那个ok.jsp我是用
    response.setHeader("refresh", "5; url = "+ctxt.get("hyperLink")); 
    这句话来进行5秒跳转的。
    对了,是不是把东西存进seesion里,只要不关闭浏览器,里面的数据都一直存在呢?然后不管在哪个JSP页面和JAVA类中都可以使用呢?
    例子上面的那个就发了。。
    session有自己的声明周期的,一个seesion对应一个浏览器。
    在web.xml中可以设置session的生命周期,不设置的话默认20分钟。
    另外你可以把seesion想成一个对象Map,在action中和jsp甚至html中都可以用的。