struts2标签

数据标签

 

action标签

    

action标签可以允许在JSP页面中直接调用Action,因为需要调用Action,故可以指定需要被调用Action的name及namespace,如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图资源)包含在本页面中来

Struts2所有标签都在URL为“struts-tags”的空间下

属性:

分类:

id:这是一个可选属性,该属性将作为该Action的引用ID

图片 1

name:这是一个必填属性,通过该属性指定该标签调用那个Action

图片 2

namespace:这是一个可选属性,该属性指定该标签调用的Action所在的namespace

标签开发步骤:1)开发标签处理类

executeResult:这是一个可选属性,该属性指定是否要将Action的处理结果页面包含到本页面,该属性默认值是false,即不包含

                        2)定义标签库定义文件

ignoreContextParams:这是一个可选参数,它指定该页面中的请求参数是否需要传入调用的Action,该参数的默认值是false,即将本页面的请求参数传入被调用的Action

1、struts里的标签库定义文件:struts-tags.tld

 

<taglib…>

package
test;

        …

 

      <display-name>Struts Tags</display-name>

import
org.apache.struts2.ServletActionContext;

      <tlib-version>2.3</tlib-version>

 

      <short-name>s</short-name>

import
com.opensymphony.xwork2.ActionSupport;

      <uri>/struts-tags</uri>

 

      <tag../>

public
class
TagAction
extends
ActionSupport{

        …….

   private
String author;

       <tag../>

 

</taglib>

   public
String getAuthor() {

 

      return
author;

2、使用struts里面标签:

   }

    <@taglib prefix=”s” uri=”/struts-tags”>

 

     <s:text../>

   public
void
setAuthor(String author) {

 

      this.author
= author;

传统的OGNL表达式中系统会假设只有一个根对象,不指定对象名时默认使用根对象。

   }

Struts2使用标准的Context来进行OGNL表达式求值,OGNL的顶级对象是Stack
Context(有时也称OGNL Context),Stack
Context对象是一个Map类型的实例,其根对象就是ValueStack。

  

   
访问根对象(ValueStack)里的属性,可以省略对象名,不需要加#前缀:${bar}

   //定义第一个处理逻辑

    访问Stack Context里根对象以外对象,在对象名前加前缀:#

   public
String execute() throws
Exception{

           
系统创建了Action实例后,该实例已保存到ValueStack里面,不需要写#即可访问

      return
“done”;

            以下命名对象存在于Stack
Context中,不是根对象,需要用#前缀:

   }

                    命名对象        
用法                                                          返回结果
                    parameters  
 #parameters[‘foo’]或#parameters.foo    
HttpServletRequest的getParameter(“foo”)

  

                    request        
  #session[‘foo’]或#session.foo                
HttpSession的getAttribute(“foo”)

   //定义第二个处理逻辑

                    application    
#application[‘foo’]或#application.foo  
 ServletContext的getAttribute(“foo”)

   public
String login() throws
Exception{

                    attr            
 依次搜索:PageContext、HttpServletRequest、HttpSession、ServletContext对象中的属性

     
ServletActionContext.getRequest().setAttribute(“author”,getAuthor());

       

      return
“done”;

3、OGNL中的集合操作    

   }

    创建:

}

            list类型      
 {e1,e2,e3…}

 

            map类型    
#{key1:value1,key2:value2…}

Action类包含了两个处理逻辑,可以在struts.xml文件中通过指定method属性来将该Action类映射成两个逻辑Action,

    判断是否在集合内:

<package
name=”test”
extends=”struts-default”>

            in        在

      <!–
定义第一个Action,使用test.TagAction的execute方法作为处理逻辑
–>

            not in  不在

      <action
name=”tag1″
class=”test.TagAction”>

               eg.    <s:if test=”‘foo’ not in
{‘aa’,’bb’}”>不包含</s:if>

         <result
name=”done”>succ.jsp</result>

    取集合子集:

      </action>

            ?  
 所有符合条件的

     

             ^  
 所有符合条件的第一个元素

      <!–
定义第二个Action,使用test.TagAction的login方法作为处理逻辑
–>

             $  
 所有符合条件的最后一个元素

      <action
name=”tag2″
class=”test.TagAction”
method=”login”>

                eg.    person.relatives.{? #this.gender == ‘male’}

         <result
name=”done”>loginSucc.jsp</result>

4、访问静态成员

      </action>

       配置struts.xml,允许OGNL访问静态方法

   </package>

            <contant
name=”struts.ognl.allowStaticMethodAccess” value=”true”/>

在JSP页面中使用<s:action>标签来调用这两个逻辑Action

       使用OGNL表达式访问:加@

下面调用第一个Action,并将结果包含到本页面中<br>

                @className@staticField

      <s:action
name=”tag1″
executeResult=”true”></s:action><hr/>

                @className@staticMethod(val..)

      下面调用第二个Action,并将结果包含到本页面中<br>

 

      阻止本页面请求参数传入Action<br>

5、Lambda表达式

      <s:action
name=”tag2″
executeResult=”true”
ignoreContextParams=”true”></s:action><hr/>

        eg.    求斐波那契数列第11个元素的值:

      下面调用第二个Action,且不将结果包含到本页面中<br>

                  <s:property value=”#fib =: [#this==0 ? 0 :
#this==1 ? 1 : #fib(#this-2)+ #fib(#this-1)],#fib(11)”/>

      <s:action
name=”tag2″
executeResult=”false”></s:action>

 

      <s:property
value=”#attr.author”></s:property>

6、控制标签            

 

  •     if         <s:if test=”表达式”>标签体</s:if>
  •     elseIf/elseif            
      <s:elseif test=”表达式”>标签体</s:elseif>
  •     else                        
      <s:else>标签体</s:else>
  •     append                     将多个集合拼接成一个新的集合;
  •     generator                
     字符串解析器,用于将一个字符串解析成一个集合;
  •     iterator                      迭代器,用于将集合迭代输出;
  •     merge                    
      多个集合拼接成一个新的集合。但与appernd的拼接方式有所不同。
  •     sort                           对集合进行排序
  •     subset                       截取集合的部分元素,形成新的子集;

 

 

bean标签

 

bean标签用于创建一个JavaBean实例,可以在该标签体内受用<param…/>标签为该JavaBean实例传入属性,当需要传入属性值,则应该为JavaBean类提供对应的setter方法;需要访问属性值,则应该提供getter方法

 

属性:

7、数据标签

name:该属性是一个必填属性,指定要实例化的JavaBean的实现类

  •  action                
           在JSP页面直接调用一个Action 
  •  bean                  
          创建一个JavaBean实例

  •  date                  
           格式化输出一个日期

  •  debug                  
        在页面生成一个调试链接  
  •  i18n                  
            指定国际化资源文件的baseName
  •  include                
         在JSP页面包含其他JSP或Servlet资源
  •  param                  
         设置一个参数,通常用作bean标签、url标签的子标签 
  •  push                  
           将某个值放入ValueStack栈顶
  •  set                    
            设置一个新变量,可指定变量范围
  •  text                  
             输出国际化消息
  •  url                    
             生成URL地址
  •  property              
         输出某个值,包括ValueStack、Stack Context和Action
    Context中的值

id:该属性是一个可选属性,如果指定,则该JavaBean实例会被放入StackContext中,从而允许直接通过id属性来访问该实例

 

 

8、主题和模板

package
test;

     
设置主题的方式(以下几种方法优先级从高到低):

 

       
设定特定UI标签上的theme属性指定

public
class
Person {

       
设定UI标签外围<s:form../>的theme属性

   private
String name;

       
取得page会话内命名为theme的属性来确定主题

   private
int
age;

       
。。request。。。。。。。。。。。。。。。。

   public
Person() {

       
。。session。。。。。。。。。。。。。。。。

      super();

       
。。application。。。。。。。。。。。。。。

      //
TODO
Auto-generated constructor stub

       
在struts.properties或struts.xml文件中设置struts.ui.theme常量来确定默认主题(该常量默认为xhtml)

   }

    

   public
Person(String name, int
age) {

       
Struts默认提供了三个主题:simple,xhtml,css_xhtml

      super();

       
Struts的Ajax主题:struts2-dojo-plugin-2.3.16.3.jar

      this.name
= name;

 

      this.age

              
图片 3

   Struts2的模板目录是通过struts.ui.templateDir常量来指定的(默认值是template)

        加载模板的顺序(以使用select标签为例):       

                        1)搜索Web应用里的/template/xhtml/select.ftl

                       
2)搜索CLASSPATH路径下的/template/xhtml/select.ftl

    选择自己的模板技术,修改struts.ui.templateSuffix常量的值:

                        ftl(默认):基于FreeMarker的模板技术

                        vm:基于Velocity的模板技术

                        jsp:基于JSP的模板技术

  

    自定义主题方式:

                      完全开发一个新的主题

                      包装一个现有主题

                      扩展一个现有主题

 

9、表单标签

           
所有的表单标签处理类都继承了UIBean类,UIbean包含了一些通用属性,这些通用属性分:

                   模板相关

                   JavaScript相关

                   通用属性

                   特殊属性:form

 

10、非表单标签

                主要有:

                        actionerror          
 Action实例的getActionErrors()返回结果

                        actionmessage    
 Action实例的getActionMessages()返回结果

                        component           可生成一个自定义组件

                        fielderror              
Action实例存在的表单域的类型转换错误、校验错误

            


模板相关的通用属性如下:

1、
templateDir:指定该表单所用的模板文件目录。

2、
theme:指定该表单所用的主题

3、
template:指定该表单所用的模板

JavaScript相关的通用属性如下:

1、
onclick:指定鼠标在该标签生成的表单元素上单击时触发的JavaScript函数。

2、
ondbclick:指定鼠标在该标签生成的表单元素上双击时触发的JavaScript函数。

3、
onmousedown:指定鼠标在该标签生成的表单元素上按下时触发的JavaScript函数。

4、
onmouseup:指定鼠标在该标签生成的表单元素上松开时触发的JavaScript函数。

5、
onmouseover:指定鼠标在该标签生成的表单元素上悬停时触发的JavaScript函数。

6、
onmouseout:指定鼠标移除该标签生成的表单元素时触发的函数。

7、
onfocus:指定该标签生成的表单元素得到焦点时触发的函数。

8、
onblur:指定该标签生成的表单元素失去焦点时触发的函数。

9、
onkeypress:指定单击键盘上某个键时触发的函数。

10、onkeyup:指定松开键盘上某个键时触发的函数。

11、onkeydown:指定按下键盘上某个键时触发的函数。

12、onselect:对下拉列表项等可以选择表单的元素,指定选中该元素时触发的JavaScript函数。

13、
onchange:对于文本框等可以接受输入的表单元素,指定当值改变时触发的javaScript函数。

因为Html本身的限制,并不是每个Html元素都可以触发以上的所有函数。因此,上面的属性并不是对Struts2 的每个标签都有效。

Struts2还允许为表单元素设置提示,单鼠标在这些元素上停悬时,系统将出现提示。Struts2将这种特性称为Tooltip。

相关的通用属性如下:

1、
tooltip:设置此组件的Tooltip。

2、
tooltipIcon:设置Tooltip图标的URL路径。

3、
tooltipAboveMousePointer:是否在光标位置上显示Toopltip。也可以通过设置tooltipOffseY属性,设置Tooltip与光标位置的垂直位移。

4、
tooltipBgColor:设置Tooltip的背景色。

5、
tooltipBgImg:设置Tooltip的背景图片。

6、
tooltipBorderWidth:设置Tooltip边框的宽度


标签具体用法及示例可参考:

下列内容为链接原文节选:

1, if……elseif……else,用来控制选择输出的标签

图片 4图片 5

<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
    <title>s:if标签测试</title>  
</head>  
<body>  
<!-- 在Stack Context中定义一个age属性,其值为29 -->  
<s:set name="age" value="29"/>  
<!-- 如果Stack Context中的age属性大于60 -->  
<s:if test="#age>60">  
    老年人  
</s:if>  
<!-- 如果Stack Context中的age属性大于35 -->  
<s:elseif test="#age>35">  
    中年人  
</s:elseif>  
<!-- 如果Stack Context中的age属性大于15 -->  
<s:elseif test="#age>15">  
    青年人  
</s:elseif>  
<s:else>  
    少年  
</s:else>  
</body>  
</html>  

View Code

 

2,append:用于将多个集合拼接成一个新的集合

 1 <html xmlns="http://www.w3.org/1999/xhtml">  
 2 <head>  
 3     <title>使用s:append标签拼接集合和Map</title>  
 4 </head>  
 5 <body>  
 6 <!-- 使用append将List和Map集合拼接在一起  
 7     新集合实际上是Map集合,其名字为newList -->  
 8 <s:append var="newList">  
 9     <s:param value="#{'Java':'ljh',  
10         'C#':'lsz'}" />  
11     <s:param value="#{'0629',   
12         '0404'}" />  
13 </s:append>  
14 <table border="1" width="280">  
15 <!-- 使用iterator迭代newList集合 -->  
16 <s:iterator value="#newList" status="st">  
17     <tr <s:if test="#st.odd">  
18         </s:if>>  
19         <td><s:property value="key"/></td>  
20         <td><s:property value="value"/></td>  
21     </tr>  
22 </s:iterator>  
23 </table>  
24 </body>  
25 </html>  
26   

 

