Struts 2 将所有标签分为以下三类:
UI(用户界面):主要用于生成HTML元素的标签
非UI标签:主要用于数据访问、逻辑控制等的标签
Ajax标签:用于Ajax支持的标签
1、控制标签
1)、if/elseif/else :都是用来进行分支控制的
语法格式为:
<s: if test="表达式">
标签体
</s:if>
<s: elseif test="表达式">
标签体
</s:elseif>
<s: else test="表达式">
标签体
</s:else>
对于上面三个标签的组合使用,只有<s:if.../>可以单独使用。其余两个必须和<s:if.../>配合使用。在这个当中可以与多个<s:elseif.../>标签结合使用。
2)、iterator:用于将List、Map、ArrayList等集合进行循环遍历
迭代输出时,可以指定一下三个属性:
对于上面三个标签的组合使用,只有<s:if.../>可以单独使用。其余两个必须和<s:if.../>配合使用。在这个当中可以与多个<s:elseif.../>标签结合使用。
属性 |
说明 |
value |
value属性指定的是被迭代的集合。如果没有指定value属性,则使用ValueStack栈顶的集合 |
id |
id属性指定集合里元素的ID |
status |
status属性指定迭代的IteratorStatus实例。通过该实例可以判断当前迭代元素的属性 |
3)、append标签:用于将多个集合对象拼接起来,组成一个新的集合。它允许通过一个<iterator.../>标签来完成对多个集合的迭代
该标签需要指定一个var属性,该属性确定拼接生成的新集合的名字。
<s:append.../>可以接受多个<s:param.../>子标签,每个子标签指定一个集合。
4)、generator标签:可以将指定字符串按指定分隔符分隔成多个子串。
该标签有如下属性:
属性 |
说明 |
count |
该属性指定生成集合中元素的总数 |
separator |
该属性指定用于解析字符串的分隔符 |
val |
该属性指定被解析的字符串 |
converter |
该属性指定一个转换器,该转换器负责将集合中的每个字符串转换成对象 |
var |
如果指定了该属性,则将生成的Iterator对象放入StackContext中 |
5)、merge标签:和append标签相似。
假如有两个集合{'abc','def','ghi'} 、{'123','456','789'}
通过append方式拼接,新集合的元素顺序为:
abc def ghi 123 456 789
通过merge方式拼接,新集合的元素顺序为:
abc 123 def 456 ghi 789
6)、subset标签:用于取得集合的子集
该标签有如下属性:
属性 |
说明 |
count |
该属性指定子集合中元素的个数。如果不指定该属性,则默认取得源集合的全部元素 |
source |
该属性指定源集合。如果不指定该属性,则默认取得ValueStack栈顶的集合 |
start |
该属性指定子集从源集合的第几个元素开始截取。默认从第一个 |
decider |
该属性指定由开发者子集决定是否选中该元素 |
var |
如果指定了该属性,则将生成的Iterator对象设置为page范围的属性 |
7)、sort标签:用于对指定的集合元素进行排序。
进行排序时,必须提供自己的排序规则。即实现自己的Comparator。
有如下几个属性:
属性 |
说明 |
comparator |
该属性指定指定进行排序的Comparator实例 |
source |
该属性指定被排序的集合。如果不指定,则默认对ValueStack栈顶的集合进行排序 |
var |
如果指定了该属性,则将生成的Iterator对象设置成page范围的属性,不放入StackContext中 |
数据标签:
数据标签主要用于提供各种数据访问相关的功能,包含显示一个Action里的属性,以及生成国际化输出等功能。
1)、action标签
使用action标签可以允许在jsp页面中直接调用Action。如果指定了executeResult参数的属性值为true,该标签还会把Action的处理结果包含到本页面中来。
它有如下属性:
属性 |
说明 |
var |
如果定义了该属性,那么该Action将会被放入ValueStack中 |
name |
指定该标签调用哪个Action |
namespace |
该属性指定了该标签调用的Action所在的namespace |
executeResult |
该属性指定了是否要将Action的处理结果页面包含到本页面中 |
ignoreContextParams |
该属性指定了该页面中的请求参数是否需要传入调用的action |
2)、bean标签:用于创建一个javaBean实例。
它有如下两个属性:
属性 |
说明 |
name |
该属性指定了要实例化的javaBean的实现类 |
var |
如果指定了该属性,则该JavaBean实例会被放入发哦Stack Context中,并放入requestScope中 |
3)、date标签:该标签用于格式化一个日期。还可以计算指定日期和当前时刻的时差
有如下属性:
属性 |
说明 |
form |
如果指定了该属性,将根据该属性指定的格式来格式化日期 |
nice |
该属性用于指定是否输出指定日期和当前时刻之间的时差。该属性值只能为true或false |
name |
该属性指定要格式化的日期值 |
var |
如果指定了该属性格式化后的字符串将被放入Stack Context中 |
注:如果既指定了nice="true",也指定了format属性,则会输出指定日期和当前时刻之间的时差,format属性会失效。
4)、debug标签:它会在页面生成一个超级链接,通过该链接可以查看到ValueStack和Stack Context中所有的信息
5)include标签:用于将一个jsp页面或者一个Servlet包含到本页面中。
它有如下属性:
属性 |
说明 |
value |
该属性指定需要被包含的jsp页面或者Servlet |
还可以为该标签指定多个<s:param.../>子标签,用于将多个参数值传入被包含的jsp页面或者Servlet
6)、param标签:用于为其他标签提供参数
该标签有如下属性:
属性 |
说明 |
name |
指定需要设置参数的参数名 |
value |
指定需要设置参数的参数值 |
7)、push标签:用于将某个值放到ValueStack的栈顶
有下面一个属性:
属性 |
说明 |
value |
该属性指定需要放到ValueStack栈顶的值 |
只有在push标签内时,被push标签放入ValueStack中的对象才存在;一旦离开了push标签,则刚刚放入的对象将会立即被移除ValueStack
8)、set标签:该标签用于将某个值放入到指定的范围内。
Set标签有如下属性:
属性 |
说明 |
scope |
指定新变量被放置的范围,该属性可以接受application、session、request、page或者action5个值。默认为action |
value |
指定将赋给变量的值 |
var |
如果指定了该属性,则会将被放入到request范围中,并被放入ONGL的Stack Context中 |
9)、url标签:该标签用于生成一个URL地址。
可以通过为url标签指定param子元素,从而向指定URL发送请求参数。
10)、property标签:该标签的作用是输出指定值。
该标签有如下属性:
属性 |
说明 |
default |
如果需要输出的属性值为null。则显示default属性指定的值 |
escape |
指定是否escape HTML代码 |
value |
指定需要输出的属性值 |
表单标签
1)checkboxlist标签:创建复选框。相当于HTML中的checkbox标签:
属性 |
说明 |
list |
根据指定的集合来生成多个复写框 |
listKey |
该属性指定集合元素中的某个属性作为复选框的value。如果集合是Map,则可以使用key和value指定Map对象的key和value作为复选框的value |
listValue |
该属性指定集合元素中的某个属性作为复选框的标签。如果集合是Map,则可以使用key和value指定Map对象的key和value作为复选框的标签 |
2)、doubleselect标签:该标签用于生成一个级联列表框。当选择第一个下拉列表框时,第二个下拉列表框的内容会随着改变。
该标签有如下属性:
属性 |
说明 |
list |
指定用于输出第一个下拉类表框中选项的集合 |
listKey |
该属性指定集合元素中的某个属性作为第一个下拉列表框的value。如果集合是Map,则可以使用key和value指定Map对象的key和value作为复选框的value |
listValue |
该属性指定集合元素中的某个属性作为第一个下拉列表框的标签。如果集合是Map,则可以使用key和value指定Map对象的key和value作为第一个下拉列表框的标签 |
doubleList |
指定用于输出第二个下拉类表框中选项的集合 |
doubleListKey |
该属性指定集合元素中的某个属性作为第二个下拉列表框的value。如果集合是Map,则可以使用key和value指定Map对象的key和value作为复选框的value |
doubleListValue |
该属性指定集合元素中的某个属性作为第二个下拉列表框的标签。如果集合是Map,则可以使用key和value指定Map对象的key和value作为第二个下拉列表框的标签 |
doubleName |
指定第二个下拉列表框的name属性 |
4)、head标签:用于生产HTML主要页面的head部分。
5)、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 |
设置第一个下拉选择框是否允许多选 |
6)、select标签:该标签用于生成一个下拉列表框。
使用该标签是必须制定list属性。系统会使用list属性指定的集合来生成下拉列表框的选项
该标签有如下属性:
属性 |
说明 |
listKey |
该属性指定集合元素中的某个属性作为复选框的value。如果集合是Map,则可以使用key和value指定Map对象的key和value作为复选框的value |
listValue |
该属性指定集合元素中的某个属性作为复选框的标签。如果集合是Map,则可以使用key和value指定Map对象的key和value作为复选框的标签 |
multiple |
设置该列表是否允许多选 |
7)、radio标签:该标签用于生成多个单选框;
8)、optgroup标签:该标签用于生成一个下拉列表框的选项组:
该标签必须放在<s:select.../>标签中使用
9)、token标签:该标签用于阻止多次提交表单的问题。如果需要该标签起作用,则应该在Struts 2的配置文件中启用TokenInterceptor拦截器
Token标签的实现原理是:在表单中增加一个隐藏域。每次加载该页面时,该隐藏域的值都会不同。而TokenInterceptor拦截器则拦截所有用户请求,如果两次请求时该token对应隐藏域的值相同,则会阻止表单提交。
10)、updownSelect标签:该标签用于生产可以上下移动的列表框;
该标签的属性如下:
属性 |
说明 |
allowMoveUP |
是否显示“上移”按钮 |
allowMoveDown |
是否显示“下移”按钮 |
allowSelectAll |
是否显示“全选”按钮 |
moveUpLabel |
设置“上移”按钮上的文本 |
moveDownLabel |
设置“下移”按钮上的文本 |
selectAllLabel |
设置“全选”按钮上的文本 |
读李刚《轻量级Java EE企业应用实战》