前言:若需要使用Struts2的标签,需要添加
<%@ taglib uri="/struts-tags" prefix="s" %>
一:通用标签
(1)property标签:用来输出一个值栈属性的值
名字 | 类型 | 默认值 | 说明 |
---|---|---|---|
default | String | 如果value值没有给定或为null,将显示该属性值 | |
esxape | boolean | true | 可选,是否对HTML特殊字符进行转义 |
value | String | 来自栈顶对象 | 将要显示的值 |
(2) url标签 :动态创建一个URL
名字 | 类型 | 默认值 | 说明 |
---|---|---|---|
action | String | 指定生成的URL为哪个action | |
includeParams | String | get | 可选,指定是否包含请求参数,可以取三个值之一:get,all,one |
method | String | 可选,指定action的方法,当用action属性来生成url时,如果指定该属性,url将链接到指定的action方法上 | |
namespace | String | 可选,指定URL的命名空间 | |
value | String | 可选,指定url生成的值 | |
var | String | 可选,指定用来被压入contextMap中的键值 |
(3)param标签:用来把一个参数传递给含着它的那个标签
名字 | 类型 | 默认值 | 说明 |
---|---|---|---|
name | String | 将传递给外层标签的参数的名字 | |
value | String | 将传递给外层标签的参数的值;无论在给出value值时有没有使用%{},struts都会对它进行OGNL求值;如果想传递一个String类型的字符串作为参数值,必须把它用单括号括起来; |
(4)set标签:用来在以下Map对象里创建一个键值对:
~valueStack值栈的contextMap值栈;
~Map类型的application对象;
~Map类型的session对象;
~Map类型的request对象;
~Map类型的page对象;
名字 | 类型 | 默认值 | 说明 |
---|---|---|---|
name | String | 将被创建的属性的键 | |
value | String | 指定一个表达式,将计算结果赋给变量,如果没有执行value属性,默认将栈顶对象赋给对象 | |
scope | String | action | 变量范围有application,session,request,page和action(默认) |
注意:在使用默认scope的值,即action的范围的时候,value属性值会保存在request和OGNLContext(OGNL 上下文)中.
(5)push标签
~push标签将把一个对象压入ValueStack,而不是压入ContextMap
~push标签在标签起始时把一个对象压入栈,标签结束时将对象弹出栈
名字 | 类型 | 默认值 | 说明 |
---|---|---|---|
Value | String | 将被压入Value Stack栈的值 |
(6)if,else和else if标签
~这三个标签用来进行条件测试,他们的用途和用法类似于if,else和else if关键字.其中if和else if必须要有test属性.
名字 | 类型 | 默认值 | 说明 |
---|---|---|---|
test | Boolean | 测试条件 |
例
成绩等级:
if test="#score < 60">不及格 if>
elseif test="#score < 80">良好 elseif>
else>优秀 else>
(7)iterator标签
· iterator标签用来遍历每一个数组,Collection或一个Map,并把这个可遍历对象里的每一个元素依次压入和弹出valueStack栈
名字 | 类型 | 默认值 | 说明 |
---|---|---|---|
value | String | 将被遍历的可遍历对象 | |
status | |||
var | String | 用来引用这个遍历对象中的当前元素的变量 |
·iterator标签的status属性的属性值
名字 | 类型 | 默认值 | 说明 |
---|---|---|---|
index | Integer | 各次遍历的下标值(从0开始) | |
count | Integer | 当前元素总数 | |
first | boolean | 当前元素是否第一个数 | |
last | boolean | 当前元素是否为最后一个元素 | |
even | boolean | 当前元素是否为偶数 | |
odd | boolean | 当前元素是否为奇数 | |
modulus | int | 这个属性需要一个输入参数,它的返回值是count属性值除以那个参数的余数 |
<s:iterator value="#request.persons">
${name}--${city}<br>
s:iterator>
<s:iterator value="#request.persons">
<s:property value="name">s:property> --- <s:property value="city">s:property><br>
s:iterator>
<br>
<s:iterator value="persons" var="p" status="s">
${s.index}--${p.id}--${p.name}--${p.city}<br>
当前元素的总数:<s:property value="#s.count">s:property><br>
当前元素是否为第一个元素:<s:property value="#s.first">s:property><br>
当前元素是否为最后一个元素:<s:property value="#s.last">s:property><br>
当前元素是否为偶数:<s:property value="#s.even">s:property><br>
当前元素是否为奇数<s:property value="#s.odd">s:property><br>
模量:<s:property value="#s.modulus(2)">s:property><br>
s:iterator>
(8)sort标签:用来对某一个可遍历对象里的元素进行排序
名字 | 类型 | 说明 |
---|---|---|
comparator | java.util.Comparator | 在排序过程中使用的比较器 |
source | String | 将进行排序的可遍历对象 |
var | String | 用来引用因排序而新生成的可遍历对象的变量 |
例
//比较器
public class PersonComparator implements Comparator<Person>{
@Override
public int compare(Person o1, Person o2) {
// TODO Auto-generated method stub
return o1.getName().compareTo(o2.getName());
}
}
//Action类中的目标方法
public String testTag(){
this.productId = 1008;
this.productName = "LOL";
this.description ="Game";
this.price = 2008;
PersonComparator pc = new PersonComparator();
requestMap.put("pc", pc);
persons.add(0, new Person(1,"FF","FFF"));
persons.add(1, new Person(2,"GG","GGG"));
persons.add(2, new Person(3,"HH","HHH"));
persons.add(3, new Person(4,"II","III"));
persons.add(4, new Person(5,"QQ","QQQ"));
return "testTagSuccess";
//jsp页面
"#request.pc" source="#request.persons" var="p">
"#attr.p">
${id} --- ${name} --- ${city}
(9)date标签:用来对Date对象进行排版
名字 | 类型 | 默认值 | 说明 |
---|---|---|---|
format | String | 可选,日期的格式 | |
name | String | 将被排版的日期值 | |
nice | boolean | false | 可选,指定是否要输出指定日期和当前日期之间的时间差 |
var | String | 可选,用来引用被压入valueStack栈的日期值的变量 |
注:format属性的值必须是java.text.SimpleDateFormat类里定义的日期/时间格式之一
(10)a标签:将呈现一个HTML链接,这个标签可以接受HTML语言中a元素所能接受的所有属性,支持OGNL解析.
(11)
action标签:用在页面上执行一个action;
action标签还会把当前Action对象压入ValueStack值栈的ContextMap子栈;
(12)include标签:用来 把一个Servlet或JSP页面的输出包含到当前页面里来;
二:表单标签
(1)使用表单标签的优点:①表单回显 ②对页面进行布局和排版
(2)标签的属性可以被赋值为一个静态的值或一个OGNL表达式,如果在赋值时使用了一个OGNL表达式并把它用%{}括起来,这个表达式将会被求值
(3)表单标签的共同属性
名字 | 数据类型 | 说明 |
---|---|---|
cssClass | String | 用来呈现这个元素的CSS类 |
cssStyle | String | 用来呈现这个元素的CSS样式 |
title | String | 指定HTMLtitle属性 |
disabled | String | 指定HTMLdisabled属性 |
label | String | 指定一个表单元素在HTML和ajax主体里的行标 |
name | String | 指定HTML name属性.一个输入元素的name属性将被映射到Action属性 |
required | boolean | 在HTML主题里,这个属性是否要给当前行标加上一个星号* |
value | String | 指定一个表单元素的值 |
注:上述属性只有没有使用Simple主体时才可以使用
(4)form标签:用来呈现HTML语言中的表单元素
名字 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
action | String | 当前action | 提交这个表单将触发的action |
entype | String | 表单的entype属性 | |
method | String | post | 提交方法 |
namespace | String | 提交这个表单将触发的action所在的命名空间 |
(5)textfield,passworld,hidden标签
· textfield标签将被呈现为一个输入文本字段,Password标签将被呈现为一个口令字段,hidden 标签将被呈现为一个不可见字段
名字 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
maxlength | Integer | 输入字符的最大个数 | |
readonly | boolean | false | 用来表名该输入元素是不是只读的 |
size | Integer | 尺寸属性 |
· password 标签扩展自textfield标签,多了一个showPssword属性,该属性是Boolean,默认值是false,它决定着表单回显是否显示输入的密码
(6)submit标签
名字 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
action | String | Html action属性 | |
align | String | Html align属性 | |
method | String | method属性 | |
type | String | input | 这个属性决定着提交按钮的屏显效果类型,它的可取值是input,button或image |
(7)textare标签将呈现为一个HTML文本域元素
名字 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
cols | Integer | HTML的cols属性 | |
readonly | boolean | false | 用来表名该textarea元素是不是只读的 |
rows | integer | HTML rows属性 | |
wrap | boolean | Html的wrap属性 |
(8)checkbox标签,将呈现为一个HTML复选框元素,该复选框元素通常用于提交一个布尔值.
注:struts2的checkbox标签为单个复选框元素创建了一个配对的不可见字段,就是为了解决一个局限性(如果该复选框未被选中,在请求中就不会增加一个请求参数)
checkbox标签有一个fieldvalue属性,该属性指定的值将在用户提交表单时作为被选中的单选框的实际值发送到服务器;
(9)radio标签,将呈现一组单选按钮
名字 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
list | String | 用来充当选项来源的可遍历对象 | |
listKey | String | 用来提供选项值得对象属性 | |
listValue | String | 用来提供对象行标的对象属性 |
(10)select标签,即呈现一个select元素
名字 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
headerkey | String | false | 选择列表中第一个选项的键 |
headerValue | String | 选项中第一个选项的值 | |
list | String | 用来充当选项来源的可遍历对象 | |
listkey | String | 用来提供选项值的对象属性 | |
listValue | String | 用来提供行标的对象属性 | |
multiple | boolean | false | 指明是否允许多重选择(多选多) |
S:optgroup可以用作s:select的子标签,用于显示更多的下拉框
注:必须有键值对,而不能使用一个集合,让其值即为键又作为值
例:
select list="{11,12,13,14,15,16,17,18,19,20}" name="age" label="年龄" headerKey="请选择" headerValue="请选择" multiple="ture" >
"21-30" list="#{'21':'21','22':'22','23':'23'}">
select>
效果
(11)checkboxlist标签,将呈现一组多选框
名字 | 数据类型 | 默认值 | 说明 |
---|---|---|---|
list | String | 用来充当来源的可遍历对象 | |
listkey | String | 用来提供选项值的对象属性 | |
listvalue | String | 用来提供行标的对象属性 |
注:服务器需要使用集合类型,从而保证能够正常回显
例:
<s:checkboxlist label="城市" name="city" list="#request.cities" listKey="cityId" listValue="cityName">s:checkboxlist>
(12)主题
修改主题的方式:
①通过UI标签的theme属性;
②在一个表单里,若没有给出某个UI标签的theme,它将使用这个表单的主体;
③在Page,Request,Session或Application中添加一个theme属性
④修改struts.properties文件中的struts.ui.theme属性