test

structs 控制标签介绍

第一部分;代码

  1. //前端  
  2. <html>  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=GB18030" />  
  5. <title>Insert title here</title>  
  6. </head>  
  7.     <body>  
  8.         访问属性  
  9.         <a href="<%=contextPath %>/tags.action?username=u&password=p">tags</a>  
  10.     </body>  
  11. </html>  
  1. //struct.xml  
  2. <constant name="struts.ui.theme" value="simple" />  
  3. <package name="tags" extends="struts-default">  
  4.     <action name="tags" class="com.struts2.tags.TagsAction">  
  5.         <result>/tags.jsp</result>  
  6.     </action>  
  7. </package>  
  1. //类包  
  2. package com.struts2.tags;  
  3. import com.opensymphony.xwork2.ActionSupport;  
  4. public class TagsAction extends ActionSupport {  
  5.     private String password;  
  6.     private String username;  
  7.   
  8.   
  9.     public TagsAction() {  
  10.     }  
  11.   
  12.   
  13.     public String execute() {  
  14.         this.addFieldError("fielderror.test""wrong!");  
  15.         return SUCCESS;  
  16.     }  
  17.       
  18.     public String getPassword() {  
  19.         return password;  
  20.     }  
  21.   
  22.   
  23.     public String getUsername() {  
  24.         return username;  
  25.     }  
  26.   
  27.   
  28.     public void setPassword(String password) {  
  29.         this.password = password;  
  30.     }  
  31.       
  32.     public void setUsername(String username) {  
  33.         this.username = username;  
  34.     }     
  35. }  
  1. //展示  
  2. </head>  
  3. <body>  
  4.     <ol>  
  5.         <li>property: <s:property value="username"/> </li>  
  6.         <li>property 取值为字符串: <s:property value="'username'"/> </li>  
  7.         <li>property 设定默认值: <s:property value="admin" default="管理员"/> </li>  
  8.         <li>property 设定HTML: <s:property value="'<hr/>'" escape="false"/> </li>  
  9.         <hr />  
  10.   
  11.   
  12.         <li>set 设定adminName值(默认为request 和 ActionContext): <s:set var="adminName" value="username" /></li>   
  13.         <li>set 从request取值: <s:property value="#request.adminName" /></li>  
  14.         <li>set 从ActionContext取值: <s:property value="#adminName" /></li>  
  15.           
  16.         <%--<li>set 设定范围: <s:set name="adminPassword" value="password" scope="page"/></li>  
  17.         <li>set 从相应范围取值: <%=pageContext.getAttribute("adminPassword") %></li>  
  18.         --%>  
  19.         <li>set 设定var,范围为ActionContext: <s:set var="adminPassword" value="password" scope="session"/></li>  
  20.         <li>set 使用#取值: <s:property value="#adminPassword"/> </li>  
  21.         <li>set 从相应范围取值: <s:property value="#session.adminPassword"/> </li>  
  22.           
  23.         <hr />  
  24.           
  25.         <%--<li>push:<s:set name="myDog" value="new com.bjsxt.struts2.ognl.Dog('oudy')"></s:set></li>  
  26.         <li>  
  27.         push:<s:push value="#myDog">  
  28.             <s:property value="name"/>  
  29.         </s:push>  
  30.         </li>  
  31.         <li>push: <s:property value="name"/></li>  
  32.         --%>  
  33.           
  34.         <hr />  
  35.         <li>bean 定义bean,并使用param来设定新的属性值:  
  36.             <s:bean name="com.bjsxt.struts2.tags.Dog" >  
  37.                 <s:param name="name" value="'pp'"></s:param>  
  38.                 <s:property value="name"/>  
  39.                   
  40.             </s:bean>  
  41.               
  42.               
  43.         </li>  
  44.           
  45.         <li>bean 查看debug情况:  
  46.             <s:bean name="com.bjsxt.struts2.tags.Dog" var="myDog">  
  47.                 <s:param name="name" value="'oudy'"></s:param>  
  48.             </s:bean>  
  49.             拿出值:  
  50.             <s:property value="#myDog.name"/>  
  51.               
  52.         </li>  
  53.         <hr />  
  54.           
  55.         <li>include _include1.html 包含静态英文文件  
  56.         <s:include value="/_include1.html"></s:include>  
  57.         </li>  
  58.           
  59.         <li>include _include2.html 包含静态中文文件  
  60.         <s:include value="/_include2.html"></s:include>  
  61.         </li>  
  62.           
  63.         <li>include _include1.html 包含静态英文文件,说明%用法  
  64.         <s:set var="incPage" value="%{'/_include1.html'}" />  
  65.         <s:include value="%{#incPage}"></s:include>  
  66.         </li>  
  67.           
  68.           
  69.         <hr />  
  70.           
  71.         <li>if elseif else:   
  72.         age = <s:property value="#parameters.age[0]" /> <br />  
  73.         <s:set var="age" value="#parameters.age[0]" />  
  74.         <s:if test="#age < 0">wrong age!</s:if>  
  75.         <s:elseif test="#parameters.age[0] < 20">too young!</s:elseif>  
  76.         <s:else>yeah!</s:else><br />  
  77.           
  78.         <s:if test="#parameters.aaa == null">null</s:if>  
  79.         </li>  
  80.           
  81.         <hr />  
  82.           
  83.         <li>遍历集合:<br />  
  84.         <s:iterator value="{1, 2, 3}" >  
  85.             <s:property/> |  
  86.         </s:iterator>  
  87.         </li>  
  88.         <li>自定义变量:<br />  
  89.         <s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x">  
  90.             <s:property value="#x.toUpperCase()"/> |  
  91.         </s:iterator>  
  92.         </li>  
  93.         <li>使用status:<br />  
  94.         <s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">  
  95.             <s:property/> |   
  96.             遍历过的元素总数:<s:property value="#status.count"/> |  
  97.             遍历过的元素索引:<s:property value="#status.index"/> |  
  98.             当前是偶数?:<s:property value="#status.even"/> |  
  99.             当前是奇数?:<s:property value="#status.odd"/> |  
  100.             是第一个元素吗?:<s:property value="#status.first"/> |  
  101.             是最后一个元素吗?:<s:property value="#status.last"/>  
  102.             <br />  
  103.         </s:iterator>  
  104.           
  105.         </li>  
  106.           
  107.         <li>  
  108.         <s:iterator value="#{1:'a', 2:'b', 3:'c'}" >  
  109.             <s:property value="key"/> | <s:property value="value"/> <br />  
  110.         </s:iterator>  
  111.         </li>  
  112.           
  113.         <li>  
  114.         <s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">  
  115.             <s:property value="#x.key"/> | <s:property value="#x.value"/> <br />  
  116.         </s:iterator>  
  117.         </li>  
  118.           
  119.         <li>  
  120.           
  121.         <s:fielderror fieldName="fielderror.test" theme="simple"></s:fielderror>  
  122.           
  123.         </li>  
  124.     </ol>   
  125. </body>  
  126. </html>  

