先看一下Struts2标签的分类吧。然后分类总结一下即可。
由于控制标签用的比较多,所以放在了前边。好首先看一下控制标签吧。
一、控制标签,JSTL大家应该都使用过,其实Struts2的控制标签和那个特别像的,主要是对EL表达式满足不了的进行补充使用。这里简单看一下吧:
1. if……elseif……else,用来控制选择输出的标签;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
< span style = "font-size:18px;" >< 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 >
</ span >
|
2.append:用于将多个集合拼接成一个新的集合;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
< span style = "font-size:18px;" >< html xmlns = "http://www.w3.org/1999/xhtml" >
< head >
< title >使用s:append标签拼接集合和Map</ title >
</ head >
< body >
<!-- 使用append将List和Map集合拼接在一起
新集合实际上是Map集合,其名字为newList -->
< s:append var = "newList" >
< s:param value="#{'Java':'ljh',
'C#':'lsz'}" />
< s:param value="#{'0629',
'0404'}" />
</ s:append >
< table border = "1" width = "280" >
<!-- 使用iterator迭代newList集合 -->
< s:iterator value = "#newList" status = "st" >
< tr <s:if test = "#st.odd" >
style="background-color:#bbbbbb"</ s:if >>
< td >< s:property value = "key" /></ td >
< td >< s:property value = "value" /></ td >
</ tr >
</ s:iterator >
</ table >
</ body >
</ html >
</ span >
|
3.generator:是一个字符串解析器,用于将一个字符串解析成一个集合;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
< span style = "font-size:18px;" >< html xmlns = "http://www.w3.org/1999/xhtml" >
< head >
< title >使用s:generator生成集合</ title >
</ head >
< body >
< table border = "1" width = "240" >
<!-- 使用generator标签将指定字符串解析成Iterator集合
在generator标签内,得到的List集合位于ValueStack顶端 -->
< s:generator val="'Java
,C#,
C++'" separator = "," >
<!-- 没有指定迭代哪个集合,直接迭代ValueStack顶端的集合 -->
< s:iterator status = "st" >
< tr <s:if test = "#st.odd" >
style="background-color:#bbbbbb"</ s:if >>
< td >< s:property /></ td >
</ tr >
</ s:iterator >
</ s:generator >
</ table >
</ body >
</ html ></ span >
|
4.iterator:是一个迭代器,用于将集合迭代输出,这个比较使用哈,前边都有,不再举例;
5.merge:也是用于将多个集合拼接成一个新的集合,但是与append不同。append是将集合依次排列进行拼接,merge是第一个集合的第一个,第二个集合的第一个……第一个集合的第二个,第二个集合的第二个……;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
< span style = "font-size:18px;" >< html xmlns = "http://www.w3.org/1999/xhtml" >
< head >
< title >使用s:merge标签迭代Map</ title >
</ head >
< body >
< s:merge id = "newList" >
< s:param value="#{'Java':'ljh',
'C#':'lsz'}" />
< s:param value="#{'0629',
'0404'}" />
</ s:merge >
< table border = "1" width = "320" >
< s:iterator value = "#newList" status = "st" >
< tr <s:if test = "#st.odd" >style="background-color:#bbbbbb"</ s:if >>
< td >< s:property value = "key" /></ td >
< td >< s:property value = "value" /></ td >
</ tr >
</ s:iterator >
</ table >
</ body >
</ html ></ span >
|
6.sort:这个标签用于将集合进行排序;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
< span style = "font-size:18px;" >< html xmlns = "http://www.w3.org/1999/xhtml" >
< head >
< title >使用s:sort对集合元素进行排序</ title >
</ head >
< body >
<!-- 定义一个Comparator实例 -->
< s:bean var = "mycomparator" name = "org.ljh.app.util.MyComparator" />
<!-- 使用自定义的排序规则对目标集合进行排序 -->
< s:sort source="{'Java'
,'C#'
,'C++'
,'Ajax'
,'XML'}"
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 >
</ table >
</ body >
</ html ></ span >
|
1
2
3
4
5
6
7
8
9
10
|
< span style = "font-size:18px;" >public class MyComparator implements Comparator
{
//决定两个元素大小的方法
public int compare(Object element1, Object element2)
{
//根据元素字符串长度来决定大小
return element1.toString().length()
- element2.toString().length();
}
}</ span >
|
7.subset:这个标签用于截取集合的部分元素,形成新的子集合。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
< span style = "font-size:18px;" >< html xmlns = "http://www.w3.org/1999/xhtml" >
< head >
< title >使用s:subset标签截取集合元素</ title >
</ head >
< body >
<!-- 定义一个Decider Bean -->
< s:bean var = "mydecider" name = "org.ljh.app.util.MyDecider" />
<!-- 使用自定义的Decider实例来截取目标集合,生成子集
指定var属性,将生成的Itertor放入pageScope中 -->
< s:subset source = "{<span style=" font-family: SimSun; ">'Java'</ span ></ span >< pre name = "code" class = "html" >< span style = "font-size:18px;" > ,'C#'
,'C++'
,'Ajax'
,'XML'</ span ></ pre >< span style = "font-size:18px;" >}" 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 ></ body ></ html ></ span >
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
< span style = "font-size:18px;" >//用户自定义的Decider类,实现了SubsetIteratorFilter.Decider接口
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") > 0;
}
}</ span >
|
二、数据标签,自我感觉数据标签用的不是很多:
action标签,可以允许在jsp页面中直接调用Action,在调用Action时候,可以指定需要被调用的Action的name和namespace.
如果指定了executeResult参数的属性值为true,该标签会把Action的处理结果(视图资源)包含到本页面中.
使用action标签指定属性有:
id: 可选属性,作为该Action的引用ID
name:必选属性,指定调用Action
namespace:可选属性,指定该标签调用Action所属namespace
executeResult:可选属性,指定是否将Action的处理结果包含到本页面中.默认值为false,不包含.
1
2
3
4
|
< 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中所有信息
id 钙元素的一个引用id
include:讲一个jsp或者servlet包含到当前页面
value 包含的JSP或Servlet。
可以指定多个param子标签传参
param标签:为其它标签提供参数
name设置的参数的名字 (set) value设置的参数的值
用法
①<paramname="color">
②<paramname="color" value=" 'color' "/>
push:将某个值放到值栈的栈顶
value必填:指定放入值栈的栈值!但是只在push标签内,一旦超出,刚刚放入的对象立即被移除
用法:
1
2
3
4
5
|
< 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>
public class TextTagAction extends ActionSupport{} 《topic-21》
url标签用于创建URL地址,定义param附加请求参数
action value 指定生成URL的Action和URL。前一个会附加.action。如果两个都没有则以当前地址为地址值
achor 可选 指定url的锚点
encode 可选 对指定参数进行编码 不支持cookie改写url支持session
escapeamp 是否将&转义为&
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里边的各种标签,这里不再进行赘述
四、非标单标签,主要用于生成一些非表单的可视化元素,例如tab页面,输出HTML页面的树形结构等,当然也用来显示Action里封装的信息。简单介绍一下:
简单看一个componet标签:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
< span style = "font-size:18px;" >< 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 >
</ span >
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。