Struts 2讲义 4.docx
《Struts 2讲义 4.docx》由会员分享,可在线阅读,更多相关《Struts 2讲义 4.docx(35页珍藏版)》请在冰豆网上搜索。
Struts2讲义4
Struts2讲义(4)
--Struts2标签
1.1.1Struts2标签组成
Struts2框架的标签库主要分为用户界面标签(UI标签)、非用户界面标签和AJAX标签三类。
⑴用户界面标签(UI标签):
主要用来生成HTML元素的标签:
●表单标签:
主要用于生成HTML页面的FORM元素以及普通表单元素的标签。
●非表单标签:
主要用于生成页面上的Tree、Tab页等。
⑵非用户界面标签(非UI标签):
主要用于数据访问、逻辑控制等:
●数据访问标签:
主要包含用于输出值栈中的值,完成国际化等功能的标签。
●流程控制标签:
主要包含用于实现分支、循环等流程控制的标签。
⑶AJAX标签:
用于支持Ajax效果。
其中非UI标签和UI标签除了功能不一样之外,最大的区别是UI标签支持模板和主题。
1.1.2Struts2标签使用
自定义标签库通常都有一个标签库描述文件(TagLibraryDescriptor,TLD),其中记录了标签的名字、标签处理器类,标签的属性等信息,在JSP中使用标签描述符来解释在JSP页面中使用的自定义标签。
Strus2标签库的描述文件在struts-core-2.0.11.jar压缩文件的MET-INF目录下找到struts-tags.tld文件,这个文件定义了Struts2的标签。
要在JSP页面中引用Struts2标签库,需要使用taglib指令。
在JSP代码的顶部加入以下的代码:
<%@taglibprefix=”s”uri=”/struts-tags”%>
Struts2的标签库都支持动态数据的访问,标签的属性都可以使用OGNL表达式,Struts2标签的属性具有类型,一般分为字符串类型和非字符串类型。
⑴对于字符串类型属性的访问,使用下面的语法:
includevalue=”%{字符串名}”/>
include标签的value属性都是字符串类型,Struts2会对这个属性进行解析,查找符合“%{…}”样式的字符串,然后将括号之间的内容作为OGNL表达式进行求值,如果属性中没有“%{…}”样式的字符串,属性的值将直接被当成字符串处理。
⑵对于非字符串类型的属性值,将直接被作为OGNL表达式进行求值。
propertyvalue=”username”/>
property标签的value属性是Object类型,它的值将作为OGNL表达式进行求值,结果是值栈中位于栈顶的名字为“username”的值。
如果为非字符串类型的属性直接指定为字符串数据需要使用OGNL中的字符串常量,即用单引号(‘)或者双引号(“)将字符串括起来,例如:
propertyvalue=”’echo’”/>
value属性的值“echo”作为字符串常量,计算的结果就是“echo”。
另外,也可以使用“%{…}”来指定字符串常量,例如:
propertyvalue=”%{‘echo’}”/>
在这种情况下,“%{}”将被忽略,括号中的内容将作为表达式被计算。
【注】:
在使用标签时,忘记某个属性是字符串类型还是非字符串类型,直接使用“%{…}”最简单。
1.2表单标签
Struts2的表单标签主要用于生成表单元素,Struts2不仅提供了与HTML表单标签作用相同的标签,还提供了可用于完成某种特定功能的表单标签。
所有的表单标签可以分为两种:
form标签本身和单个表单元素的标签。
Struts2的表单元素标签都包含了非常多的属性,但有很多属性完全是通用的。
Struts2框架的标签处理类都是UIBean类的子类,UIBean定义了一些通用的属性,主要分为:
⑴通用相关属性
●name:
指定该表单元素的名称,该属性与Action中定义的属性相对应。
●value:
指定该表单元素的值。
●cssStyle:
指定该表单元素的style属性,使用CSS样式。
⑵JavaScript脚本相关属性
●onclick:
鼠标单击时触发。
●ondbclick:
鼠标双击时触发。
⑶模板相关属性
●tooltip:
指定该组件的提示信息。
●tooltipIcon:
指定提示图标的位置路径。
1.2.1form标签
form(表单)标签是所有UI组件中最特别的一个,其它的UI组件要与服务器交互数据,必须放在这个标签内。
这个标签也是在编写服务器端应用的时候最经常用的一个标签,几乎所有的交互页面都可以看见它的影子。
细心的读者也可以发现,前面的例子也曾很频繁的使用了这个标签。
form标签的属性如表2-1所示。
表2-1form标签属性
属性名称
数据类型
是否必须
描述
action
String
否
要提交到的action的名字
namespace
String
否
action的命名空间
method
String
否
POST/GET
target
String
否
框架名/_blank/_top或其他
enctype
String
否
进行文件上传时设置为multipart/form-data
openTemplate
String
否
默认映射到form.vm
validate
Boolean
否
进行客户端验证
Struts2重新定制的form标签支持模板,可以定制更丰富的界面,在simpleTheme里,它输出开发的(opening)和关闭的(closing)之间的元素。
在XhtmlTheme里,除了输出表单的元素外,还输出周围的表格。
除了这两个主题外form标签还支持form.vm和form-close.vm
注意经常设置的action属性,和namespace属性,例如:
如果要把页面提交到/Logic/Add.action,那么应该这样设置,设置action=”Add.action”namespace=”/Logic”。
如果不指定名字空间,那么默认情况是action处于与页面同一个命名空间.这样的设置似乎有点儿烦琐,也可以把命名空间和Action合到一起设置,如上例设置action=”/Logic/Add.action”。
例如/Logic/Add!
mAdd.action这样的URL看起来可能很陌生,读者肯定会有这样的疑问”!
”出现在这里会有什么特殊的含义。
这个特殊的URL定义了调用除了默认的execute()之外的另外一个成员函数的方法,通过“!
”可以调用一个Action的多个成员函数完成不同的需要,比如本例中根据不同的情况,调用不同的加法逻辑。
1.2.2textfield标签
textfield标签也不陌生了,用来输入一小段的文字,如姓名等等,前面例子的文本输入功能就是由这个标签来完成的,通过了解标签的属性可以更好的掌握和使用这个UI组件。
表2-2textfield标签属性
属性名称
数据类型
是否必须
描述
maxlength
String
否
字段可输入的最大长度值
readonly
Boolean
否
当该属性为true时,不能输入
size
String
否
字段的尺寸
id
Object/String
否
用来标识元素的id。
在ui和表单中为HTML的id属性
【例2-1】textfield标签使用。
<%@pagecontentType="text/html;charset=GBK"%>
<%@taglibprefix="s"uri="/struts-tags"%>
textfield标签例子
#FFFF00">textfield标签例子
formtheme="simple">
默认
textfieldname="username"label="用户名"/>
size30,最大长度10
textfieldname="username"label="用户名"size="30"maxlength="10"/>
只读
textfieldname="usename1"label="用户名"readonly="true"
value="只读"/>
form>
发布运行之后界面如图2-1所示:
图2-1textfield标签使用界面
1.2.3password标签
password标签和textfield标签是一致的,不过它们使用的场合不一样,默认在password框内输入的内容是不显示的,但是考虑到用户的需求,也许有时需要显示它们,那么简单的将show设为true便可以了.
表2-3password标签属性
属性名称
数据类型
是否必须
描述
showPasssword
Boolean
否
默认是不显示输入内容的
maxlength
String
否
字段的最大长度
readonly
Boolean
否
只读属性
size
String
否
字段的尺寸
【例2-2】password标签使用。
#FFFF00">password标签例子
form>
textfieldname="username"label="用户名"size="30"maxlength="10"/>
passwordname="password"label="密码"size="30"maxlength="10"/>
form>
发布运行之后界面如图2-2所示:
图2-2password标签使用界面
1.2.4checkbox标签,复选框控件
checkbox标签代表一个复选框,我们可以把它映射为某个boolean或java.lang.Boolean类型的动作表单属性。
表2-4列出了这个标签的属性。
表2-4checkbox标签属性
属 性名称
描 述
可取值
indexed
表明是否要为那些被赋值给name属性的值建立索引
true或false
name
表明由property属性指定的属性保存在哪一个作用域变量里。
如果name属性不存在,则使用其封闭form标签的name属性值
字符串
property*
给出其封闭form标签所对应的动作表单里与呈现的HTML输入字段相关联的那个属性的名字。
请注意,property属性做出的设置可以被value属性重写
字符串
value
一个常数,它将成为呈现的HTML单选框的值
字符串
【例2-3】checkbox标签使用。
#FFFF00">checkbox标签例子
爱好
checkboxlabel="阅读"name="hobbies"value="true">
checkbox>
checkboxlabel="篮球"name="hobbies">
checkbox>
图2-3checkbox标签使用界面
在这个例子里,如果用户选中了这个复选框,在用户提交包含着这个复选框的HTML表单时,浏览器就会把名字是hobbies,取值为on的请求参数发送给服务器。
在收到这个请求参数之后,Struts将把相应的boolean属性设置为true。
如果用户没有选中这个复选框,浏览器就不会向服务器发送名字是hobbies的请求参数,相关联属性的值将保持为false。
Checkbox的fieldValue属性的值才是真值。
checkboxlabel="阅读"name="hobbies"value="true"fieldValue=”阅读”>
checkbox>
1.2.5select标签,选择控件
select标签用来产生下拉式列表,是在WebUI布局中常用的一种控件,这种控件的使用能够加强用户以系统之间的互动性。
Select标签通过指定list属性,系统会使用list属性指定的集合来生成下拉列表框的内容。
表2-5给出了select标签的属性。
表2-5select标签属性
属性名称
数据类型
是否必须
描述
list
CellectionMap
否
要迭代的集合,使用集合中的元素来设置各个选项,如果list的属性为Map则Map的key成为选项的value,Map的value会成为选项的内容
listKey
String
否
用于指定集合元素中的某个属性作为复选框的 value。
如果集合是Map,则可以使用key-value分别对应 Map的key-value作为复选框的value
listValue
String
否
用于指定集合元素中的某个属性作为复选框的 标签。
如果集合是Map,则可以使用key-value分别对应Map的key-value作为复选框的标签
headerKey
String
否
设置当用户选择了header选项时,提交的的value,如果使用该属性,不能为该属性设置空值
headerValue
String
否
显示在页面中header选项内容
emptyOption
Boolean
否
是否在header选项后面添加一个空选项
multiple
Boolean
否
是否多选
size
Integer
否
显示的选项个数
select标签最重要的一个属性是list,它指出了列表框要列出的选项.最简单的情况是用户从中选择一个值然后将它提交给Action.字段的值会自动被设定为选中的值,例如:
selectlabel=”爱好”name=”hobbies”list=”{‘篮球’,’绘画’}”/>
像上面的例子,如果“篮球”被选中并提交,那么hobbies字段值便会被设为“篮球”。
【例2-4】select标签使用。
#FFFF00">select标签例子
使用name和list属性,list属性的值是一个列表
form>
selectlabel="最高学历"name="education"list="{'高中','大学','硕士','博士'}"/>
form>
当用户选中某个选项的时候,该选项的value属性值就会发送到服务器去。
如果某个选项没有value属性,该选项的标签(也就是用户在浏览器里看到的选项的文本文字)将发送到服务器去。
例子2-4发布运行的部分界面是:
图2-4select标签使用界面
1.2.6radio标签,单选按钮
radio标签是一个常见的标签,用于表示一个单选框。
该标签的的工作方式和select标签类似。
但是由于它们的外表不一样。
因此radio比select少了几个属性。
表2-6给出了radio标签的属性。
表2-6radio标签属性
属性名称
数据类型
是否必须
描述
list
CollectionMap
否
列出的内容,可以是表达式
listKey
String
否
用于指定集合元素中的某个属性作为复选框的 value。
如果集合是Map,则可以使用key-value分别对应 Map的key-value作为复选框的value
listValue
String
否
用于指定集合元素中的某个属性作为复选框的 标签。
如果集合是Map,则可以使用key-value分别对应Map的key-value作为复选框的标签
【例2-5】radio标签使用。
#FFFF00">radio标签例子
form>
--使用简单集合来生成多个单选框-->
radioname="a"label="请选择您喜欢的图书"labelposition="top"
list="{'Spring2.0宝典','SpringInAction','JavaScript:
TheDefinitiveGuide'}"/>
--使用简单Map对象来生成多个单选框-->
radioname="b"label="请选择您想选择出版日期"labelposition="top"
list="#{'Spring2.0宝典':
'2006年10月','轻量级J2EE企业应用实战':
'2007月4月','基于J2EE的Ajax宝典':
'2007年6月'}"
listKey="key"listValue="value"/>
radioname="c"label="请选择性别"labelposition="top"
list="#{'F':
'男','M':
'女'}"listKey="key"listValue="value"value="'F'"/>
value:
缺省选中的值
例子2-5发布运行的界面是:
图2-5radio标签使用界面
1.2.7checkboxlist标签
checkboxlist标签和radio,select标签类似,可以根据一个集合属性创建多个复选框。
其效果和select标签设置multiple属性为true的时候是一样的。
表2-7给出了checkboxlist标签的属性。
表2-7checkboxlist标签属性
属性名称
数据类型
是否必须
描述
list
Collection、Map
否
列出的内容,可以是表达式
listKey
String
否
用于指定集合元素中的某个属性作为复选框的 value。
如果集合是Map,则可以使用key-value分别对应 Map的key-value作为复选框的value
listValue
String
否
用于指定集合元素中的某个属性作为复选框的 标签。
如果集合是Map,则可以使用key-value分别对应Map的key-value作为复选框的标签
【例2-6】checkboxlist标签使用。
#FFFF00">checkboxlist标签例子
form>
--使用简单集合来生成多个复选框-->
checkboxlistname="a"label="请选择您喜欢的图书"labelposition="top"
list="{'Struts2权威指南','轻量级J2EE企业应用实战','基于J2EEAjax宝典'}"/>
--使用简单Map对象来生成多个复选框使用Map对象的key(书名)作为复选框的value,使用Map对象的value(出版时间)作为复选框的标签-->
checkboxlistname="b"label="请选择您想选择出版日期"labelposition="top"
list="#{'Struts2权威指南':
'2007年10月','轻量级J2EE企业应用实战':
'2007月4月','基于J2EE的Ajax宝典':
'2007年6月'}"listKey="key"listValue="value"/>
--创建一个JavaBean对象,并将其放入StackContext中-->
beanname="lee.BookService"id="bs"/>
--使用集合里放多个JavaBean实例来生成多个复选框,使用集合元素里name属性作为复选框的标签,使用集合元素里author属性作为复选框的value-->
checkboxlistname="b"label="请选择您喜欢的图书"labelposition="top"
list="#bs.books"listKey="author"listValue="name"/>
form>
例子2-6发布运行的界面是:
图2-6checkboxlist标签使用界面
注:
labelposition是定义标签在Form中的位置,从左从上计算
1.2.8textarea标签
textarea标签输出一个多行文本框的表单元素,用来接收用户输入的多行文本数据,等价于HTML代码:
。
表2-8textarea标签属性
属性名称
数据类型
是否必须
描述
cols
Integer
否
列数
rows
Integer
否
行数
readonly
Boolean
否
当该属性为true时,不能输入
wrap
Boolean
否
指定多行文本输入控件是否应该换行
id
Object/String
否
用来标识元素的id。
在ui和表单中为HTML的id属性
【例2-7】textarea标签使用。
#FFFF00">textarea标签例子
form>
textarealabel="留言"name="message"cols="25"rows="10"/>
form>
发布运行的界面是:
图2-7checkboxlist标签使用界面
1.2.9combobox标签
combobox标签生成一个单行文本框和下拉列表框的组合,但两个表单元素只对应一个请求参数,只有单行文本框里的值才包含请求参数,而下拉列表框则只是用于辅助输入,并没有name,也不会产生请求参数。
使用该标签,需要指定一个list属性,该list属性指定的集合将用于生成列表项。
表2-9combobox标签属性
属性名称
数据类型
是否必须
描述
list
Collection、Map
是
用指定的集合内容生成下拉列表项
readonly
Boolean
否
当该属性为true时,不能输入
【例2-8】combobox标签使用。