【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.javapublic 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 地址
- 【Struts2】Struts2学习(4)Struts2标签库
- (Struts2学习篇)Struts2标签库(表单标签)
- struts2学习---struts2常用标签(上)
- Struts2系统学习(17)Struts2标签库详解
- struts2标签库()
- struts2--struts2标签库(部分)
- struts2学习之---标签库
- struts2标签学习
- struts2标签学习笔记
- struts2标签学习笔记
- Struts2标签学习笔记
- struts2标签学习
- Struts2标签学习
- struts2标签学习笔记
- struts2标签学习
- struts2标签学习
- struts2重要标签学习
- struts2重要标签学习
- 计算广告学习笔记2.3 合约广告系统-在线分配(Online Allocation)
- android设备常用屏幕参数
- vbs定时执行
- *args 和 **kwargs 来调用函数
- 奇异值分解(SVD)原理与在降维中的作用
- 【Struts2】Struts2学习(4)Struts2标签库
- VM中Ubuntu16.04设置静态IP
- 守护进程
- Spring Cloud 中的断路器 hystrix
- python小工具___检查文件名是否规范
- 计算广告学习笔记2.4 合约广告系统-Hadoop
- Android NFC开发-实践篇
- 五、Spring Cloud
- 遍历文件夹下指定的文件类型