3,generator:是一个字符串解析器,用于将一个字符串解析成一个集合;

 

 1 <html xmlns="http://www.w3.org/1999/xhtml">
 2 <head>
 3     <title>使用s:generator生成集合</title>
 4 </head>
 5 <body>
 6 <table border="1" width="240">
 7 <!-- 使用generator标签将指定字符串解析成Iterator集合
 8     在generator标签内,得到的List集合位于ValueStack顶端 -->
 9 <s:generator val="'Java
10     ,C#,
11     C++'" separator=",">
12 <!-- 没有指定迭代哪个集合,直接迭代ValueStack顶端的集合 -->
13 <s:iterator status="st">
14     <tr <s:if test="#st.odd">
15         style="background-color:#bbbbbb"</s:if>>
16         <td><s:property/></td>
17     </tr>
18 </s:iterator>
19 </s:generator>
20 </table>
21 </body>
22 </html>

 

4,iterator:是一个迭代器,用于将集合迭代输出,这个比较使用哈,前边都有,不再举例

5,merge:也是用于将多个集合拼接成一个新的集合,但是与append不同。append是将集合依次排列进行拼接,merge是第一个集合的第一个,第二个集合的第一个……第一个集合的第二个,第二个集合的第二个……;

 1 <html xmlns="http://www.w3.org/1999/xhtml">  
 2 <head>  
 3     <title>使用s:merge标签迭代Map</title>  
 4 </head>  
 5 <body>  
 6 <s:merge id="newList">  
 7     <s:param value="#{'Java':'ljh',  
 8         'C#':'lsz'}" />  
 9     <s:param value="#{'0629',   
