struts2里面有三种方法可以获取request,最好使用ServletRequestAware接口通过IOC机制注入Request对象。
- 在Action中获取request方法一:
在Action中的代码:
1
2
3
|
Map request = (Map)ActionContext.getContext().get(
"request"
);
List<Task> tasks = taskManager.findAll();
request.put(
"tasks"
, tasks);
|
在JSP页面中获取其中的值:
1
2
3
4
5
6
7
8
9
10
|
<
s:iterator
id
=
"task"
value
=
"#request.tasks"
>
<
tr
class
=
"table_header"
>
<
td
><
s:property
value
=
"#task.tname"
/></
td
>
<
td
><
s:property
value
=
"#task.tuid"
/></
td
>
<
td
><
s:property
value
=
"#task.tstartTime"
/></
td
>
<
td
><
s:property
value
=
"#task.tendTime"
/></
td
>
<
td
><
s:property
value
=
"#task.tstate"
/></
td
>
<
td
><
input
type
=
"radio"
id
=
"choose"
name
=
"choose"
onclick
=
"getId(this.value)"
value="<s:property
value
=
'#task.tid'
/>"/></
td
>
</
tr
>
</
s:iterator
>
|
--------------------------------------------------------------------------------------------
- 方法二:通过ServletActionContext类来获取,使用struts2经验如果处理get传参是中文,只能使用该方法进行处理乱码问题
Action中代码:
1
2
|
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute(
"username"
,
"zhangsan"
);
|
在jsp中获取其中的值
1
|
<
s:property
value
=
"#request.username"
>或者${requestScope.req}
|
--------------------------------------------------------------------------------------------
- 方法三:通过ServletRequestAware接口通过IOC机制注入Request对象
Action中的代码:
Action实现ServletRequestAware接口,实现接口中的方法
1
2
3
4
5
6
7
8
9
10
|
private
HttpServletRequest request;
//实现接口中的方法
public
void
setServletRequest(HttpServletRequest request){
this
.request = request;
}
//然后在execute()方法中就可以使用了
public
String execute(){
request.setAttribute(
"username"
,
"zhangsan"
);
request.getSession().getServletContext().getApplication();
//得到Application
}
|
该方法必须要实现,而且该方法是自动被调用
这个方法在被调用的过程中,会将创建好的request对象通过参数的方式传递给你,你可以用来赋给你本类中的变量,然后request就可以使用了
注意:setServletRequest()方法一定会再execute()方法被调用前执行
在jsp页面中获取其中的值
1
|
<
s:property
value
=
"#request.task.tname"
/>
|
在上面的代码中, 在Action实现了一个 ServletRequestAware接口,并且实现了 setServletRequest方法。
如果一个动作类实现了 ServletRequestAware接口, Struts2在调用 execute方法之前,就会先调用setServletRequest方法,并将Request参数传入这个方法。如果想获得 HttpServletResponse、HttpSession和 Cookie等对象,动作类可以分别实现 ServletResponseAware、 SessionAware和CookiesAware等接口。这些接口都在 org.apache.struts2.interceptor包中。
struts2超链接传值: <s:a href="info.action?id=%{#list.id}"> <s:property value="#list.title"/></s:a>