zoukankan      html  css  js  c++  java
  • 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时,需要在前面加上#;
  • 相关阅读:
    MySQL varchar类型数据转tinyint类型
    Spring Boot实战笔记(一)-- Spring简介
    Maven学习(八)-- 使用Nexus搭建Maven私服
    Maven学习(七)-- 使用Maven构建多模块项目
    浮点型 float和double类型的内存结构和精度问题
    Maven学习(六)-- Maven与Eclipse整合
    Maven学习(五)-- 聚合与继承
    关于inline函数
    《The Cg Tutorial》阅读笔记——环境贴图 Environment Mapping
    记录最近工作中遇到的一些坑
  • 原文地址:https://www.cnblogs.com/lechance/p/4373277.html
Copyright © 2011-2022 走看看