【Struts2】Struts2学习(4)Struts2标签库

来源:互联网 发布:浙江剑龙网络案件 编辑:程序博客网 时间:2024/05/22 01:57

Struts 2标签库的使用

Struts 2把所有标签都定义在一个s标签库里。从范围来分,Struts2 可以将所有标签分成如下三类。

UI(User Interface ,用户界面)标签:主要用于生成HTML元素的标签。

非UI标签:主要用于数据访问、逻辑控制等的标签。

Ajax标签:用于Ajax(Asynchronous JavaScript And XML)支持的标签。

表单标签:主要用于生成HTML页面的form元素,以及普通表单元素的标签。

非表单标签:主要用于生成页面上的树、Tab页等标签。

数据控制标签:主要包含用于实现分支、循环等流程控制的标签。

数据访问标签:主要包含用于输出ValueStack中的值、完成国际化等功能的标签。


导入Struts 2标签库

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

Struts 2 的OGNL表达式语言

在Struts 2 应用中,视图页面可通过标签直接访问Action属性值(实际这只是一种假象,类似Web应用保持application、session、request、page四个范围的“银行”,Struts 2 自行维护一个特定范围的“银行”,Action将数据放入其中,而JSP页面可从其中取出数据,表面上似乎JSP可直接访问Action数据)当Action属性不是简单值(基本类型或String类型值)时,而是某个对象,甚至是数组、集合时,就需要使用表达式语言来访问这些对象、数组、集合的内部数据,Struts 2 利用OGNL表达式语言来实现这个功能。OGNL不是真正的编程语言,只是一种数据访问语言。

 

在传统的OGNL表达式求值中,系统会假设只有一个“根”对象。

例:

系统的Stack Context中包含两个对象:foo对象和bar对象,且foo为Context的根对象。
//返回 foo.getBlash()的值#foo.blah//返回 bar.getBlash()的值#bar.blah//因为foo是根对象,所以默认取得foo对象的blash属性blash//返回bar.getFoo().getBlash()#bar.foo.blash

如果需要访问的属性属于根对象,则可以直接访问该属性,如blash;否则必须使用一个对象作为前缀修饰该属性,如#bar.blash。Struts2 提供了一个特殊的OGNL Property Accessor(属性访问器),它可以自动搜寻Stack Context的所有实体(从上到下),直到找到与求值表达式匹配的属性。

例:假设 Stack Context 中包括两个根实例: animal和person,这两个实例中包含“name”属性,其中animal是栈顶元素,person实例在其后面。

通过索引来访问Stack Context中的对象

//返回animal.getName()的值,因为从第一个开始找,先找到animal实例[0].name//返回person.getName()方法的返回值,从第二个开始找,先找到person实例[1].name

上面这种索引的方式并不是直接去的指定元素,而是从指定索引开始向下搜索。

OGNL的顶级对象是一个Context,这个Context对象就是一个Map类型实例,其根对象就是ValueStack,如果需要访问ValueStack里的属性,直接通过如下方式即可,不需要加#

${bar}

Struts 2还提供了其他的命名对象,这些对象都不是Stack Context 的“根”对象,它们只是存在于Stack Context中。所以访问这些对象时需要使用#前缀来指明。

parameters 对象:用于访问HTTP请求参数。例如#parameters[‘foo’]或#parameters.foo,用于返回调用HttpServletRequest的getParameter(“foo”)方法的返回值。

request对象:用于访问HttpServletReqeust的属性,例如#request[‘foo’]或#request.foo,用于返回调用HttpServletRequest的getAttribute(“foo”)方法的返回值。

session对象:用于访问HttpSession的属性,例如#session[‘foo’]或者#session.foo,用于返回HttpSession的getAttribute(“foo”)方法的返回值。

application对象:用于返回ServletContext的属性。例如#application[‘foo’]或#application.foo,用于返回调用ServletContext的getAttribute(“foo”)方法的返回值。

attr对象:该对象将依次搜索如下对象:PageContext HttpServletReqeust HttpSession ServletContext 中的属性。

当系统创建了Action实例后,该Action实例已经被保存到ValueStack中,不需要写#即可访问Action属性。在页面增加<s:debug/>标签,登录该页面,点击链接就可以查看Value Stack和Stack Context 里的数据。

 

