Struts2 数据标签 property、set、push

之前使用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,代码如下:


 

  1. <SPAN style="FONT-SIZE: 18px">packagecom.iman.action;  
  2.    
  3. importcom.iman.model.User;  
  4. importcom.opensymphony.xwork2.ActionSupport;  
  5.    
  6. publicclass DataAction extends ActionSupport {  
  7.          /** 
  8.           * 
  9.           */  
  10.          private static final longserialVersionUID = 1L;  
  11.          private String title;  
  12.          private User user;  
  13.           
  14.          public String useProperty(){  
  15.                    title="Property的用法";  
  16.                    user=new User("张三",22);  
  17.                    return"propertity";  
  18.          }  
  19.           
  20.          public String useSet(){  
  21.                    title="Set的用法";  
  22.                    user=new User("李四",20);  
  23.                    return "set";  
  24.          }  
  25.    
  26.          public String usePush(){  
  27.                    title="Push的用法";  
  28.                    user=new User("王五",21);  
  29.                    return "push";  
  30.          }  
  31.           
  32.          public String getTitle() {  
  33.                    return title;  
  34.          }  
  35.    
  36.          public void setTitle(String title) {  
  37.                    this.title = title;  
  38.          }  
  39.    
  40.          public User getUser() {  
  41.                    return user;  
  42.          }  
  43.    
  44.          public void setUser(User user) {  
  45.                    this.user = user;  
  46.          }  
  47.           
  48.           
  49. }</SPAN>  
packagecom.iman.action;
 
importcom.iman.model.User;
importcom.opensymphony.xwork2.ActionSupport;
 
publicclass 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,代码如下:


  1. package com.iman.model;  
  2.    
  3. public class User {  
  4.      
  5.     private String username;  
  6.     private int age;  
  7.     public User(String username, int age) {  
  8.        super();  
  9.        this.username = username;  
  10.        this.age = age;  
  11.     }  
  12.     public String getUsername() {  
  13.        return username;  
  14.     }  
  15.     public void setUsername(String username) {  
  16.        this.username = username;  
  17.     }  
  18.     public int getAge() {  
  19.        return age;  
  20.     }  
  21.     public void setAge(int age) {  
  22.        this.age = age;  
  23.     }  
  24.      
  25. }  
package com.iman.model;
 
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,代码如下所示:


 

  1. <SPAN style="FONT-SIZE: 18px"><%@ page language="java"contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@ taglib prefix="s"uri="/struts-tags" %>     
  4. <!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7. <meta http-equiv="Content-Type"content="text/html; charset=UTF-8">  
  8. <title>property用法</title>  
  9. </head>  
  10. <body>  
  11. title:<s:property value="title"/><br>  
  12. name:<s:property value="user.username"/><br>  
  13. age:<s:property value="user.age"/>  
  14. </body>  
  15. </html></SPAN>  
<%@ 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的二级表达式去访问这样额属性,好了,打开服务器并部署完项目,在浏览器地址栏输入:http://localhost:8000/Struts2Tutorial/useProperty,得到如下结果:




     下面我们用set标签去访问action中的属性


      二.Set的用法


      Set标签用来指定一个属性值到另一个名称,这样有助于更快更简单的方法访问属性。请看我的useSet.jsp页面,代码如下:

 

  1. <%@ page language="java"contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@ taglib prefix="s" uri="/struts-tags"%>     
  4. <!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7. <meta http-equiv="Content-Type"content="text/html; charset=UTF-8">  
  8. <title>set用法</title>  
  9. </head>  
  10. <body>  
  11.     <s:set name="username" value="user.username"></s:set>  
  12.     <s:set name="age" value="user.age"></s:set>  
  13.     title:<s:property value="title"/><br>  
  14.     name:<s:property value="#username"/><br>  
  15.     age:<s:property value="#age"/>  
  16. </body>  
  17. </html>  
<%@ 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”的形式就可以取到这个属性值了。同样输入地址:http://localhost:8000/Struts2Tutorial/useSet,得到如下所示结果:




当然我们也可以将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页面,代码如下所示:


 

  1. <%@ page language="java"contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@ taglib prefix="s" uri="/struts-tags"%>     
  4. <!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7. <meta http-equiv="Content-Type"content="text/html; charset=UTF-8">  
  8. <title>Push用法</title>  
  9. </head>  
  10. <body>  
  11.     title:<s:property value="title"/><br>  
  12.     <s:push value="user">  
  13.     name:<s:property value="username"/><br>  
  14.     age:<s:property value="age"/>  
  15.     </s:push>  
  16. </body>  
  17. </html>  
<%@ 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>


 

在浏览器地址栏输入:http://localhost:8000/Struts2Tutorial/usePush,页面如下所示:




得到的是一样的结果。


        可以看出property,set,push标签得到的都是一样的结果,只是表达不同而已。其中一定要理解ActionContext和值栈之间的关系,好了,附上struts.xml中代码:


 

  1. <action name="useProperty" class="com.iman.action.DataAction" method="useProperty">  
  2.     <result name="propertity">/data/useProperty.jsp</result>  
  3. </action>  
  4. <action name="useSet" class="com.iman.action.DataAction"method="useSet">  
  5.     <result name="set">/data/useSet.jsp</result>  
  6. </action>  
  7. <action name="usePush" class="com.iman.action.DataAction"method="usePush">  
  8.     <result name="push">/data/usePush.jsp</result>  
  9. </action>  
        <action name="useProperty" class="com.iman.action.DataAction" method="useProperty">
            <result name="propertity">/data/useProperty.jsp</result>
        </action>
        <action name="useSet" class="com.iman.action.DataAction"method="useSet">
            <result name="set">/data/useSet.jsp</result>
        </action>
        <action name="usePush" class="com.iman.action.DataAction"method="usePush">
            <result name="push">/data/usePush.jsp</result>
        </action>

 


         这是本人学习的结果,欢迎转载,欢迎交流,但转载务必给出本文章的链接地址:http://blog.csdn.net/youqishini/article/details/7061909,谢谢~ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值