最近开始用Struts2框架,使用Struts2标签也成了家常便饭了,本章主要总结下在使用过程中数据的获取和输出。
可能会有所遗漏,也可能会有所谬误,希望大家多指点、多交流,在使用过程中能更加清晰、熟练。
本文中统一前缀为s。前缀可配置
想知道在前台哪些数据是能获取到的,使用<s:debug></s:debug>是一种非常不错的方式。我们在jsp中加上debug,那么在前台就会显示这个页面能够获取到的数据,我们可以看到数据主要分为两大类:Value Stack Contents和Stack Context
- Value Stack Contents:值栈,存放表单中的值。ValueStack里面的东西先入后出,很多没有id的元素使用完之后就退栈了。可以直接引用,例如:
User类:
package com.dpc.test; import java.util.Date; public class User { private Long id; private String name; private Date date; public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
action中
package com.dpc.test; public class UserAction { private User user; private String searchName; public String getSearchName() { return searchName; } public void setSearchName(String searchName) { this.searchName = searchName; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
在JSP中取得user对象中的内容和searchName如下:
<s:textfield name="user.name" id="name" /> <s:hidden name="user.id" id="id" /> <s:textfield name="searchName" id="searchName" /> 输出:<s:property value="%{user.name}" /> <s:property value="%{searchName}" />
日期格式化输出,必须是Date类型的才能使用如下方式:
<s:date name="user.date" format="yyyy-MM-dd" />
- StackContext:stack上下文,它包含一些列对象,包括request/session/attr/application map等,这些命名对象与根对象无关,访问这些对象需要使用#前缀指明。
request中的值:
<%request.getAttribute("name", "xxxx");%> 获取:%{#request.name} 输出:<s:property value="#request.name"/>
session中的值:
<%session.getAttribute("name");%> <s:property value="#session.name"/>
parameters中的值(传递的参数值):
<%request.getParameter("name");%> <s:property value="#parameters.name[0]"/>
参考文档:
WebWork 2.0 Tags
Struts2 Core 2.1.8.1