一。标签库介绍
支持开发自定义标签
标签中支持:OGNL、JSTL、Groovy和Velcity表达式
标签分类:
——》用户界面标签库——》表单标签库
——》非表单标签库
Struts2标签库 ——》非用户界面标签库——》控制标签库
——》数据访问标签库
——》Ajax支持标签库
二。标签库使用
Servlet2.3及之前版本
1.在web.xml文件中增加标签库的定义。
<taglib>
<tablib-url>/struts-tags</tablib-url>
<taglib-location>/WEB-INF/lib/struts2-core-2.0.6.jar</taglib-location>
</taglib>
2.现在JSP中使用taglib编译指令导入标签库,然后才可使用标签。
<%@ taglib prefix="s" uri="/struts-tags" %>
Servlet2.4及以后版本
1.在JSP中使用taglib编译指令导入标签库,然后才可以使用标签。
<%@ taglib prefix="s" uri="/struts-tags" %>
三。标签库的GONL
传统的OGNL只有一个“根”,但Struts2的OGNL包含多个"根"。
OGNL获取值方式
指定目标的模糊搜索方式:根对象.属性.属性;如果未查找到则会继续向下搜索。
OGNL PropertyAccessor(属性访问器)(不指定目标的模糊搜索方式):提供一个属性名称,OGNL从根开始一个一个查找,直到找到为止。
Struts2的OGNL面对的是一个MAP类型的对象,所有值均从MAP对象中获取。
GONL对应的MAP中有一个根对象:ValueStack。 所以要访问ValueStack对象里的属性则:${ValueStack中的属性名}
注意:当系统创建了Action实例后,该Action实例已被保存到ValueStack中,故无需书写#即可访问Action属性。
除了MAP对象之外,Struts2还提供了一些命名对象,这些命名对象与根对象无关,他们只存在与Stack Context(其他存储空间)中,所以访问这些对象时需要使用#前缀来指明。
1.parameters对象:用于访问HTTP请求参数。例如#parameters['属性名']或者#parameters.属性名,用于返回调用HttpServletRequest的getParameter("属性名")方法的返回值。
2.request对象:用于访问HttpServletRequest的属性。例如#request[属性名']或#request.属性名,用于返回调用HttpServletRequest的getAttribute("属性名")方法的返回值。
3.session对象:用于访问HttpSession的属性。例如#session['属性名']或session.属性名,用于返回调用HttpSession的getAttribute("属性名")方法的返回值。
4.application对象:用于访问ServletContext的属性。例如#application['属性名']或#application.属性名,用于返回调用ServletContext的getAttribute("属性名")方法的返回值。
5.attr对象:如果可以访问到,则访问pageContext,富哦则将依次搜索如下对象:HttpServletRequest、HttpSession、ServletContext中的属性。
OGNL中的集合操作
直接生成List类型集合的语法为:
{e1,e2,e3,...}
直接生成MAP类型集合的语法为:
#{key1:value1,key2:value2,...}
对于集合OGNL提供了两个元素符:in和not in,其中in判断某个元素是否在指定集合中;not in 则用于判断某个元素是否不在指定集合中。
<s:if test="'foo' in {'foo','bar'}">
包含
</s:if>
<s:else>
不包含
</s:else>
<s:if test="'foo' not in {'foo','ber'}">
不包含
</s:if>
<s:else>
包含
</s:else>
注意:以上标签需要通过action流程后才能在JSP页面中展现。但form表单标签却不需要。
原始:
在login.jsp页面中编写<s:if>标签功能,通过浏览器xxxxx.login.jsp地址访问,会报异常。
改为:
在login.jsp页面中编写<s:if>标签功能,通过浏览器xxxx.showLogin.action地址访问,由action跳转到login.jsp页面后。显示正常。
OGNL为集合提供的三个操作符
?:取出所有符合选择逻辑的元素。
^:取出符合选择逻辑的第一个元素。
$:取出符合选择逻辑的最后一个元素。
实例:
person.relatives.{? #this.gender == 'male'}
在上面代码中,直接在集合后紧跟.{}运算符表明用于取出该集合(relatives)的子集,在{}内使用?表明取出所有符合选择逻辑的元素,而#this代表集合里的元素。因此上面代码的含义是:取出person对象的relatives属性集合内gender属性等于male的对象集合。
OGNL支持基本的Lambda表达式语法,通过这种Lambda表达式语法,可以让我们在OGNL表达式中使用一些简单的函数。
假设有如下斐波那契数列
函数定义
if n==0
return 0;
elseif n==1
return 1;
else
return fib(n-2)+fib(n-1);
函数运行结果
fid(0)=0
fid(1)=1
fid(11)=89
我们可以使用如下的OGNL表达式来求该数列中第11个元素的值:
<s:property value="#fid=:[#this==0?0 : #this==1?1:#fid(#this-2)+#fid(#this-1)],#fid(11)"/>
在上面代码中,#fid=:[#this==0?0 : #this==1?1:#fid(#this-2)+#fid(#this-1)],#fid(11) 表示定义了一个简单函数,value等于是#fid(11)的值。
注意:以上代码未测试过,知是否可行。
五。Struts2控制标签类
用于完成流程控制,以及对ValueStack的控制。包含如下9个:
if:用于控制选择输出的标签。
elseIf/elseif:与if标签结合使用,用于控制选择输出的标签。
else:与if标签结合使用,用于控制选择输出的标签。
append:用于将多个集合拼接成一个新的集合。
generator:它是一个字符串解析器,用于将一个字符串解析成一个集合。
iterator:这是一个迭代器,用于将集合迭代输出。
merge:用于将多个集合拼接成一个新的集合。但与append的拼接方式有所不同。
sort:这个标签用于对集合进行排序。
subset:这个标签用于截取集合的部分元素,形成新的集合。
各标签说明:
1.if/elseif/else标签:
与java的功能相同
实例
<!-- 定义了一个名为age的属性,其属性值为29 -->
<s:set name="age" value="29"></s:set>
<!-- 使用if/elseif/else 标签组合来控制输出 -->
<s:if test="age > 60">
老年人
</s:if>
<s:elseif test="age > 35">
成年
</s:elseif>
<s:else>
少年
</s:else>
2.iterator标签
对集合List、Set和数组,也可以对Map类型的对象进行迭代输出。
属性说明
value:这是一个可选的属性,value属性指定的就是被迭代的集合,被迭代的集合通常都使用OGNL表达式指定。如果没有指定value属性,则使用ValueStack栈顶的集合。
id:这是一个可选的属性,该属性指定了集合里元素的ID。在迭代过程中通过该ID访问集合内元素。
status:这是一个可选的属性,该属性指定迭代时的IteratorStatus实例。通过该实例即可判断当前迭代元素的属性例如是否重是最后一个,以及当前迭代元素的索引等。
IteratorStatus实例方法说明
int getCount():返回当前迭代了几个元素。
int getIndex():返回当前迭代元素的索引。
boolean isEven();返回当前被迭代元素的索引是否是偶数。
boolean isFirst();返回当前被迭代元素是否是第一个元素。
boolean isLast():返回当前被迭代元素是否是最后一个元素。
boolean isOdd();返回当前被迭代元素的索引是否是奇数。
实例:迭代List、Set、数组
<s:iterator value="{'1','2','3'}" id="index2">
<s:property value="#index2"/>
</s:iterator>
实例:迭代MAP
<s:iterator value="#{'no1':'1','no2':'2','no3':'3'}" id="index2">
<s:property value="#index2.value"/>
<s:property value="#index2.key"/>
or
<s:property value="value"/>
<s:property value="key"/>
</s:iterator>
3.append标签
append标签用于将多个集合对象拼接起来,组成一个新的集合。通过这种拼接,从而允许通过一个<s:iterator.../>标签就完成对多个集合的迭代.
使用<s:append .../>标签时需要指定一个id属性,该属性确定拼接生成的新集合的名称。除此之外,<s:append.../>标签可以接受多个<s:param.../>子标签,每个子标签指定一个集合。<s:append.../>标签负责将<s:param.../>标签指定的多个集合拼接成一个集合。
实例:List、set、数组类型集合拼接及输出
<s:append id="myList">
<s:param value="{'a','b'}"></s:param>
<s:param value="{'c','d'}"></s:param>
</s:append>
<hr/>
<s:iterator value="#myList" id="index2">
<s:property value="this.value"/>
<s:property value="#index2"/>
</s:iterator>
实例:List与Map拼接
<s:append id="myList">
<s:param value="#{'a':'a','b':'b'}"></s:param>
<s:param value="#{'c','d'}"></s:param>
</s:append>
<hr/>
<s:iterator value="#myList" id="index2">
<s:property value="this.value"/>
<s:property value="#index2"/>
</s:iterator>
输出结果
a=ab=bc=nulld=null
将List集合转成MAP集合,key是List的值,value是null
3.generator标签
使用generator标签可以将指定字符串按指定分隔符分割成多个子串,临时生成的多个子串可以使用iterator标签来迭代输出。在该标签体内,整个临时生成的集合将位于ValueStack的顶端,但一旦该标签结束,该集合将被移除ValueStack。
属性说明:
count:该属性是一个可选的属性,该属性指定生成集合中元素的总数。
separator:这是一个必填的属性,该属性指定用于解析字符串的分隔符。
val:这是一个必填的属性,该属性指定被解析的字符串。
converter:这是一个可选的属性,该属性指定一个转换器,该转换器负责将集合中的每个字符串转换成对象。
id:这是一个可选的属性,如果指定了该属性,则将生成的集合放在pageContext属性中。取时使用pageContext.getAttribute(id名称)取不到值,需要使用request.getAttribute(id名称)方式取值。
实例;
<body>
<!-- 在generator标签内,该集合位于ValueStack的栈顶,故此处迭代就是临时生成的集合 -->
<s:generator id="myList" separator="," val="'Spring2.0宝典,轻量级J2EE企业应用实战,基于J2EE的Ajax宝典'" >
<s:iterator status="st">
<s:property/><br/>
</s:iterator>
</s:generator>
<hr/>
<hr/>
<br/>方式一输出:<br/>
<s:generator count="2" var="myList" separator="," val="'Spring2.0宝典,轻量级J2EE企业应用实战,基于J2EE的Ajax宝典'" >
<%
org.apache.struts2.util.IteratorGenerator iterator = (org.apache.struts2.util.IteratorGenerator)request.getAttribute("myList");
%>
<%=iterator.getClass().getName() %><br/>
<%
while(iterator.hasNext()){
%>
<%=iterator.next()%><br/>
<%
}
%>
</s:generator>
<br/>方式二输出:<br/>
<hr/>
<%
org.apache.struts2.util.IteratorGenerator iterator2 = (org.apache.struts2.util.IteratorGenerator)request.getAttribute("myList");
iterator2.setCount(6);
%>
<%=iterator2.hasNext() %><br/>
<%
while(iterator2.hasNext()){
%>
<%=iterator2.next()%><br/>
<%
}
%>
</body>
输出结果:(<hr/>标签无法在此页面显示)
Spring2.0宝典
轻量级J2EE企业应用实战
基于J2EE的Ajax宝典
方式一输出:
org.apache.struts2.util.IteratorGenerator
Spring2.0宝典
轻量级J2EE企业应用实战
方式二输出:
true
基于J2EE的Ajax宝典
Spring2.0宝典
轻量级J2EE企业应用实战
基于J2EE的Ajax宝典
注意:当通过generator标签创建了一个集合,实际是创建了一个IteratorGenerator类的对象,该类继承Iterator是个迭代器。迭代器通过next进行迭代且只能迭代一次。如果要多次迭代同一个集合则需要指定count属性。
假如一个集合有10个元素,指定count属性为20,则在迭代过程中会迭代20次,内容是相同的。
第一次迭代时不指定count,第二次执行时指定count=20,则从11开始迭代到20。实现了同一个迭代器多次循环。
4.merge标签
merge标签与apend标签相同,都是将多个集合合并到一起,只是合并的方式不同导致结果集合顺序不同。
区别如下
假设有三个集合且每个集合包含三个元素。
使用append标签合并结果:
第一个集合第一个元素
第一个集合第二个元素
第一个集合第三个元素
第二个集合第一个元素
第二个集合第二个元素
第二个集合第三个元素
第三个集合第一个元素
第三个集合第二个元素
第三个集合第三个元素
使用merge标签合并结果如下
第一个集合第一个元素
第二个集合第一个元素
第三个集合第一个元素
第一个集合第二个元素
第二个集合第二个元素
第三个集合第二个元素
第一个集合第三个元素
第二个集合第三个元素
第三个集合第三个元素
5.subset标签
subset标签用于取得集合的子集,该标签的底层通过org.apache.Struts2.util.SubsetIteratorFilter类提供实现。
在subset标签内时,subset标签生成的子集放在ValueStack的栈顶,如果该标签结束后,该标签生成的子集将被移出ValueStack栈。
属性说明:
count:这是一个可选属性,该属性指定子集中元素的个数。如果不指定该属性,默认取得源集合的全部元素。
source:这是一个可选属性,该属性指定源集合。如果不指定该属性,默认取得ValueStack栈顶的集合。
start:这是一个可选属性,该属性指定子集从源集合的第几个元素开始截取。默认从第一个元素(即start的默认值为0)开始截取。
decider:这是一个可选属性,该属性指定由开发者自己决定是否选中该元素。
实例:普通使用。
<table border="1" width="200">
<!-- 使用subset标签截取目标集合的三个元素,从第一个元素开始截取 -->
<s:subset source="{'Java培训基础','Spring2.0宝典','轻量级J2EE企业应用实战','基于J2EE的Ajax宝典','WebWork实战'}"
start="1" count="3">
<!-- 使用iterator标签来迭代目标集合,因为没有指定value属性值,故迭代ValueStack栈顶的元素 -->
<s:iterator status="st">
<s:property/><br/>
</s:iterator>
</s:subset>
</table>
实例:decider实例
java代码创建decider类
package decider;
import org.apache.struts2.util.SubsetIteratorFilter.Decider;
public class MyDecider implements Decider {
public boolean decide(Object element) throws Exception {
String ment = (String)element;
System.out.println("ment = " + ment + ":" + (ment.indexOf("Java") > 0) );
return ment.indexOf("Java") > 0 ;
}
}
JSP代码使用decider类
<!-- 定义一个Decider实例 -->
<s:bean id="myDecider" name="decider.MyDecider"/>
<table border="1" width="200">
<!-- 使用自定义的Decider实例来截取目标集合,生成子集 -->
<s:subset source="{'1Java培训基础','Spring2.0宝典','轻量级J2EE企业应用实战','基于J2EE的Ajax宝典','WebWork实战'}"
decider="#myDecider">
<s:iterator status="st">
<s:property/><br/>
</s:iterator>
</s:subset>
</table>
sort标签用于对指定的集合元素进行排序,进行排序时,必须提供自己的排序规则,即使实现自己的Comparator,自己的Comparator需要实现java.util.Comparator接口。
属性说明
comparator:这是一个必填的属性,该属性指定进行排序的Comparator实例。
source:这是一个可选的属性,该属性指定被排序的集合。如果不指定该属性,则对ValueStack栈顶的集合进行排序。
在sort标签内时,sort标签生成的子集放在ValueStack的栈顶,如果该标签结束后,该标签生成的子集将被移出ValueStack栈。
实例:
java代码创建Comparator类
package Comparator;
import java.util.Comparator;
public class MyComparator implements Comparator{
public int compare(Object o1, Object o2) {
System.out.println("o1:"+ o1.toString().length() + ":::" + "o2:" + o2.toString().length());
return ((String)o1).length() - ((String)o2).length();
}
JSP代码
<body>
<!-- 定义一个Comparator实例 -->
<s:bean id="myComparator" name="Comparator.MyComparator"/>
<table border="1" width="200">
<!-- 使用自定义的排序规则对目标集合进行排序 -->
<s:sort source="{'轻量级J2EE企业应用实战','基于J2EE的Ajax宝典','Spring2.0宝典'}"
comparator="#myComparator">
<!-- 迭代输出ValueStack栈顶的集合 -->
<s:iterator>
<s:property/><br/>
</s:iterator>
</s:sort>
</table>
</body>
数据标签主要用于提供各种数据访问相关的功能,包含显示一个Action里的属性,以及生成国际化输出等功能。
数据标签主要包含如下几个:
action:该标签用于在JSP页面直接调用一个Action,通过指定executeResult参数,还可将该Action的处理结果包含到本页面中来。
bean;该标签用于创建一个JavaBean实例。如果指定了id属性,则可以将创建的JavaBean实例放入StackContext中。
date:用于格式化输出一个日期。
debug:用于在页面上生成一个调试连接,当单击该连接时,可以看到当前ValueStack和Stack Context中的内容。
i18n:用于指定国际化资源文件的baseName。
include:用于在JSP页面中包含其他的JSP或Servlet资源。
param:用于设置一个参数,通常是用做bean标签、url标签的自标签。
push:用于将某个值放入ValueStack的栈顶。
set:用于设置一个新变量,并可以将新变量放入指定的范围内。
text:用于输出国际化信息。
url:用于生成一个URL地址。
property:用于生成输出某个值,包括输出ValueStack、Stack Context 和 Action Context中的值。
1.action标签
使用action标签可以允许在JSP页面中直接调用Action,因为需要调用Action,故可以指定需要被调用Action的name及namespace。如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果(视图资源)包含到本页面中来。
属性说明:
id:这是一个可选属性,该属性将会作为该Action的引用ID。
name;这是一个必填属性,通过该属性指定该标签调用那个Action。
namespace:这是一个可选属性,该属性指定该标签调用的Action所在的namespace。
executeResult:这是一个可选属性,该属性指定是否要将Action的处理结果页面包含到本页面。该属性值默认值是false,即不包含。
ignoreContextParams:这是一个可选参数,它指定该页面中的请求参数是否需要传入调用的Action。该参数的默认值是false,即将本页面的请求参数传入被调用的Action。
实例:循环嵌套:A页面使用action标签发送请求,请求结果是跳转到A页面。形成了一个循环,通过实际使用效果连续嵌套53次之后停止嵌套。后台打印错误信息。但不知是从那次开始打印的。
2.bean标签
bean标签用于创建一个JavaBean的实例。创造JavaBean实例时,可以在该标签体内使用<param.../>标签为该JavaBean实例传入属性(必须为该类提供set方法)(如果想要获取该bean的某个属性值,则必须实现get方法)。
属性说明:name:该属性是一个必填属性,该属性指定要实例化的JavaBean的实现类。
id:该属性是一个可选属性。如果指定了该属性,则该JavaBean实例会被放入StackContext中(并不是ValueStack),从而允许直接通过给id属性来访问该JavaBean实例。
注意:在bean标签的标签体内时,bean标签创建的JavaBean实例位于ValueStack的顶端;但一但该bean标签结束了,则bean标签创建的JavaBean实例被移除ValueStack,除非指定了id属性。
在bean标签中,使用<s:param name="属性名" value="值" />标签设置JavaBean对象的属性值,其中value的值为OGNL表达式,字符串应使用单引号
<body>
<s:bean name="actionBean.Person" id="person">
<s:param name="name" value="'张三'"></s:param>
<s:param name="age" value="20"></s:param>
</s:bean>
name:<s:property value="#person.name"/>
age:<s:property value="#person.age"/>
</body>
3.date标签
date标签用于格式化输出一个日期。除了可以直接格式化输出一个日期外,date标签还可以计算孩子定日期和当前时刻之间的时差。
属性说明:
format:这是一个可选属性,如果指定了该属性,将根据该属性指定的格式来格式化日期。
nice:这是一个可选属性,该属性只能为true,或者false,他用于指定是否输出指定日期和当前时刻之间的时差。该属性默认值false。
name:这是一个必填属性,该属性指定要格式化的日期值。
id:这是一个可选属性,该属性指定引用该元素的id值。
注意:如果同时指定了nice和format属性,则nice属性生效,format属性失效。
如果既未指定nice和format属性,则系统会到国际化资源文件中查找KEY为struts.date.format的信息,如果查找不到则采用DateFormat.MEDIUM格式输出。
<s:bean name="java.util.Date" id="myDate">
</s:bean>
<s:date format="yyyy-mm" name="#myDate" id="myDateFormat"/>
<s:property value="#myDateFormat"/>
<hr/>
<s:date nice="true" name="#myDate"/>
4.debug标签
debug标签主要用于辅助调试,它在页面上生成一个超级连接,通过该连接可以查看到ValueStack和Stack Context中所有的之信息。
5.include标签
include标签用于将一个JSP页面,或者一个Servlet包含到本页面中。
属性说明:
value:这是一个必填属性,该属性指定需要被包含的JSP页面,或者Servlet。
id:这是一个可选属性,该属性指定该标签的ID引用。
除此之外,还可以为<s:include...、>标签指定多个<param.../>自标签,用于将多个参数值传入被包含的JSP页面或者Servlet。
6.param标签
param标签主要用于为其他标签提供参数。例如为include标签和bean标签提供参数。
属性说明:
name:这是一个可选属性,指定需要设置参数的参数名。
value:这是一个可选属性,指定需要设置参数的参数值。
7.push标签
push标签用于将某个值放到ValueStack的栈顶,从而可以更简单的访问该值。
属性说明:
value:这是一个必填属性,该属性指定需要放到ValueStack栈顶的值。
id:这是一个可选属性,该属性指定引用该标签的ID。
8.set标签
set标签用于将某个值放入指定范围内,例如application范围、session范围等。
属性说明:
name:这是一个必填属性,重新生成的新变量的名字。
scope:这是一个可选属性,指定新变量被放置的范围,该属性可以接受application、session、request、page或action5个值。
如果没有指定属性,则默认放置在StackContext中。
value:这是一个可选属性,指定将赋给变量的值。如果没有指定该属性,则将ValueStack栈顶的值赋给新变量。
id:这是一个可选属性,该属性指定该元素的引用ID。
9.url标签
url标签用于生成一个URL地址,可以通过为url标签指定param子元素,从而向指定URL发送请求参数。
属性说明:
includeParams:这是一个可选属性,该属性指定是否包含请求参数,该属性的属性值只能为none、get
或者all。
scheme:这是一个可选属性,用于设置scheme属性。
value:这是一个可选属性,指定生成URL的地址值,如果value不提供就用action属性指定的Action作为URL
地址。
action:这是一个可选属性,指定生成URL的地址为那个Action,如果Action不提供,就使用value作为URL的地址值。
nameespace:这是一个可选属性,指定使用Action的方法。
encode:这是一个可选属性,指定是否需要encode请求参数。
includeContext:这是一个可选属性,指定是否需要将当前上下文包含在URL地址中。
anchor:这是一个可选属性,指定URL的锚点。
id:这是一个可选属性,指定该URL元素的引用ID。
注意:上面的action属性和value属性的作用大致相同,只是action指定的是一个action,因此系统会自动在action指定的属性后添加.action的后缀。只要指定action和value两个属性其中之一即可,如果两个属性都没有指定,就以当前页面作为URL的地址值。
10.property标签
property标签的作用就是输出指定值。property标签输出value属性指定的值,如果没有指定value属性,则默认输出ValueStack栈顶的值。
属性说明:
default:这是一个可选属性,如果需要输出的属性值为null,则显示的default属性指定的值。
escape:这是一个可选属性,指定是否escapeHTML代码。
value:这是一个可选属性,指定需要输出的属性值,如果没有指定该属性,则默认输出ValueStack栈顶的值。
id:这是一个可选属性,指定该元素的标识。
表单标签
struts的表单标签分为两种:form标签本身和单个表单元素标签。
其中单个表单元素标签之间存在很多通用属性。
通用属性:
模板相关的通用属性:
templateDir:指定该表单所用的模板文件目录。
theme:指定该表单所用的主题。
template:指定该表单所用的模板。
Javascript相关的通用属性
onclick:指定鼠标在该标签生成的表单元素上单击时触发的javascrip函数。
ondbclick:指定鼠标在该标签生成的表单元素上双击时触发的Javascript函数。
onmousedown:指定鼠标在该标签生成的表单元素上按下时触发的Javascript函数。
onmouseup:指定鼠标在该标签生成的表单元素上松开时触发的Javascript函数。
onmouseover:指定鼠标在该标签生成的表单元素上悬停时触发的Javascript函数。
onmouseout:指定鼠标移除该标签生成的表单元素时触发的Javascript函数。
onfocus:指定该标签生成的表单元素得到焦点时触发的函数。
onblur:指定该标签生成的表单元素失去焦点时触发的函数。
onkeypress:指定单击键盘上某个键时触发的函数。
onkeyup:指定松开键盘上某个键时触发的函数。
onkeydown:指定按下键盘上某个键时触发的函数。
onselect:对下拉列表项等可以选择表单元素,指定选中该元素时触发的函数。
onchange:对于文本框等可以接受输入的表单元素,指定当值改变时触发的函数。
因为HTML元素本身的限制,并不是每个HTML元素都可以触发以上的所有函数。因此,上面的属性并不是对struts2的每个标签都有效。
Struts2还允许为表单元素设置提示,当鼠标在这些元素上悬停时,系统将出现提示,Struts2将这种特性称为Tooltip。与Tooltip相关的属性如下:
tooltip:设置此组件的Tooltip。
tooltipIcon:设置Tooltip图标的URL路径。
tooltipAboveMousePointer:是否在光标位置上显示Tooltip。也可通过设置tooltipOffseY属性,设置Tooltip与光标位置的垂直位移。
tooltipBgColor:设置Tooltip的背景色。
tooltipBgImg:设置Tooltip的背景图片。
tooltipBorderWidth:设置Tooltip边框的宽度。
tooltipBorderColor:设置Tooltip边框的颜色。
tooltipFixCoordinateX:设置固定Tooltip在指定X坐标上,与tooltipSticky属性结合时很有用。
tooltipFixCoordinateY:设置固定Tooltip在指定Y坐标上,与tooltipSticky属性结合时很有用。
tooltipFontColor:设置Tooltip的字体颜色。
tooltipFontFace:设置Tooltip的字体。
tooltipFontSize:设置Tooltip的字体大小。
tooltipFontWeight:设置Tooltip的字体是否使用粗体。可以接受normal和bold(粗体)两个值。
tooltipLeftOfMousePointer:设置是否在光标左侧显示Tooltip,默认是在右边显示。
tooltipOffsetX:设置Tooltip相对光标位置的水平位移。
tooltipOffsetY:设置Tooltip相对光标位置的垂直位移。
tooltipOpacity:设置Tooltip的透明度,设置值可以是0(完全透明)和100(不透明)之间的数字。Opera浏览器不支持该属性。
tooltipPadding:指定Tooltip的内部间隔。
tooltipShadowColor:使用指定的颜色为Tooltip创建阴影。
tooltipShadowWidth:使用指定的宽度为Tooltip创建阴影。
tooltipStatic:设置Tooltip是否随着光标的移动而移动。
tooltipSticky:设置Tooltip是否停留在它初始的位置,知道另一个Tooltip被激活,或者浏览器点击了HTML页面。
tooltipStayAppearTime:指定一个Tooltip消失的时间间隔(毫秒),即使鼠标还在相关的HTML元素上不动。设置值《=0,就和没有定义一样。
tooltipTextAlign:设置Tooltip的标题和内容的对齐方式,可以是right(右对齐)、left(左对齐)或justify(居中对其)。
tooltipTitle:设置Tooltip的标题文字。
tooltipTitleColor:设置Tooltip的标题文字的颜色。
tooltipWidth:设置Tooltip的宽度。
CSS相关的属性:
cssClass:设置该表单元素的class属性。
cssStyle:设置该表单元素的style属性,使用内联的CSS样式。
title:设置表单元素title属性。
disabled:设置表单元素的disabled属性。
label:设置表单元素的lable属性。
labelPosition:设置表单元素label所在位置,可接受的值为top(上面)和left(左边),默认是在左边。
requiredposition:定义必填标记(默认以*作为必填标记)位于label元素的位置,可以接受的值为left(左边)和right(右边),默认是右边。
name:定义表单元素的name属性,该属性值用于与Action的属性形成对应。
required:定义是否在表单元素的label上增加必填标记(默认以*作为必填标记),设置为true时增加必填标记,否则不增加。
tabIndex:设置表单元素的tabindex属性。
value:设置表单元素的value属性。
Struts2中特殊标签如下:
checkboxlist标签
checkboxlist标签可以一次创建多个复选框,用于一次生成多个HTML标签中的<input type="checkbox".../>,它根据list属性指定的集合来生成多个复选框。
属性说明:
list:指定的集合来生成多个复选框。
listKey:该属性指定集合元素中的某个属性作为复选框的value。如果集合是MAP,则可以使用key和value值分别代表MAP对象的key和value作为复选框的value。
listValue:该属性指定集合元素中的某个属性作为复选框的标签。如果集合是MAP,则可以使用key和value值分别代表MAP对象的key和value作为复选框的标签。
combobox标签
combobox标签生成一个单行文本框和下拉列表框的组合,但两个表单元素只对应一个请求参数,只有单行文本框里的值才包含请求参数,而下拉列表框则只是用于辅助输入,并没有name属性,也就不会产生请求参数。
属性说明:
list:指定一个list属性,该list属性指定的集合将用于生成列表项。
datetimepicker标签
datetimepicker标签生成一个日期、时间下拉选项框,当我们使用该日期、时间选择框选择某个日期、时间时,系统会自动将选中的日期、时间输入指定文本框。
属性说明:
displayFormat:该属性指定日期的显示格式,例如,可以使用dd/MM/yyyy作为日期格式。
datetimepicker支持如下几个格式符:
#dd:以两位数字来显示当前日期的日。
#d:以一位数字来显示当前日期的日。
#MM:以两位数字来显示当前日期的月。
#M:以一位数字来显示当前日期的月。
#yyyy:以4位数字来显示当前日期的年。
#y;以一位数字来显示当前日期的年的最后一位。
displayWeeks:该属性指定该日历能显示星期数。
endDate:指定日期集的最后可用日期。例如2941-10-12,一旦指定了该日期,则后面的日期不可用。
formatLength:指定日期显示的格式,这些格式值就是DateFormat中的格式,该属性支持的值有long、short、medium和full 4个值。
language:指定日期显示的Locale,例如炫耀指定简体中文,则指定zh_CN。
startDate:指定日期集的最后可用日期。例如1941-10-18,一旦指定该日期,则前面的日期不可用。
toggleDuration:指定日期选择框出现、隐藏的切换时间。
toggleType:指定日期选择框出现、隐藏的方式,可以选择plain、wipe、exploded和fade4个值。
type:指定日期选择框的类型,支持的值有date和time,分别代表日期选择框、时间选择框。
value:指定当前日期、时间。可以使用today来代表今天。
weekStartsOn:指定日期选择框中那一天才是一周的第一天。周日是0,周六是6.
doubleselect标签
doubleselect标签会成成一个级联列表框(会成成两个下拉列表框),当选择第一个下拉列表框时,第二个下拉列表框的内容会随之改变。
属性说明:
list:指定用于输出第一个下拉列表框中选项的集合。
listKey:该属性指定集合元素中的某个属性(例如集合元素为Person实例,指定Person实例的name属性)作为第一个下拉列表框的value。如果集合是MAP,则可以使用key和value值分别代表MAP对象的key和value作为复选框的value。
listValue:该属性指定集合元素中的某个属性作为复选框的标签。
doubleList:指定用于输出第一个下拉列表框中选项的集合。
doubleListKey:该属性指定集合元素中的某个属性作为第一个下拉列表框的value。
doubleListValue:该属性指定集合元素中的某个属性作为第一个下拉列表框的标签。
doubleName:指定第二个下拉列表框的name属性。
注意:使用doubleselect标签时,必须放在<s:form.../>标签中使用,且必须为该<s:form.../>标签指定action属性。
head标签
head标签主要用于生成HTML主要页面的head部分。因为有些主题需要包含特定的CSS和JAVASCRIPT代码,而该标签则用于生成对这些CSS和JAVASCRIPT代码的引用。
optiontransferselect标签
optiontransferselect标签会创建两个选项用来转移下拉列表项,该标签会生成两个<select.../>标签,并且会生成系列的按钮,这系列的按钮可以控制选项在两个下拉列表之间移动、升降。当提交该表单时,两个<select.../>标签的请求参数都会被提交。
属性说明:
addAllToLeftLabel;设置全部移动到左边按钮上的文本。
addAllToRightLabel:设置全部移动到右边按钮上的文本。
addToLeftLabel:设置向左移动按钮上的文本。
addToRightLabel:设置向右移动按钮上的文本。
allowAddAllToLeft:设置是否出现全部移动到左边的按钮。
allowAddAlltoRight:设置是否出现全部移动到右边的按钮。
allowAddToLeft:设置是否出现移动到左边的按钮。
allowAddToRight:设置是否出现移动到右边的按钮。
leftTitle:设置左边列表框的标题。
rigthTitle:设置右边列表框的标题。
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属性指定的集合来生成下拉列表框的选项。
属性说明:
listKey:该属性指定集合元素中的某个属性作为复选框的value。
listValue:该属性指定集合元素中的某个属性作为复选框的标签。
multiple:设置该列表框是否允许多选。
radio标签
该标签的用法与checkboxlist的用法几乎相同。区别在于该标签生成的是单选。
optgroup标签
该标签用于生成一个下拉列表框的选择租。因此,该标签必须放在<s:select.../>标签中使用。
token标签
这是一个用于防止多次提交表单的标签,token标签能解决阻止多次提交表单的问题,如果需要该标签起作用,则应该在Struts2的配置文件中启用TokenInterceptor拦截器或TokenSessionStoreInterceptor拦截器。
实现原理:
实现原理是在表单中增加一个隐藏域,每次加载该页面时,该隐藏域的值都不同。而TokenInterceptor拦截器则拦截所有用于请求,如果两次请求时该token对应隐藏域的值相同,则阻止表单提交。
注意:在默认情况下,token标签生成的隐藏域的name为struts.token。因此不要在表单中另外再定义一个名为struts.token的表单域。
updownselect标签
updownselect标签的用法非常类似于select标签的用法,区别是该标签生成的列表框可以支持选项的上下移动。
属性说明:
拥有与select标签相同的属性。
allowMoveUp:是否显示“上移”按钮,默认是true。
allowMoveDown:是否显示“下移”按钮,默认是true。
moveUpLabel:设置“上移”按钮上的文本,默认是 ^符号。
moveDownLabel;设置“下移”按钮上的文本,默认是 v 符号。
selectAllLabel:设置“全选”按钮上的文本,默认是*符号。
非表单标签
a:生成一个超级连接
actionerror:如果Action实例的getActionErrors()方法返回不为null,则该标签负责输出该方法返回的系列错误。
actionmessage:如果Action实例的getActionMessages()方法返回不为null,则该标签负责输出该方法返回的系列消息。
component:使用此标签可以生成一个自定义组件。
div:此标签负责生成一个div片段。
fielderror:如果Action实例存在表单域的类型转换错误、校验错误、该标签则负责输出这些错误提示。
tabbedPanel:生成HTML页面的Tab页。
tree:生成一个树形结构。
teeenode:生成树形结构的节点。
多个根的顺序
ValueStack
Action的上下文
等等