10         '0404'}" />  
11 </s:merge>  
12   
13 <table border="1" width="320">  
14 <s:iterator value="#newList" status="st">  
15     <tr <s:if test="#st.odd"></s:if>>  
16         <td><s:property value="key"/></td>  
17         <td><s:property value="value"/></td>  
18     </tr>  
19 </s:iterator>  
20 </table>  
21 </body>  
22 </html>  

6,sort:这个标签用于将集合进行排序

 

 1 <html xmlns="http://www.w3.org/1999/xhtml">  
 2 <head>  
 3     <title>使用s:sort对集合元素进行排序</title>  
 4 </head>  
 5 <body>  
 6 <!-- 定义一个Comparator实例 -->  
 7 <s:bean var="mycomparator" name="org.ljh.app.util.MyComparator"/>  
 8 <!-- 使用自定义的排序规则对目标集合进行排序 -->  
 9 <s:sort source="{'Java'  
10     ,'C#'  
11     ,'C++'  
12     ,'Ajax'  
13     ,'XML'}"   
14     comparator="#mycomparator"  
15     var="sortedList"/>  
16 输出page范围的sortedList属性:<br/>  
17 ${pageScope.sortedList}  
18 <table border="1" width="300">  
19 <!-- 迭代page范围内的sortedList属性 -->  
20 <s:iterator status="st" value="#attr.sortedList">   
21     <tr <s:if test="#st.odd">  
22         </s:if>>  
23         <td><s:property/></td>  
24     </tr>  
25 </s:iterator>  
26 </table>  
27 </body>  
28 </html>
29   

 1 public class MyComparator implements Comparator  
 2 {  
 3     //决定两个元素大小的方法  
 4     public int compare(Object element1, Object element2)  
 5     {  
 6         //根据元素字符串长度来决定大小      
 7         return element1.toString().length()  
 8             - element2.toString().length();  
 9     }  
10 }  

 

 7,subset:这个标签用于截取集合的部分元素,形成新的子集合。

 1 <html xmlns="http://www.w3.org/1999/xhtml">  
 2 <head>  
 3     <title>使用s:subset标签截取集合元素</title>  
 4 </head>  
 5 <body>  
 6 <!-- 定义一个Decider Bean -->  
 7 <s:bean var="mydecider" name="org.ljh.app.util.MyDecider"/>  
 8 <!-- 使用自定义的Decider实例来截取目标集合,生成子集  
 9     指定var属性,将生成的Itertor放入pageScope中 -->  
