最近的任务涉及到了Struts2标签取值,之前的知识有点模棱两可了,只记得如果在Action里面定义了属性,并给该属性添加了get和set方法就可以在jsp页面通过写和属性名一致的方法来获取到这些值。
还有一种方式,可以在Action里封装bean,bean里面封装好了一些属性和属性的get、set方法,就可以在jsp里面通过使用Struts标签的name来获取。
就记得这些了,有些细节没有想起来,网上发现两篇博文,总结于此:
Struts2标签取值方式
原文地址:http://zhaohe162.blog.163.com/blog/static/38216797201142611031437/
1.标签取值方式一
通过<s:property value="" />取值
当Action的valueStack中有该属性的值时,只需直接使用该属性的名字即可;
当Action的valueStack中没有该属性的值时,比如在session,application范围中的属性值时,需要加#或者#attr.;
例子:
假设某Action中有person成员变量,在application中存在company属性
那么我们可以通过以下方法取值:
<s:property value="person.name" />
<s:property value="#person.name" />
<s:property value="company.name" /> //无法取到,因为company不在action的valueStack中
<s:property value="#company.name" />
2.标签取值方式二
在任意的<s:/>标签内使用%{}来取值
当Action的valueStack中有该属性的值时,只需直接使用该属性的名字即可;
当Action的valueStack中没有该属性的值时,比如在session,application范围中的属性值时,需要加#或者#attr.;
例子:
假设某Action中有person成员变量,在application中存在company属性
<s:textfield name="person.name" value="person.name" /> //错误,value会直接显示person.name字样
<s:textfield name="person.name" value="%{person.name}" />
<s:textfield name="person.company.name" value="%{#company.name}" />
<s:textfield name="person.company.name" value="%{#attr.company.name}" />
3.获取JSP页面的request,session,application中的属性
在页面中可以这样获取:
<td>${applicateionScope.counter}</td>
<td>${sessionScope.counter}</td>
<td>${requestScope.counter}</td>
或者直接这样用:${属性} ${userBean.username}。userBean可以是request或session中的对象。
struts2中的Action代码中的内容为:
ActionContext ctx = ActionContext.getContext();
ctx.getApplication.put("counter",new Integer(5));
ctx.getSession.put("counter",new Integer(5));
ctx.put("counter",new Integer(5));
ctx.put就是直接设置request的值。
也可以使用以下方式获得request:
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
struts2还提供了以下接口:
ServletContextAware:Action实现该接口,可以直接访问ServletContext。
ServletRequestAware:Action实现该接口,可以直接访问HttpServletRequest。
ServletResponseAware:Action实现该接口,可以直接访问HttpServletResponse。
1、 首先在ACTION中得到request对象,代码如下:
//获得Request对象
Map<String,Object> request = (Map<String,Object>) ActionContext.getContext().get("request");
2、 构造一个User对象代码如下:
publicclass User
{
private String username;
private String userpswd;
public User(String username, String userpswd)
{
this.username = username;
this.userpswd = userpswd;
}
public String getUsername()
{
returnusername;
}
publicvoid setUsername(String username)
{
this.username = username;
}
public String getUserpswd()
{
returnuserpswd;
}
publicvoid setUserpswd(String userpswd)
{
this.userpswd = userpswd;
}
}
3、 为request对象设置值,代码如下:
//设置单个值
reuqset.put(“userSize”,2);
//构造Map数组
Map<String,Object> maxUserList = new HashMap[2]();
for(int i = 0; i < 2; i ++)
{
maxUserList[i] = new HashMap<String, Object>();
//上级用户
maxUserList[i].put(“rootUser”, new User(“admin” + i, “1”));
//下级
List<User> minUser = new ArrayList<User>();
minUser.add(new User(“user” + i, “1”));
maxUserList[i].put(“minUser”,minUser);
}
//设置Map数组
request.put(“maxUserList”, maxUserList);
4、 在页面上用s标签取得步骤3所设置的值
<!--request中的单个值-à
<s:propertyvalue=”#request.userSize” />
<!--request中的Map数组(这里用表格显示)-à
<table>
<tr><td>序号</td><td>姓名</td><td>密码</td><td>下级</td></tr>
<s:iterator value=”#request[maxUserList]” status=”st”>
<tr>
<td><s:propertyvalue=”#st.index” /></td>
<td><s:propertyvalue=”rootUser.username” /></td>
<td><s:propertyvalue=”rootUser.userpswd” /></td>
<td>
<table bgcolor=’pink’>
<s:iterator value=”minUser” />
<tr>
<td><s:propertyvalue=”username” /></td>
<td><s:propertyvalue=”userpswd” /></td>
</tr>
</s:iterator>
</table>
</td>
</tr>
</s:iterator>
</table>