Struts2.0 (开发之二)--跟踪用户状态--CTO

 转载时请注明出处 : http://blog.csdn.net/ctojxzsycztao 作者 : ctojxzsycztao                                                                                      当一个用户登录成功后,需要将用户名保存到 session 作用域,为了访问 HttpSession 实例,struts2 提供了一个 ActionContext 类,该类提供了一个 getSession方法返回值类型是Map,并不是HttpSession,虽然ActionContext 的 getSession 返回的不是HttpSession 对象,但 struts2的系统拦截器会负责该session和HttpSession之间的转换, 如果要将一个属性,比如用户名放入到session作用域,那么可以通过如下方式:

ActionContext.getContext().getSession().put("username",this.getUserName());将用户名存入到session 当中
指定到的页面中显示将用EJ表达式 ${sessionScope.userName} 来显示.
2、我们都知道 Action 只是控制转发用户的请求,JSP 页面并不能获得 Action  的处理结果,如果是List 如何实现呢,我们先来定义 有返回的Action 方法如下:

public   class  UserAction extends ActioSupport  {
           List list 
= new ArrayList();
           
public void setList(List list) {
                 
this.list = list;
           }

           
public List getList() {
                
return list;
          }


          
public String execute() throws Exception {
                 
//获取 session 中的 username
                 String username = (String)ActionContext.getContext().getSession().get("userName");
                 
if(username != null && username.equals("scott")){
                              list 
= Dao.getAll();
                              
return "success";
                 }
else {
                              
return "error";
                 }

        }

}
通过上面可以发现,Action 中的属性不仅封装用户的请求参数,也可能封装 Action 需要传入下一个页面的显示参数.实际上这些值都封装在 ValueStack 对象中.
当Action 设置了 list 值后 struts2 会把这些属性值全部封装在一个叫做 struts.valueStack的请求属性当中, struts.valueStack 封装了全部的输出数据.那么 jsp 页面该如何输出呢!请看如下:
jsp 页面
< %@page  import ="java.util.*,com.opensymphony.xwork2.util.*" % >
< html >
< head >< title > 用户信息 </ title ></ head >
  
< body >
        
< %
             //从valueStack 
当中获取封装的输出数据
             ValueStack vs 
= (ValueStack)  request.getAttribute("struts.valueStack");
            //调用ValueStack 的 findValue 方法获取 Action 中的 list 属性值
            List<Users
>  list = (List < Users > )va.findValue("list");
            for (Users users : list) {
                  out.println(users.getUserName());
           }
     %>
</ body >
</ html >


不能否认,上面JSP页面的代码是非常丑陋的,而且难以维护,回为有太多的java 代码.
那么我们可以改成另一种方式,用 struts2 的标签库
在JSP页面导入struts2 标签库
<%@taglib uri="/struts-tags" prefix="s"%>
<!--迭代输出 ValueStack 中的 list 对象,其中 status 是迭代的序号-->
<s:iterator value="list" status="index">
    <s:if test="#index.odd==true"></s:if>
    <s:else></s:else>
    <s:property name="username"/>
</s:iterator>                                                                                                                                                                                 使用struts2 的iterator 标签迭代输出ValueStack 中的 list 集合,并为每个数组元素定义一个序号:index ,通过这个判断是否奇偶数

除了以上之外我们还可以通过另一种方式来得到 request  与 session 作用域的信息,代码如下

HttpServletRequest request  =  ServletActionRequest.getRequest();
HttpServletResponse response 
=  ServletActionResponse.getResponse();
// 在 Action 取值 或将 数据放到到 request 或 session 作用域
String userName  =  request.getParameter( " userName " );
// 在 jsp页面显示时 struts2 标签
< s:property value = " #request.userName " />

上面讲的不是很详细,有问题的可以 QQ : 543997732 共同讨论

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值