10 <s:subset source="{'Java'<pre name="code" class="html">  ,'C#'  
11     ,'C++'  
12     ,'Ajax'  
13     ,'XML'</pre>}" decider="#mydecider"var="newList"/>直接输出page范围的newList属性:<br/>${pageScope.newList}<table border="1" width="240"><!-- 迭代page范围内的newList属性 --><s:iterator status="st" value="#attr.newList"><tr <s:if test="#st.odd"></s:if>><td><s:property/></td></tr></s:iterator></table></body></html>  
14  
15 //用户自定义的Decider类,实现了SubsetIteratorFilter.Decider接口  
16 public class MyDecider   
17     implements SubsetIteratorFilter.Decider  
18 {  
19     //实现Decider接口必须实现的decide方法,  
20     //该方法决定集合中的元素是否被选入子集  
21     public boolean decide(Object element) throws Exception  
22     {  
23         String str = (String)element;  
24         //如果集合元素(字符串)中包含Java EE子串,即可被选入子集  
25         return str.indexOf("Java") > 0;  
26     }  
27 }  

 

二,数据标签,自我感觉数据标签用的不是很多:

 

        action标签,可以允许在jsp页面中直接调用Action,在调用Action时候,可以指定需要被调用的Action的name和namespace.

如果指定了executeResult参数的属性值为true,该标签会把Action的处理结果(视图资源)包含到本页面中. 

使用action标签指定属性有:

     id: 可选属性,作为该Action的引用ID 

     name:必选属性,指定调用Action 

     namespace:可选属性,指定该标签调用Action所属namespace 

   
 executeResult:可选属性,指定是否将Action的处理结果包含到本页面中.默认值为false,不包含.

 

<s:actionname=”actionTag!default”
executeResult=”true”namespace=”/generic/dataTag”>

<paramname=”username” value=”  “/>给action属性复制

<paramname=”email”        value=”
 “/>

</s:action>

 

 

          bean 实例化一个javabean 使用Param传入属性
(get/set)

name 实例化的javabean的实现类

var可选  指定则实例放入栈的上下文 允许用var直接使用

注意:bean标签内创建javabean实例位于栈顶,bean结束移除值栈,除非指定var则通过上下文访问

 

          date格式化输出日期,指定日期与当天日期的时间差

formart   指定格式格式日期       注意:不欲nice同时指定,如果同时指定。则忽略formart

nice  是否指定日期与当前日期差值

name必填  格式化的日期值

var  对象放入值栈,在date结束可以通过该属性的值引用

 

<constanname=”sruts.custom.i18n.resources”value=”ApplicationResources”
/>

<s:datename=”#date” formart=”yyyy年MM月dd日”/>

 

        debug标签:

用于辅助调试.在页面上生成超链接,可以查看值栈,和StackContext中所有信息

 

        include:讲一个jsp或者servlet包含到当前页面

value  包含的JSP或Servlet。

可以指定多个param子标签传参

 

        param标签:为其它标签提供参数

name设置的参数的名字 (set)  value设置的参数的值

用法①<paramname=”color”>  

②<paramname=”color” value=”   ‘color’  
“/>

 

         push:将某个值放到值栈的栈顶

value必填:指定放入值栈的栈值!但是只在push标签内,一旦超出,刚刚放入的对象立即被移除

用法:

<s:pushvalue=”#session.user”>

<s:propertyvalue=”username”>

<s:propertyvalue=”sex”>

<s:propertyvalue=”emai”>

</s:push>

 

        set:用于将某个只放入指定范围内

定义一个新变量。将已有值放入新变量。并放入指定范围

value  指定一个表达式,计算的结果赋变量,如果没有指定value属性,默认将栈顶对象赋给变量。

var  指定该属性,改值放入到值栈中

scope指定新变量防止的范围,可选application,session
request page action(默认)  如果指定为action放入request并放入action值栈

name变量名字

 

       i18n  text标签  支持国际化信息

i18n将资源包放入值栈   name资源属性名字   指定资源包的基名

text从资源包中获取信息 title
  获取键为title的消息

通过i18n放入的资源包只能在标签体内访问

text可以单独使用。首先查找资源包的基名与调用action类名相同的资源包,意味着,可以在action类所在的包中创建与Action类名相同的的资源文件,可以嵌套param指定消息文本的参数,顺序对应参数索引顺序

<s:i18nname=”AppliactionResources”>

<s:textname=”title”/>    name资源属性名字   id指定属性,文本内容不会输出,而是保存在值栈中,在text结束后,可以通过属性的值来引用

</s:i18n>

 

        url标签用于创建URL地址,定义param附加请求参数

action value  指定生成URL的Action和URL。前一个会附加.action。如果两个都没有则以当前地址为地址值

 achor 可选  指定url的锚点