OGNL中的集合操作

创建List集合语法为

{e1,e2,e3 …}
创建Map类型集合

#{key1:value1,key2 : value2, …}
in 和not in ,其中in判断某个元素是否在指定集合中,not in 判断某个元素是否不在指定集合中。
<!-- 指定集合包含foo元素 -->   <s:if test=" 'foo' in {'foo','bar'}">   include   </s:if>   <s:else>   not include   </s:else>   <!-- 指定集合中不包含 -->   <s:if test="'foo' not in {'foo',''bar}">   not include   </s:if>   <s:else>   include   </s:else>

OGNL取出子集时还有如下三个操作符

? : 取出所有符合逻辑的元素。

^ : 取出符合选择逻辑的第一个元素。

$ :取出符合选择逻辑的最后一个元素。

person.relatives.{? #this.gender == ‘male’} //取出person的所有性别为male的relatives集合

访问静态成员

为了让OGNL表达式可以访问静态成员,应该在 Struts2中将 struts.ognl.allowStaticMethodAccess设置为true。

<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
OGNL表达式通过如下语法来访问静态成员

@className@staticField@className@staticMethod(val …)
例:访问环境变量和圆周率

访问系统环境变量:<s:property value="@java.lang.System@getenv('JAVA_HOME')"/><br/>圆周率 <s:property value="@java.lang.Math@PI"/>

控制标签

if、else if 、else 用于控制选择输出的标签。

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

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

iterator: 这是一个迭代器,用于将集合迭代输出。

merge: 用于将多个集合拼接成一个新的集合,顺序和append不同。

sort :用于对集合排序。

subset: 用于截取部分集合元素。

iterator 标签

使用<s:iterator …/>标签对集合进行迭代输出时,可以指定如下三个属性。

1.      value : 可选属性,value属性指定的是被迭代的集合,被迭代的集合通常都使用OGNL表达式指定。如果没有指定value属性,则使用ValueStack栈顶的集合。

2.      id: 可选属性,该属性指定了集合里元素的ID。

3.      status :可选属性,该属性指定迭代时的IteratorStatus实例,通过该实例即可判断当前元素的属性,如是否是最后一个,当前元素索引等。

如果为<s:iterator …/>指定status属性,每次迭代都会有一个IteratorStatus实例,该实例包含了以下几个方法。

intgetCount();返回当前迭代了几个元素。

intgetIndex();返回当前迭代元素的索引。

BooleanisEven();返回当前迭代元素的索引是否为偶数。

BooleanisFirst(); 返回当前迭代元素是否是第一个元素。

BooleanisLast();返回当前被迭代元素是否是最后一个元素。

BooleanisOdd();返回当前被迭代元素的索引是否是奇数。

append 标签

append标签用于将多个集合对象拼接起来,组成一个新的集合。

使用<s:append …/>标签时需要指定一个var属性,该属性指定新集合的名字,该新集合被放在Stack Context 中。除此之外,<s:append …/> 标签可以接受多个<s:param …/>子标签,每个子标签可指定一个集合。

<s:append var="newList"><s:param value="{'Java',' Java EE ','web'}" /><s:param value="{'http://www.crazyit.org', 'http://blog.crazyit.org'}" /></s:append>

generator标签

generator可以将指定字符串分隔成一个Iterator集合。在该标签的标签体内,整个临时生成的集合将位于ValueStack 的顶端,但一旦该标签结束,该集合将被移出ValueStack。

1.      count: 该属性是一个可选属性,该属性指定生成集合元素的总数。

2.      separator: 必选属性,是定解析字符串的分隔符。

3.      val : 必填属性,指定被解析的字符串。

4.      converter: 可选属性,该属性指定一个转换器,该转换器负责将集合中的每个字符串转换成对象,通过该转换器可以将一个字符串解析成对象集合。该属性值必须是一个org.apache.Struts 2.util.IteratorGenerator.Converter对象。

5.      var: 可选属性,如果指定了该属性,则将生成的Iterator对象放入StackContext中(并且还会设置为request范围的属性)。

merge标签

merge类似append标签,不过merge拼接顺序和append不同。

subset标签

subset标签用于取得集合的子集,该标签的底层是通过org.apache.struts2.util.Subset IteratorFilter 类实现。

有如下几个属性:

1.      count:可选属性,指定子集中元素的个数。如果不指定该属性,则默认取得源集合的全部元素。

2.      source:可选属性,指定源集合,如果不指定该集合,则默认取得ValueStack栈顶的集合。

3.      start: 可选属性,指定子集从源集合的第几个元素开始截取。默认从第一个元素(默认值为0)

4.      decider:这是一个可选属性,该属性指定由开发者自己决定是否选中该元素。该属性必须指定一个org.apache.struts2.util.SubsetIteratorFilter.Decider 对象。

5.      var :可选属性,如果指定了该属性,则Iterator对象设置成page范围的属性,不放入StackContext中,和gererator不同。

在subset标签内时,subset标签生成的子集合放在ValueStack的栈顶,我们可以在该标签内直接迭代该标签生成的子集合。标签结束后,则子集合被移出ValueStack栈。

Struts2 允许开发者决定截取标准,需要实现Decider类,Decider类需要实现SubsetIteratorFilter.Decider接口,实现该类时,需要实现一个 Boolean decide(Object element)方法,如果该方法为真,则表明该元素将被选入子集中。

public class MyDecider implements SubsetIteratorFilter.Decider{//实现Decider接口必须实现的decide方法,//该方法决定集合中的元素是否被选入子集public boolean decide(Object element) throws Exception{String str = (String)element;//如果集合元素(字符串)中包含Java EE子串,即可被选入子集return str.indexOf("Java EE") > 0;}}
使用自定义过滤规则

<!-- 定义一个Decider Bean --><s:bean var="mydecider" name="org.crazyit.app.util.MyDecider"/><!-- 使用自定义的Decider实例来截取目标集合,生成子集指定var属性,将生成的Itertor放入pageScope中 --><s:subset source="{'疯狂Java讲义','轻量级Java EE企业应用实战','经典Java EE企业应用实战','疯狂Ajax讲义','疯狂XML讲义'}" 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">style="background-color:#bbbbbb"</s:if>><td><s:property/></td></tr></s:iterator></table>

sort标签

sort标签对指定集合进行排序,必须提供自己的排序规则,实现自己的Comparator,自己的Comparator需要实现java.util.Comparator接口

sort标签可指定如下几个属性:

1.      comparator: 必选属性,该属性指定进行排序的Comparator实例。

2.      source:可选属性,指定被排序的集合。如果不指定该属性,则对ValueStack栈顶的集合排序。

3.      var : 可选属性,如果指定了该属性,则将生成的Iterator对象设置成page范围的属性,不放入StackContext中。

在sort标签内时,sort标签生成的子集合放在ValueStack的栈顶,可以在该标签内直接迭代输出子集合,该标签结束,则集合将被移出ValueStack栈。

例:

我们自己实现的排序规则类

public class MyComparator implements Comparator{//决定两个元素大小的方法public int compare(Object element1, Object element2){//根据元素字符串长度来决定大小return element1.toString().length()- element2.toString().length();}}
compare方法返回一个大于0的整数,则第一个元素大于第二个元素,如果该方法返回0,则两个元素相等,如果返回小于0的整数,则第一个元素小于第二个元素。

<s:bean var="mycomparator" name="org.crazyit.app.util.MyComparator"/><!-- 使用自定义的排序规则对目标集合进行排序 --><s:sort source="{'今晚','今','今晚打老虎','今晚打','今晚打老'}" comparator="#mycomparator"var="sortedList"/>输出page范围的sortedList属性:<br/>${pageScope.sortedList}<table border="1" width="300"><!-- 迭代page范围内的sortedList属性 --><s:iterator status="st" value="#attr.sortedList"><tr <s:if test="#st.odd">style="background-color:#bbbbbb"</s:if>><td><s:property/></td></tr></s:iterator>

数据标签

数据标签主要用于提供各种数据访问相关的功能,主要包含如下:

action:该标签用于在JSP页面直接调用一个Action,通过指定executeResult参数,还可将该Action的处理结果包含到本页面中来。

bean:该标签用于创建一个JavaBean实例,如果指定了var属性,则可以将创建的JavaBean实例放入StackContext中。

date:用于格式化输出一个日期。

debug:用于在页面生成一个调试链接,单击该链接,可以看到当前ValueStack 和 StackContext中的内容。

i18n:用于指定国际化资源文件中的baseName。

include:用于在JSP页面中包含其他的JSP或Servlet资源。

param:用于设置一个参数,通常是用做bean标签、url标签的子标签。

push:用于将某个值放入ValueStack的栈顶。

set:用于设置一个新变量,并可以将新变量放入指定的范围内。

text:用于输出国际化消息。

url:用于生成一个URL地址

property:用于输出某个值,包括 ValueStack、StackContext 和ActionContext中的值。

action标签

使用action标签允许JSP页面直接调用Action,使用Action有如下几个属性。

1.      var : 这是一个可选属性,一旦定义了该属性,则Action将被放入ValueStack中。

2.      name : 这是一个必填属性,通过该属性指定调用哪个Action。

3.      namespace: 可选属性,指定调用Action所在的namespace。

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

5.      ignoreContextparams : 可选属性,指定页面的请求参数是否允许传入调用的Action,默认允许传入。

例:

TagAction.java

public class TagAction extends ActionSupport{//封装用户请求参数的author属性private String author;//定义第一个处理逻辑public String execute() throws Exception{return "done";}//定义第二个处理逻辑public String login() throws Exception{ActionContext.getContext().put("author", getAuthor());return "done";}}
配置struts.xml

<package name="lee" extends="struts-default"><!-- 定义第一个Action,使用TagAction的execute方法作为控制处理逻辑 --><action name="tag1" class="org.crazyit.app.util.TagAction"><result name="done">succ.jsp</result></action><!-- 定义第二个Action,使用TagAction的login方法作为控制处理逻辑 --><action name="tag2" class="org.crazyit.app.util.TagAction"method="login"><result name="done">loginSucc.jsp</result></action><action name=""><result>.</result></action></package>
使用Action标签调用aciton

下面调用第一个Action,并将结果包含到本页面中。<br/><s:action name="tag1" executeResult="true"/><hr/>下面调用第二个Action,并将结果包含到本页面中。<br/>但阻止本页面请求参数传入Action。<br/><s:action name="tag2" executeResult="true"ignoreContextParams="true"/><hr/>下面调用第三个Action,且并不将结果包含到本页面中。<br/><s:action name="tag2" executeResult="false"/>本页面是否可访问?<s:property value="author"/>

在浏览器输出地址并传入 author参数

http://localhost:8080/Struts_Demo4/s-action.jsp?author='xiaoming'


bean标签

bean标签可以创建一个JavaBean实例。可以为该标签体内使用<param…/>标签为该JavaBean实例传入属性,需要为JavaBean类提供对应的setter方法。

bean标签有如下两个属性:

1.      name:必选属性,指定要实例化的JavaBean的实现类。

2.      var:该属性是一个可选属性,如果指定了该属性,则JavaBean实例会被放入StackContext中,并放入requestScope中。

例:Person.java javabean类

public class Person{private String name;private int age;    …}
使用bean标签
<s:bean name="com.meng.dto.Person"><!-- 使用param标签为Person类的实例传入参数 --><s:param name="name" value="'li'"/><s:param name="age" value="25"/><!-- 因为在bean标签内,Person实例位于ValueStack的栈顶,故可以直接访问lee.Person实例 -->Person实例的name为:<s:property value="name"/><br/>Person实例的age为:<s:property value="age"/></s:bean>
使用bean标签,并使用var属性,在StackContext中访问

<!-- 使用bean标签创建一个Person类的实例,为其指定了var属性 --><s:bean name="com.meng.dao.Person" var="p"><!-- 使用param标签为Person类的实例传入参数 --><s:param name="name" value="'li'"/><s:param name="age" value="29"/></s:bean><!-- 根据JavaBean实例指定的var属性来访问JavaBean实例 -->Person实例的name为:<s:property value="#p.name"/><br/>Person实例的age为:<s:property value="#p.age"/><br/>${requestScope.p}

date标签

date标签用于格式化输出一个日期。还可以计算指定日期和当前时刻之间的时差。

date标签有如下几个属性:

1.      format:可选属性,根据该属性指定的格式来格式化日期。

2.      nice:可选属性,只能为true或false,用于指定是否输出指定日期和当前时刻之间的时差。默认为false。

3.      name 必填属性,用于指定需要格式化的日期。

var: 可选属性,如果指定了该属性,格式化后的字符串将被放入Stack Context中,并放入requestScope中,但不会在页面输出。

<s:bean var="now" name="java.util.Date"/>nice="false",且指定format="dd/MM/yyyy"<br/><s:date name="#now" format="dd/MM/yyyy" nice="false"/><hr/>nice="true",且指定format="dd/MM/yyyy"<br/><s:date name="#now" format="dd/MM/yyyy" nice="true"/><hr/>指定nice="true"<br/><s:date name="#now" nice="true" /><hr/>nice="false",且没有指定format属性<br/><s:date name="#now" nice="false"/><hr/>nice="false",没有指定format属性,指定了var<br/><s:date name="#now" nice="false" var="abc"/><hr/>${requestScope.abc} <s:property value="#abc"/>

输出结果:


include标签

include标签用于将一个JSP页面,或者一个Servlet包含到本页面中。该标签有如下属性:

1.      value :必选属性,该属性指定需要被包含的JSP页面,或者Servlet。

使用include标签

<!-- 使用include标签来包含其他页面 --><s:include value="included-file.jsp"/><!-- 使用include标签来包含其他页面,并且传入参数 --><s:include value="included-file.jsp"><s:param name="author" value="'li'"/></s:include>
include-file.jsp

<h3>被包含的页面</h3>author参数值为:${param.author}

使用 <s:param../>可以向被包含的页面传输参数。

push标签

push标签用于将某个值放到ValueStack的栈顶。其属性为:

value: 必填属性,指定需要放到ValueStack栈顶的值。
<head><title>使用s:push来将某个值放入ValueStack的栈顶</title></head><body><h2>使用s:push来将某个值放入ValueStack的栈顶</h2><!-- 使用bean标签创建一个JavaBean实例,指定var属性,并将其放入Stack Context中 --><s:bean name="com.meng.dao.Person" var="p"><s:param name="name" value="'li'"/><s:param name="age" value="25"/></s:bean><!-- 将Stack Context中的p对象放入ValueStack栈顶--><s:push value="#p"><!-- 输出ValueStack栈顶对象的name和age属性 -->ValueStack栈顶对象的name属性:<s:property value="name"/><br/>ValueStack栈顶对象的age属性:<s:property value="age"/><br/></s:push></body>

set标签

set 标签用于将某个值放入指定范围内,如application范围,session范围。

当某个值所在对象图深度非常深时如animal.type.deatil.age,每次访问该值性能低下,可读性也不好,所以我们可以把它设置为一个新值,放入指定的范围里。

set标签有如下属性:

1.      scope: 可选属性,指定变量被放置的位置,可接受applicationsession  request page action 5个值,默认为action。

2.      value: 可选属性,指定将覆盖变量的值,如果不指定,则将ValueStack栈顶的值赋给变量。

3.      var:可选属性,如果指定了该属性,则会把该值放入ValueStack中。

如果指定action范围,则该值将要被放入request范围中,并放入OGNL的StackContext中。

例:

<body><h2>使用s:set设置一个新变量</h2><!-- 使用bean标签定义一个JavaBean实例 --><s:bean name="com.meng.dao.Person" id="p"><s:param name="name" value="'li'"/><s:param name="age" value="25"/></s:bean>将Stack Context中的p值放入默认范围(action)内。<br/><s:set value="#p" name="xxx"/>Stack Context内xxx对象的name属性:<s:property value="#xxx.name"/><br/>Stack Context内xxx对象的age属性:<s:property value="#xxx.age"/><br/>request范围的xxx对象的name属性:${requestScope.xxx.name}<br/>request范围的xxx对象的age属性:${requestScope.xxx.age}<hr/>将Stack Context中的p值放入application范围内。<br/><s:set value="#p" name="yyy" scope="application"/>application范围的yyy对象的name属性:${applicationScope.yyy.name}<br/>application范围的yyy对象的age属性:${applicationScope.yyy.age}<hr/>将Stack Context中的p值放入session范围内。<br/><s:set value="#p" name="zzz" scope="session"/>session范围的zzz对象的name属性:${sessionScope.zzz.name}<br/>session范围的zzz对象的age属性:${sessionScope.zzz.age}</body>

url标签

url标签用于生成一个URL地址,可以通过为url标签指定param子元素,从而向指定URL发送请求参数,该标签有如下属性。

1.      action:可选属性,指定生成URL的地址为那个Action,如果Action不提供,使用value作为URL的地址值。

2.      anchor:可选属性,指定URL的锚点。

3.      encode:可选属性,指定是否需要对参数进行编码,默认是true。

4.      forceAddSchemeHostAndPort : 可选属性,指定是否需要在URL对应的地址里强制添加schema、主机和端口。

5.      includeContext:可选属性,指定是否需要将当前上下文包含在URL地址中。

6.      includeParams:可选属性,该属性指定是否包含请求参数,该属性的属性值只能为none、get或者all。默认为get。

7.      method:可选属性,该属性指定Action的方法,当我们用Action来生成URL时,如果指定了该属性,则URL将链接到指定Action的特定方法。

8.      namespace:可选属性,指定命名空间,当用Action来生成URL时,如果指定了该属性,则URL将链接到此namespace的指定Action处。

9.      portletMode:可选属性,指定结果页面的portlet模式。

10.  scheme:可选属性,用于设置scheme属性。

11.  value:可选属性,指定生成URL的地址值,如果value不提供就用action属性指定的Action作为URL地址。

12.  var:可选属性,如果指定了该属性,会把该链接值放入Struts2的ValueStack中。该属性可用id替换

13.  windowState:可选属性,指定结果页面的portlet的窗口状态。

 

property标签

property标签用于输出value属性指定值,如果没有指定value属性,则默认输出ValueStack栈顶的值。该标签有如下属性。

default:可选属性,如果需要输出的属性值为null,则显示default属性默认的值。

escape:可选属性,指定是否escapeHTML代码。默认是true。

value:可选属性,指定需要输出的属性值,如果没有指定该属性,则默认输出ValueStack栈顶的值。

 

主题和模板

模板是UI标签的外在表现形式,把一系列的模板组织起来叫做主题。

设置主题的方法有如下几种:

1.      通过设置UI标签上的theme属性指定主题。

2.      通过设定特定UI标签外围的Form标签的theme来指定主题。

3.      通过取得page会话范围内命名为theme的属性来确定主题。

4.      通过取得request会话范围内命名为theme的属性来确定主题。

5.      通过取得session会话范围内命名为theme的属性来确定主题。

6.      通过取得application会话范围内命名为theme的属性来确定主题。

7.      通过设置名为 struts.ui.theme的常量(默认是xhtml)来确定默认主题,该常量可以在struts.properties或 struts.xml中确定。

以上方式优先级由高到低。

Struts2de模板目录是通过struts.ui.templateDir常量来指定的,该常量的默认值是template。struts2 会从web应用的template目录、CLASSPATH(包括Web应用的WEB-INF/classes路径和WEB-INF/lib路径)的template目录来依次加载特定模板文件。

 

表单标签

 

struts2表单标签可分为两种:form标签和单个表单元素标签。

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

模板相关属性

         JavaScript相关属性

         通用属性

除这三个属性外,所有表单元素标签都存在一个特殊的属性:form,这个属性引用表单元素所在的表单,通过该form属性,可以实现表单匀速和表单之间的交互,可通过${parameters.form.id}来取得所在表单的id。

模板相关属性

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

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

template: 指定该表单蟾宫的模板。

Javascript相关通用属性

onclick: 指定鼠标单击触发的函数。

ondbclick : 指定鼠标双击时触发的函数。

onmousedown: 指定鼠标在标签上按下时触发的函数

onmouseup: 指定鼠标松开时触发的函数。

onmouseover : 指定鼠标悬停时触发的函数。

onmouseout: 指定鼠标移出标签时触发的函数。

onfocus: 指定标签得到焦点时触发的函数。

onblur: 指定标签失去焦点时触发的函数。

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

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

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

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

onchange: 对于文本框等,指定当值改变时触发的函数。

 

Struts 2允许为表单元素设置提示,当鼠标在这些元素上悬停时,系统将出现提示。与Tooltip相关的通用属性如下:

tooltip :设置此组件的Tooltip

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

tooltipAboveMousePointer: 是否在光标位置上显示Tooltip。

tooltipBgColor: 设置Tooltip 的背景色。

tooltipBgImg : 设置Tooltip的背景图片。

tooltipBorderWidth: 设置Tooltip边框宽度。

tootipBorderColor : 设置Tooltip边框颜色。

tooltipDelay : 设置显示Tooltip的时间延迟。

tooltipFixCoordinateX: 设置固定Tooltip在指定的X坐标上,与tooltipSticky 属性结合使用

tooltipFixCoordinateY: 设置固定Tooltip在指定的Y坐标上,与tooltipSticky 属性结合使用

tooltipFontColor : 设置Tooltip 的字体颜色。

tooltipFontFace : 设置Tooltip的字体。

tooltipFontSize: 设置Tooltip的字体大小。

tooltipFontWeight: 设置Tooltip是否使用粗体。

tooltipLeftOfMousePointer: 设置在光标左侧显示Tooltip,默认为右侧。

tooltipOffsetX: 设置Tooltip相对光标位置的水平位移。

tooltipOffsetY: 设置Tooltip 相对光标位置的垂直位移。

tooltipOpacity : 设置Tooltip的透明度,可以是0(完全透明)到100(不透明)之间的数字。

tooltipPadding: 指定Tooltip的内部间隔。边框和内容之间的距离。

tooltipShadowColor: 使用指定的颜色为Tooltip创建阴影。

tooltipShadowWidth: 使用指定的宽度为Tooltip创建阴影。

tooltipStatic: 设置 Tooltip是否随着光标的移动而移动。

tooltipSticky: 设置Tooltip是否一直停留在它初识的位置,直到另一个Tooltip被激活,或点击了HTML页面。

tooltipStayAppearTime: 指定一个Tooltip消失的时间间隔。

tooltipTextAlign: 设置Tooltip 的标题和内容的对齐方式,可以是right、left、justify(居中对齐)

tooltipTitle: 设置Tooltip的标题文字。

tooltipTitleColor: 设置Tooltip的标题文字颜色。

tooltipWidth: 设置Tooltip的宽度。

 

其他通用属性        

cssClass : 设置该表单元素的class属性。

cssStyle: 设置表单的style属性,使用内联CSS样式。

title:设置表单元素的title属性。

disabled: 设置表单元素的disabled属性。

label : 设置表单元素的label属性

labelPosition : 设置表单元素的label所在位置,可设置为 top和left,默认是左边。

requiredposition: 定义必填标记(默认以“*” 作为必填标记)位于label元素的位置,可以是left和right,默认是右边。

name: 定义表单元素的name属性,该属性值用于与Action的属性形成对应。

required: 定义是否在表单元素的label上增加必填标记,设置为true是必填,默认是“*”

tabIndex : 设置表单元素tabindex 属性

value : 设置表单元素value属性

 

checkboxlist标签

checkboxlist 可以一次创建多个复选框,它有如下属性

list: 指定生成多选框的集合。

listkey : 指定集合元素中的某个属性(如person实例的name属性)作为复选框的value。如果集合时Map,则可以使用key和value值来指定复选框的value。

listValue : 同上,指定复选框的标签。

doubleselect标签

list  listKey listValue doubleList  doubleListKey doubleListValue 用法同 checkboxlist标签

doubleName : 指定第二个下拉列表框的name属性。

使用doubleselect标签时,必须放在<s:form …/>标签中使用,且必须为该<s:form …/>标签指定action属性。还需要在 struts.xml 中配置action

<action name=”*”>

    <result>/{1}.jsp</result>

</action>

head标签

生成HTML的HEAD部分。一般使用Struts2的UI标签、JavaScript客户端校验等需要JavaScript库和CSS支持功能时,都应该先使用head标签。

optiontransferselect标签

生成两个列表选择框,并可以控制各个选项在两个列表项之间的移动、升降,当提交时两个选择框的参数都会被提交。

addAllToLeftLabel: 设置全部移动到左边按钮上的文本。

addAllToRightLabel:设置全部移动到右边按钮上的文本。

addToLeftLabel: 设置向左移动按钮上的文本。

addToRightLabel : 设置向右移动按钮上的文本。

allowAddAllToLeft: 设置是否出现全部移动到左边的按钮。

allowAddAllToRight: 设置是否出现全部移动到右边的按钮。

allowAddToLeft: 设置是否出现移动到左边的按钮。

allowAddToRight: 设置是否出现移动到右边的按钮。

leftTitle: 设置左边列表框的标题。

rightTitle: 设置右边列表框的标题。

allowSelectAll: 设置是否出现全部选择按钮。

selectAllLabel: 设置全部选择按钮上的文本。

doubleList: 设置用于创建第二个下拉选择框的集合。

doubleListKey: 设置创建第二个下拉选择框选项的value属性。

doubleListValue: 设置创建第二个下拉选择框的选项label属性。

doubleName: 设置第二个下拉选择框的name属性,必填属性。

doubleValue:设置第二个下拉选择框的value属性。

doubleMultiple: 设置第二个下拉选择框是否允许多选。

list: 设置用于创建第一个下拉选择框的集合。必填属性。

listKey: 设置创建第一个下拉选择框的选项value的属性。

listValue: 设置第一个下拉选择框的选项的label属性。

name:设置第一个下拉选择框的name属性。

value: 设置第一个下拉选择框的value属性。

multiple: 设置第一个下拉选择框是否允许多选。

select

生成一个下拉列表框,使用该标签必须指定list属性。list属性指定的集合,可以是普通集合,也可以是Map对象。常用属性:

listKey:指定value值。

listValue: 指定标签值。

multiple: 设置是否允许多选。

radio

radio标签与checkboxlist用法几乎完全相同,一样可以指定label、list、listKey和listValue等属性。radio生成多个单选按钮。

optgroup

optgroup 用于生成一个下拉列表框的选项组,因此该标签必须放在<s:select …/>标签中使用。一个下拉列表框中可包含多个选项组,因此可以在一个<s:select…/>标签中使用多个<s:optgroup…/>标签。除了list listKey listValue等属性外, optgroup还有label属性,该属性是选项组的组名。

token

token标签能阻止多次提交表单的问题(避免刷新页面导致的多次提交)。如果需要改标签起作用,还需要在Struts2的配置文件中启用TokenInterceptor拦截器或TokenSessionStoreInterceptor拦截器。该标签无须指定任何属性。

默认情况下,token标签生成的隐藏域的name为struts.token 因此,不要在表单中另外再定义一个名为struts.token的表单域。

<!—每次生成不同的值来组织重复提交-- >

<input type=”hidden” name=”struts.token” value=”adfdafjldfjadklfggadfd”/>

updownselect

该标签类似于select标签的用法,区别是该标签生成的列表框可以上下移动选项。除了list listKey listValeu 它还支持如下几个属性。

allowMoveUp: 是否显示上移按钮,默认是true

allowMoveDown: 是否显示下移按钮,默认是true

allowSelectAll: 是否显示全选按钮,默认是true

moveUpLabel: 设置上移按钮上的文本,默认^符号

moveDownLable: 设置下移按钮上的文本,默认v符号

selectAllLabel: 设置全选按钮上的文本,默认是*符号。

 

非表单标签

actionerror 和 actionmessage

这两个标签用法完全一样,作用也几乎完全一样,都是负责输出Action实例里封装的消息;区别是一个输出 getActionErrors()信息,一个输出getActionMessage()信息。

component

component 标签可用于创建自定义视图组件,如果开发者需要经常使用某个效果片段,可以考虑吧这个效果片段做成一个视图组件,然后在页面中使用component标签来使用该自定义组件。使用component标签时,可以指定如下三个属性。

theme: 自定义组件所使用的主题,如果不指定,默认xhtml主题。

templateDir: 指定自定义组件的主题目录,如果不指定,则默认使用系统的主题目录 template目录。

template: 指定自定义组件所使用的模板。

component标签内可以使用param子标签,子标签向该标签模板中传入额外的参数。如果希望在模板中取得该参数,则可以用 $parameters.paramName 或者 $parameters[‘paramName’]形式。


Demo 地址 




















原创粉丝点击