转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html
我们知道,除了可以从值栈中获取信息,还可以从Stack Context中获取信息,只是要加上#,下面我们通过scope对象来演示。首先是在LoginAction中增加如下字段:
Map myRequest; Map mySession; 随后再用前面提到的“在Action中获取Scope对象”的方式二来完成这些对象的初始化。即实现RequestAware和SessionAware接口。然后再在execute方法中增加如下内容:myRequest.put("req", "Req属性");mySession.put("ses", "Ses属性");
最后在loginSuc.jsp中增加如下代码:获取Request属性:<s:property value="#request.req"/><br>获取Session属性:<s:property value="#session.ses"/><br>
获取parameters属性:<s:property value="#parameters.mes"/>
说明:我们获取这些对象都用了#,因为这些对象都是存在一般的Context Map中,而不是存在值栈中。别最后一个信息的获取是因为我们在login.jsp中增加了如下代码:<input type="hidden" name="mes" value="the message is transfer by hidden">关于这些scope的更多信息可以参看下表:
名称 | 作用 | 例子 |
parameters | 包含当前HTTP请求参数的Map | #parameters.id[0]作用相当于request.getParameter("id") |
request | 包含当前HttpServletRequest的属性(attribute)的Map | #request.userName相当于request.getAttribute("userName") |
session | 包含当前HttpSession的属性(attribute)的Map | #session.userName相当于session.getAttribute("userName") |
application | 包含当前应用的ServletContext的属性(attribute)的Map | #application.userName相当于application.getAttribute("userName") |
Attr | 用于按request > session > application顺序访问其属性 | #application.userName相当于application.getAttribute("userName") |