Struts2数据标签Property,Set和Push的用法
2012-08-29 13:43
429 查看
之前使用Struts2只知道setter和getter就可以了,并没有明白其中数据之间传递的道理。今日学习才明白了其中的奥妙。这里说的数据标签指的是property、set、push这3种标签的用法。在说这几个标签让我们先了解一下 ActionContext和值栈(ValueStack)。
●ActionContext是一个全局性存贮区域,拥有与所有请求过程相关联的数据;
●ActionContext是一个本地线程,使Struts2的action是线程安全的;
●值栈是ActionContext的一部分,而Struts2的action都驻留在值栈中进行。
下面来详细说说这3个标签的用法
一.Property标签
Property标签一般被用来接收来自ActionContext的值栈或者其他一些对象的数据,比如说application或者session。下面来看看具体用法。
建一个Action类DataAction.java,代码如下:
这个Action类包含了使用Property,set,push的3种方法。
接着请看一个model类User.java,代码如下:
下面让我们看看在jsp页面中怎么用property标签接收action类中的属性,请看我的useProperty.jsp,代码如下所示:
可以看出title这个属性可以直接访问。而name和age是user的那个属性,如果想要访问的话就要使用OGNL的二级表达式去访问这样额属性,得到如下结果:
下面我们用set标签去访问action中的属性
二.Set的用法
Set标签用来指定一个属性值到另一个名称,这样有助于更快更简单的方法访问属性。请看我的useSet.jsp页面,代码如下:
通过用set标签,将user的username和age属性都存贮在ActionContext中了。我们用“#objectName”的形式就可以取到这个属性值了,得到如下所示结果:
当然我们也可以将user的username和age存贮在session中,例如:
<s:set name="username"value="user.username" scope=”session”></s:set>
如果我们想要取session中的值,可以这样取:
name:<s:property value="#session[‘username’]"/><br>
这个你可以自己试试,下面来说说Push标签的用法
三.Push标签
与前两个标签不同的是,Push标签是将值存在值栈中,在设置push标签时应将标签放在使用属性之前,形成“包围”之势,你一定很困惑,请看我的usePush.jsp页面,代码如下所示:
页面如下所示:
得到的是一样的结果。
可以看出property,set,push标签得到的都是一样的结果,只是表达不同而已。其中一定要理解ActionContext和值栈之间的关系
本文转自http://blog.csdn.net/youqishini/article/details/7061909
●ActionContext是一个全局性存贮区域,拥有与所有请求过程相关联的数据;
●ActionContext是一个本地线程,使Struts2的action是线程安全的;
●值栈是ActionContext的一部分,而Struts2的action都驻留在值栈中进行。
下面来详细说说这3个标签的用法
一.Property标签
Property标签一般被用来接收来自ActionContext的值栈或者其他一些对象的数据,比如说application或者session。下面来看看具体用法。
建一个Action类DataAction.java,代码如下:
public class DataAction extends ActionSupport { /** * */ private static final longserialVersionUID = 1L; private String title; private User user; public String useProperty(){ title="Property的用法"; user=new User("张三",22); return"propertity"; } public String useSet(){ title="Set的用法"; user=new User("李四",20); return "set"; } public String usePush(){ title="Push的用法"; user=new User("王五",21); return "push"; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
这个Action类包含了使用Property,set,push的3种方法。
接着请看一个model类User.java,代码如下:
public class User { private String username; private int age; public User(String username, int age) { super(); this.username = username; this.age = age; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
下面让我们看看在jsp页面中怎么用property标签接收action类中的属性,请看我的useProperty.jsp,代码如下所示:
<%@ page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s"uri="/struts-tags" %> <!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>property用法</title> </head> <body> title:<s:property value="title"/><br> name:<s:property value="user.username"/><br> age:<s:property value="user.age"/> </body> </html>
可以看出title这个属性可以直接访问。而name和age是user的那个属性,如果想要访问的话就要使用OGNL的二级表达式去访问这样额属性,得到如下结果:
下面我们用set标签去访问action中的属性
二.Set的用法
Set标签用来指定一个属性值到另一个名称,这样有助于更快更简单的方法访问属性。请看我的useSet.jsp页面,代码如下:
<%@ page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>set用法</title> </head> <body> <s:set name="username" value="user.username"></s:set> <s:set name="age" value="user.age"></s:set> title:<s:property value="title"/><br> name:<s:property value="#username"/><br> age:<s:property value="#age"/> </body> </html>
通过用set标签,将user的username和age属性都存贮在ActionContext中了。我们用“#objectName”的形式就可以取到这个属性值了,得到如下所示结果:
当然我们也可以将user的username和age存贮在session中,例如:
<s:set name="username"value="user.username" scope=”session”></s:set>
如果我们想要取session中的值,可以这样取:
name:<s:property value="#session[‘username’]"/><br>
这个你可以自己试试,下面来说说Push标签的用法
三.Push标签
与前两个标签不同的是,Push标签是将值存在值栈中,在设置push标签时应将标签放在使用属性之前,形成“包围”之势,你一定很困惑,请看我的usePush.jsp页面,代码如下所示:
<%@ page language="java"contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> <title>Push用法</title> </head> <body> title:<s:property value="title"/><br> <s:push value="user"> name:<s:property value="username"/><br> age:<s:property value="age"/> </s:push> </body> </html>
页面如下所示:
得到的是一样的结果。
可以看出property,set,push标签得到的都是一样的结果,只是表达不同而已。其中一定要理解ActionContext和值栈之间的关系
本文转自http://blog.csdn.net/youqishini/article/details/7061909
相关文章推荐
- Struts2学习笔记(5)-----Struts2数据标签Property,Set和Push的用法
- Struts2学习笔记(5)-----Struts2数据标签Property,Set和Push的用法
- Struts2中对数据简单的验证和property标签的用法
- [原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等
- Struts2标签的<s:set标签的用法
- Struts2标签的<s:set标签的用法
- Struts2标签的<s:set>标签的用法
- Struts2中的标签介绍(一) s:property s:set s:bean s:push s:date
- Struts2中的标签 s:property s:set s:bean s:push s:date
- Struts2 <s:property /> 标签用法
- struts2系列十七之常用的struts标签set,property,iterator,include,if,error,判断奇偶
- Struts2中的标签介绍 s:property s:set s:bean s:push s:date
- struts2中property标签结合OGNL的用法
- Struts2中的标签介绍 s:property s:set s:bean s:push s:date
- struts2中property标签组合OGNL的用法
- Struts2中的标签介绍 s:property s:set s:bean s:push s:date
- struts2 debug include param push标签(数据标签)
- c标签和struts2标签一些用法上的区别
- NSUserDefaults数据保存报错:Attempt to set a non-property-list object...
- Struts2数据标签的简单应用