在做完的SSH网上商城项目中,在各个的action中都用到了ActionContext,例如往session中存值,往值栈中存值等,那么到底什么是ActionContext呢?
ActionContext(com.opensymphony.xwork.ActionContext)是Action执行时的上下文,上下文可以看作是一个容器(其实我们这里的容器就是一个Map而已),它存放放的是Action在执行时需要用到的对象,比如:在使用WebWork时,我们的上下文放有请求的参数(Parameter)、会话(Session)、Servlet上下文(ServletContext)、本地化(Locale)信息等。在每次执行Action之前都会创建新的ActionContext,ActionContext是线程安全的,也就是说在同一个线程里ActionContext里的属性是唯一的,这样我的Action就可以在多线程中使用。
例如获取session:
Map session = ActionContext.getContext().getSession();
这里是把session对象进行了重新包装,包装成了Map对象,很多都是这样包装的:
返回值都是Map类型,这样做的好处是,直接供我们的Action使用,而不用直接和底层的HttpSession打交道。也正是框架的包装,让我们的Actoion可以完全的和Web层解藕。
那么在jsp中如何取值呢?
先看action中如何赋值的:
ActionContext.getContext().getValueStack().set("pageBean", pageBean);这样是把pageBean放到了值栈中,jsp中:
<s:iterator var="order" value="pageBean.list">
<tr>
<th colspan="5">订单编号:<s:property value="#order.oid" /> 订单金额:<font
color="red"><s:property value="#order.total" />
</font>
这样就可以通过值栈拿到里面的值了。
还有个对象:ServletActionContext。
这个是继承了ActionContext类,通过ServletActionContext,可以直接访问JavaServlet相关对象,例如:
HttpServletRequest、HttpServletResponse、ServletContext、ServletConfig、PageContext等。
举个例子:取到HttpSession对象:
HttpSession session = ServletActionContext. getRequest().getSession();
暂时对这两个对象理解就这么深,以后还会有更加深刻的学习。