encode 可选   对指定参数进行编码 不支持cookie改写url支持session

escapeamp  是否将&转义为&amp

var  将链接值放入到值栈

includeContext是否将当前上下文包含在URL地址

includeParams是否包含请求参数,改属性值只能为none,getall

method 指定使用action的方法

namespace指定action所属的命名空间

portletmode指定portle模式

scheme指定url使用的协议

 

        property标签,用于输出值栈中的对象的属性值

value指定要输出的对象属性  没有则输出栈顶

default  可选   value为null输出改值

escape 是否专一输出内容中的html

 

 

    三,表单标签,这个就是form下的Struts2提供的标签,供界面显示用的,其实用的更少,一般情况下,我们都会拿easy-ui,dwz等一些专门做界面的框架进行替换。其实说简单一点就像HTML里边的各种标签,这里不再进行赘述,用的时候我们上网上查即可,这里提供网上的一些,大家可以看下:

Struts2常用表单标签http://blog.csdn.net/hahalzb/article/details/5905718

   
四,非表单标签,主要用于生成一些非表单的可视化元素,例如tab页面,输出HTML页面的树形结构等,当然也用来显示Action里封装的信息。简单介绍一下:

标签名

含义

actionerror

如果Action实例的getActionErrors()方法返回不为null,则该标签负责输出该方法的返回的信息。

actionmessage

和上边一样,用于返回GetActionMessage()的信息

component

用于生成一个自定义组件。可以利用写好模版,主题等

fielderror

如果Action实例存在表单域的类型转换错误,校验错误,该标签负责输出这些错误信息。

    简单看一个componet标签:

 

<html>  
<head>  
    <title>使用s:component标签</title>  
</head>  
<body>  
<h3>使用s:component标签</h3>  
使用默认主题(xhtml),默认主题目录(template)<br/>    
使用mytemplate.jsp作为视图组件  
<s:component template="mytemplate.jsp">  
    <s:param name="list" value="{'Java'  
    ,'C#'  
    ,C++'}"/>  
</s:component>  
<hr/>  
使用自定义主题,自定义主题目录<br/>    
使用myAnotherTemplate.jsp作为视图组件  
<s:component  
    templateDir="myTemplateDir"  
    theme="myTheme"  
    template="myAnotherTemplate.jsp">  
    <s:param name="list" value="  
    {'Java'  
    ,'C#'  
    ,C++'}"/>  
</s:component>  
</body>  
</html>  

以下内容原文出自:

一、逻辑控制标签

用于进行逻辑控制输出。主要分以下几类:

1)条件标签:用于执行基本的条件流转

<s:if>:拥有一个test属性,其表达式的值用来决定标签里内容是否显示。<s:if
test=”#request.username==’hzd'”>欢迎hzd</s:if>

<s:elseif>:同上。

<s:else>

2)迭代标签:用于遍历集合(java.util.Collection)或者枚举值(java.util.Iterator)类型的对象,value属性表示集合或枚举对象,status属性表示当前循环的对象,在循环体内部可以引用该对象的属性

<s:iterator value=”userList” status=”user”>

姓名:<s:property value=”user.userName” />

年龄:<s:property value=”user.age” />

</s:iterator>

3)组合标签:用于将多个枚举值对象进行叠加,形成一个新的枚举值列表

如将3个列表对象进行了组合,形成新的列表对象:

<s:append var=”newIteratorList”>

<s:param value=”%{myList1}” />

<s:param value=”%{myList2}” />

<s:param value=”%{myList3}” />

</s:append>

输出:

<s:iterator value=”%{#newIteratorList}”>

<s:property />

</s:iterator>

4)分割标签:用于将一个字符串进行分隔,产生一个枚举值列表

下面的代码将分隔为3个字符串,然后循环输出

<s:generator val=”%{‘aaa,bbb,ccc’}”>

<s:iterator>

<s:property />

</s:iterator>

</s:generator>

5)合并标签:用于将多个枚举值按照数组的索引位置进行合并

<s:merge var=”newMergeList”>

<s:param value=”%{mylist1}”>–设mylist1列表中有a,b,c三个元素

<s:param value=”%{mylist2}”>–设mylist2列表中有1,2,3三个元素

</s:merge>

合并后新的列表的元素及其顺序为:a,1,b,2,c,3

