用户登录后,把用户信息类put进session。本来用:
actionContext.getSession().put(“user_info”, user);然后页面用struts2的标签取这样子是没问题的。
现在把user_info换成常量,也就是:
actionContext.getSession().put(接口.USER_INFO, user);
1,页面除了用java代码<%=%>去取外,还有没有别的方式,struts2如何去根据这个常量去获取这个put进去的值呢?
2,我现在是用
<% User user = (User) request.getSession().getAttribute(接口.USER_INFO); %>
这样去取,然后用el表达式可以取到这个author,如:${user} ,那么问题是,这个el表达式是取得struts2值栈里我在action中put进去的值呢,还是取得我上面用java代码获取的值?
3,我通过action1,处理用户并put进actionContext,然的转发到action2,再跳准到jsp页面。
其中,转发不使用chain的话,action2中会丢失action1的处理结果,也就是丢失这个用户为信息。但跳转到jsp页面后,通过我上面第2点中提到的java代码,确是可以System.out.println(user),打印出这个user.getName();这又是怎么回事呢?
------解决思路----------------------
1,页面除了用java代码<%=%>去取外,还有没有别的方式,struts2如何去根据这个常量去获取这个put进去的值呢?
可以直接通过<%=%>方式去输出,也可以通过el表达式的方式,也可以使用struts2的自带标签库去输出
2,我现在是用
<% User user = (User) request.getSession().getAttribute(接口.USER_INFO); %>
这样去取,然后用el表达式可以取到这个author,如:${user} ,那么问题是,这个el表达式是取得struts2值栈里我在action中put进去的值呢,还是取得我上面用java代码获取的值?
这个问题,你可以自己试一下。el表达式遇到和jsp动作标签同名的变量时,值是否覆盖,这个没操作过。
3,我通过action1,处理用户并put进actionContext,然的转发到action2,再跳准到jsp页面。
其中,转发不使用chain的话,action2中会丢失action1的处理结果,也就是丢失这个用户为信息。但跳转到jsp页面后,通过我上面第2点中提到的java代码,确是可以System.out.println(user),打印出这个user.getName();这又是怎么回事呢?
chain 在struts2 中主要是在action之间传递属性属性的。
页面的话,跳转是通过request去传递的参数,在页面间通过普通跳转,是同一个request,所以参数都在。
如果使用sendRedirect 重定向后,System.out.println(user), 这个就打印不到了