第二部分:分析

前端:<a href="<%=contextPath %>/tags.action?username=u&password=p">tags</a>点击之后,传递了给
tag.action两个参数username和password。
-> struct.xml配置,调用TagsAction.java类,初始化对象,并对对象设置初值。

  1. <package name="tags" extends="struts-default">  
  2.     <action name="tags" class="com.struts2.tags.TagsAction">  
  3.         <result>/tags.jsp</result>  
  4.     </action>  
  5. </package>  
-> 根据struct.xml配置的结果信息,将结果传递到<result>/tags.jsp</result>中说明的tag.jsp中进行显示,并通过标签进
行取值操作;

第三部分:通用标签操作

  1. property标签:  
  2.         <li>property: <s:property value="username"/> </li>  
  3.         <li>property 取值为字符串: <s:property value="'username'"/> </li>  
  4.         <li>property 设定默认值: <s:property value="admin" default="管理员"/> </li>  
  5.         <li>property 设定HTML: <s:property value="'<hr/>'" escape="false"/> </li>  
分析:
property 取值为字符串: <s:property value="'username'"/>,当标签中的s:proerty中的值为双引号里面加上单引号时,表
示将单引号里面的值当做字符串进行处理。

  1. set标签:  
  2.     <li>set 设定adminName值(默认为request 和 ActionContext): <s:set var="adminName" value="username" /></li>   
  3.     <li>set 从request取值: <s:property value="#request.adminName" /></li>  
  4.     <li>set 从ActionContext取值: <s:property value="#adminName" /></li>  
  5.     <s:debug></s:debug>  
  6.   
  7.   
  8.     <li>set 设定var,范围为ActionContext: <s:set var="adminPassword" value="password" scope="session"/></li>  
  9.     <li>set 使用#取值: <s:property value="#adminPassword"/> </li>  
  10.     <li>set 从相应范围取值: <s:property value="#session.adminPassword"/> </li>  