<s:iterator value=”%{#newMergeList}”>

<s:property />

</s:iterator>

6)排序标签:用于对一组枚举值进行排序,属性comparator指向一个继承自java.util.Comparator的比较器,该比较器可以是对应Action页面中的一个比较器变量,source指定要排序的列表对象

<s:sort comparator=”myComparator” source=”myList”>

<s:iterator>

<s:property value=”…”/>

</s:iterator>

</s:sort>

7)子集标签:用于取得一个枚举列表的子集,source用于指定检索的列表对象,start用于指定起始检索的索引位置,count用于指定检索的结果数量,decider属性必须是一个org.apache.struts2.util.SubsetIteratorFilter.Decider类的子类实例,用以指定检索的条件。例如在Action中提供了以下方法用来取得一个Decider对象:

public Decider getDecider()

{

return new Decider(){

public boolean decide(Object element) throws Exception{

int i=((Integer)element).intValue();

return (((i%2)==0)?true:false);

}

};

}

然后引用该对象筛选子集:

<s:subset source=”myList” decider=”decider”>

</s:subset>

或者不使用Decider对象:

<s:subset source=”myList” count=”13″ start=”3″>

</s:subset>

 

二、数据输出标签

数据输出标签用以输出页面中的元素、属性、隐含变量等,即包括静态文本的输出,也包括struts2集成的各种变量的输出。

1)链接标签:用于创建一个<a>标签,errorText用于显示错误信息,priInvokeJS表示该链接执行时的javascript提示函数,href表示跳转地址.

<s:a errorText=”删除错误” preInvokeJS=”confirm(‘确认删除?’)”
href=”test.jsp”>

<img src=”/image/delete.gif” />

</s:a>

2)Action标签:可以直接调用Action类中的函数,前提是该Action类在struts.xml中有定义,name属性用于指向映射文件中配置的Action函数,executeResult属性表示是否执行结果集的跳转

<s:action name=”LoginAction” executeResult=”true”
/>–表示执行LoginAction的默认处理方法execute()

<s:action name=”LoginAction!login” executeResult=”true”
/>–表示执行LoginAction的处理方法login()

3)JavaBean标签:用于创建一个JavaBean对象,name表示JavaBean类全名,var表示变量的实例名,并可以包含<s:param>设置实例化输入参数

<s:bean name=”xxx,xxx,xxx” var=”xxx”>

<s:param name=”name” value=”hzd”
/>–为该JavaBean的构造方法传递参数

</s:bean>

4)日期标签:用以输出一个格式化的日期对象,name表示要输出的对象,format表示输出的日期格式

 <s:date name=”user.birthday” format=”dd/MM/yyyy” />

<s:date name=”user.birthday” format=”%{getText(‘some.i18n.key’)}”
/>

<s:date name=”user.birthday” />–默认格式

5)调用标签:用以输出页面的值栈调试信息,通常在进行程序调用时使用,便于查找JSP页面中的错误

6)引用资源文件标签:用于加载资源包到值栈,它可以允许<s:text>标签访问任何资源包的信息,而不只是当前action相关联的资源包。name属性用以指定资源包的类路径

如xxx.xxx.xxx.ApplicationMessages中定义了标签:HelloWord=欢迎您!

则可以这样引用:

<s:i18n name=”xxx.xxx.xxx.ApplilcationMessages”>

<s:text name=”HelloWord” />

</s:i18n>

7)包含页面标签:用来包含一个Servlet的输出(Servlet或JSP页面),使用value属性指定包含页名称,可以使用<s:param>传递参数给子页

<s:include value=”/test.jsp”>

<s:param
name=”username”>hzd</s:param>–参数username=hzd给test.jsp页面

</s:include>

8)传递参数标签:用来为其他标签提供参数,所以一般是嵌套在其它标签的内部,name属性用来指定参数名称,value(可选)属性用来指定参数值

<s:param name=”username” value=”hzd”
/>–这种方式的参数值会以String格式放入stack

<s:param
name=”username”>hzd</s:param>–这种方式的参数值会以Object的格式放入stack

9)值栈标签:用以加入一个值到值栈中

<s:push value=”user”>

<s:property value=”name” />–为user指定name属性

<s:property value=”age” />–为user指定age属性

</s:push>

10)变量赋值标签:赋予变量一个特定范围内的值,name属性表示变量的名字,scope表示变量的作用域(application.session.request.page.action),value变量的值

<s:set>

11)国际化标签:用于输出国际化信息,name属性指定国际化资源文件中消息文本的key,可以与<s:i18n>标签结合使用

<s:text name=”HelloWord”
/>–它会按照一定的顺序查找资源文件,直到找到定义HellowWord标签的资源文件为止

