Struts2.0 (开发之二)--跟踪用户状态--CTO
2008-05-25 00:28
363 查看
转载时请注明出处 : 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 共同讨论
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 共同讨论
相关文章推荐
- Struts2.0 (开发之二)--跟踪用户状态--CTO
- Struts2.0 (开发之一)--简介与简单登录的实现--CTO
- Struts2.0 (开发之四)--(i18n)国际化--CTO
- Struts2.0 (开发之三)--数据校验框架--CTO
- Struts用户和开发指南(前言之二)
- Asp.net 2.0 自定义控件开发专题讲解[为用户控件增加DataSource属性, 能够自动识别不同数据源](示例代码下载)
- 微信公众平台开发(91) 右上角按钮/底部导航栏/用户网络状态
- Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)
- 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (2)
- Struts 2创始人Patrick Lightbody看《精通Struts 2:Web 2.0开发实战 》
- 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3)
- Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)
- 基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发 (3)
- Moblin Linux开发手册(四)_UI状态和用户数据自动保存
- NetBeans6.1下搭建Struts2.0+Spring2.5+Hibernate3开发环境
- SSH(struts+spring+hibernate)迅速开发--第六章 用户登陆和注册(3)
- Asp.net 2.0 自定义控件开发专题[详细探讨页面状态(视图状态和控件状态)机制及其使用场景](示例代码下载)
- Asp.net 2.0 自定义控件开发专题讲解[为用户控件增加DataSource属性, 能够自动识别不同数据源](示例代码下载)
- 实现action接口来更好的实现Action ,跟踪用户状态
- IOS开发之记录用户登陆状态