Struts 2讲义 4.docx

上传人:b****8 文档编号:10448301 上传时间:2023-02-11 格式:DOCX 页数:35 大小:30.84KB
下载 相关 举报
Struts 2讲义 4.docx_第1页
第1页 / 共35页
Struts 2讲义 4.docx_第2页
第2页 / 共35页
Struts 2讲义 4.docx_第3页
第3页 / 共35页
Struts 2讲义 4.docx_第4页
第4页 / 共35页
Struts 2讲义 4.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

Struts 2讲义 4.docx

《Struts 2讲义 4.docx》由会员分享,可在线阅读,更多相关《Struts 2讲义 4.docx(35页珍藏版)》请在冰豆网上搜索。

Struts 2讲义 4.docx

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代码: