第八节:Struts2-标签库

本文详细介绍了Struts2标签库的使用方法,包括标签库的定义、导入、标签分类、OGNL表达式、控制标签、数据标签、表单标签以及非表单标签等内容。此外,还讲解了标签库的GONL特性、Lambda表达式的使用、集合操作、数据访问功能等。通过实例展示了如何在实际项目中应用Struts2标签库,提升开发效率。

一。标签库介绍

支持开发自定义标签

标签中支持: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(λ)表达式

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>	


6.sort标签

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的上下文

等等




































































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值