分析:
在set里面可以设置作用范围值:scope
scope 默认为action,可以取得的scope有五个:The scope in which to assign the variable. Can be application, 
session, request, page, or action.

  1. bean标签:  
  2.     <li>bean 定义bean,并使用param来设定新的属性值:  
  3.         <s:bean name="com.struts2.tags.Dog" >  
  4.             <s:param name="name" value="'pp'"></s:param>  
  5.             <s:property value="name"/>              
  6.         </s:bean>                   
  7.     </li>  
  8.       
  9.     <li>bean 查看debug情况:  
  10.         <s:bean name="com.struts2.tags.Dog" var="myDog">  
  11.             <s:param name="name" value="'oudy'"></s:param>  
  12.         </s:bean>  
  13.             拿出值:  
  14.         <s:property value="#myDog.name"/>       
  15.     </li>  
分析:
bean标签
参数name的类型为String,作用是The class name of the bean to be instantiated (must respect JavaBean 
specification),定义一个需要实例化的类。
取值的方法:都是以#开头,家伙是哪个变量名称
#adminPassword
#session.adminPassword
#myDog.name
注意一下两种不同:

<s:bean name="com.struts2.tags.Dog" >
s:bean执行开始时,会构造一个对象入栈到栈顶,执行完毕之后从栈顶取出。
<s:bean name="com.struts2.tags.Dog" var="myDog">
执行之后放在Stack Context

  1. include标签  
  2.     <s:set var="incPage" value="%{'/_include1.html'}" />  
  3.     <s:include value="%{#incPage}"></s:include>  
%{}作用:将其强制转为ognl表达式;

第四部分:控制标签操作

  1. <hr />  
  2.     <li>if elseif else:   
  3.     age = <s:property value="#parameters.age[0]" /> <br />  
  4.     <s:set var="age" value="#parameters.age[0]" />  
  5.     <s:if test="#age < 0">wrong age!</s:if>  
  6.     <s:elseif test="#parameters.age[0] < 20">too young!</s:elseif>  
  7.     <s:else>yeah!</s:else><br />  
  8.       
  9.     <s:if test="#parameters.aaa == null">null</s:if>  
  10.     </li>   
  11. <hr />  
通过set设置短名称;

第五部分:遍历标签

  1. <li>遍历集合:<br />  
  2.     <s:iterator value="{1, 2, 3}" >  
  3.         <s:property/> |  
  4.     </s:iterator>  
  5. </li>  
  6.   
  7.   
  8. <li>自定义变量:<br />  
  9.     <s:iterator value="{'aaa', 'bbb', 'ccc'}" var="x">  
  10.         <s:property value="#x.toUpperCase()"/> |  
  11.     </s:iterator>  
  12. </li>  
    分析:字符串集合,var = "x"相当于for循环里面定义的临时变量,集合中的每个值取出来,每循环一次把值放到x里面。利用#进行访问就可以。
  1. <li>使用status:<br />  
  2.     <s:iterator value="{'aaa', 'bbb', 'ccc'}" status="status">  
  3.         <s:property/> |   
  4.             遍历过的元素总数:<s:property value="#status.count"/> |  
  5.             遍历过的元素索引:<s:property value="#status.index"/> |  
  6.             当前是偶数?:<s:property value="#status.even"/> |  
  7.             当前是奇数?:<s:property value="#status.odd"/> |  
  8.             是第一个元素吗?:<s:property value="#status.first"/> |  
  9.             是最后一个元素吗?:<s:property value="#status.last"/>  
  10.         <br />  
  11.     </s:iterator>   
  12. </li>  
    分析:status作用If specified, an instanceof IteratorStatus will be pushed into stack upon each iteration
s:property取出循环的当前值。通过对status取值,来得到循环情况


  1. <li>  
  2.     <s:iterator value="#{1:'a', 2:'b', 3:'c'}" >  
  3.         <s:property value="key"/> | <s:property value="value"/> <br />  
  4.     </s:iterator>  
  5. </li>  
  6.   
  7. <li>  
  8.     <s:iterator value="#{1:'a', 2:'b', 3:'c'}" var="x">  
  9.         <s:property value="#x.key"/> | <s:property value="#x.value"/> <br />  
  10.     </s:iterator>  
  11. </li>  
    分析:定义map时,需要在前面加上#;
posted @ 2014-12-11 10:20  Lechance  阅读(207)  评论(0编辑  收藏  举报