12)链接标签:用于创建一个URL链接,并可以通过<s:param>标签提供request参数

<s:url id=”url” value=”/test.jsp”>

<s:param name=”username”>hzd</s:param>

</s:url>

13)属性标签:用以输出value属性的值,并拥有一个default属性,在value对象不存在时显示。escape属性为true,来输出原始的HTML文本

<s:property value=”getText(‘some.key’)”>

 

三、HTML表单标签

HTML标签都拥有以下3个设置样式的属性。

templateDir:执行模板路径

theme:指定主题名称,可选值包括simple、xhtml、ajax等

template:指定模板名称

使用HTML表单标签会生成大量格式化的HTML代码,这些代码是由struts2的模板生成的,这样的好处是可以让我们的jsp代码十分简单,只需要配置使用不同的主题模板,就可以显示不同的页面样式。

struts2默认提供了5种主题(在此不做详细介绍):

simple主题:最简单的主题

XHTML主题:默认主题,使用常用的HTML技巧

CSS XHTML主题:使用CSS实现的XHTML主题

archive主题:使用文档生成主题

AJAX主题:基于AJAX实现的主题

通过在struts.properties文件中改变struts.ui.theme,struts.ui.templateDir,struts.ui.templateSuffix三个标签来自由切实可行换主题

由于HTML表单标签也不少,所以还是要用的时候在网上找吧…

 四、HTML非表单标签

主要用来输出各种错误和消息。

1)错误标签:用以输出Action错误信息

<s:actionerror />

2)消息标签:用以输出Action普通消息

<s:atcionmessage />

3)字段错误标签:用以输出Action校验中某一个字段的错误信息或所有字段的错误信息

<s:fielderror />–输出所有字段的错误信息

<s:fielderror>

<s:param>username</s:param>–输出字段username的错误信息

<s:param>password</s:param>–输出字段password的错误信息

<s:fielderror>

4)DIV标签:用以输出一个<div>标签

 

五、AJAX标签

AJAX标签是struts2专门提供的一组进行AJAX操作的标签,在使用这些标签之前,需要在JSP页面中添加如下引用:

<%@ taglib prefix=”sx”
uri=”/struts-dojo-tags”%>

1)链接标签:用于创建一个<a>链接,并且在单击该链接时执行异步的请求,该标签的url属性必须使用<s:url/>标签进行设置,target属性指向要被更新的页面组件,showLoadingText属性决定是否显示文本,indicator表示异步请求时要显示的图片

使用form标签:

<s:div id=”targetDiv”>

<s:form action=”LoginAction”>

<sx:a targets=”targetDiv” showLoadingText=”false”
indicator=”loadingImage” />

</s:form>

</s:div>

使用url标签:

<s:div id=”targetDiv”>

<s:url id=”ajaxTest”
value=”/LoginAction.action”>

<sx:a targets=”targetDiv”
href=”%{ajaxTest}” showLoadingText=”false”
indicator=”loadingImage” />

</s:div>

2)自动完成标签:是一个组合框组件,在文本框中输入文本,能够给出一个下拉的提示列表。list属性用以指定一个自动提示检索的列表集合(可以是Action中的List类型的属性),autoComplete属性为true时表示进行自动提示

<sx:autocompleter name=”test” list=”{‘上海’,’湖南’,广东}”
autoCompleter=”true” />

3)自动事件绑定标签:该标签可以为多个对象的多个事件进行监听,并能够发送异步请求。src属性指定监听的对象源,events属性指定监听的事件类型(JavaScript事件),target属性指定异步返回内容填充的目标,indicator属性表示执行异步请求时显示的图片

<s:div id=”targetDiv”>

<s:form action=”login”>

<s:submit id=”bin” />

<s:bind src=”bin” events=”onclick” targets=”targetDiv”
showLoadingText=”false” indicator=”%{getText(‘loadingImage’)}” />

</s:form>

</s:div>

4)日期选择标签:用以弹出一个日期和时间的选择窗口,displayFormat属性指定要选择日期的格式,name表示当前组件的属性的对象,value表示默认值,label表示显示的文本

<sx:datetimepicker name=”order.date” label=”Order Date”
displayFormat=”yyyy-MM-dd” value=”%{‘2006-01-01’}” />

5)树标签:用以输出一个树形结构

<sx:tree>

6)Tab页标签:使用AJAX的方式显示多个Tab页

<s:tabbedpanel>

还可参考

 

 

相关文章