快捷搜索:

Struts 系列之二 ------- Struts标记库

4.struts标记库

4.1 Bean标记

4.1.1Bean复制标记

4.1.2定义脚本变量标记

4.1.3显示bean属性

4.1.4消息国际化标记

4.2 逻辑标记

4.2.1 前提标记

4.2.2 重复标记

4.2.3 转发和重定向标记

4.3 HTML标记

4.3.1 显示表单元素和输入控件

4.3.2 显示差错信息的标记

4.3.3 其他HTML标记

4.4 模板标记

4.Struts标记库

JSP视窗组件所应用的 struts标记库由四类标记组成:

lBean标记:用来在JSP页中治理bean

l逻辑标记:用来在JSP页中节制流程

lHTML标记:用来天生HTML标记,在表单中显示数据,应用会话ID对URL进行编程

l模板标记:应用动态模板构造通俗款式的页

4.1 Bean标记

这个标记库中包孕用于定义新bean、造访bean及其属性的标记。Struts框架供给了多种自定义标记用来在JSP页中处置惩罚JavaBean。这些标记被封装在一个通俗的标记库中,在文件struts-bean.tld中定义了它的标记库描述器。Bean标记库将标记定义在四个子种别中:

l创建和复制bean的标记

l脚本变量定义标记

lbean翻译标记

l消息国际化标记

4.1.1 Bean复制标记

可定义新bean,可复制现有bean,还可从现有bean复制属性。

标记用来:

l定义新字符串常数

l将现有的bean复制到新定义的bean工具

l复制现有bean的属性来创建新的bean

标记属性:

属性

描述

Id

新定义的bean脚本变量名称,必须设置

Type

定义引入脚本变量的类

Value

为id属性定义的脚本变量分配一个新的工具

Name

目标bean的名称。若value属性没有设置,这个属性就必须设置

property

Name属性定义的bean的属性名称,用来定义新的bean

Scope

源bean的感化域。若没有设置,搜索范围是从页感化域到利用法度榜样感化域

toScope

目标bean的感化域。若没有设置,默认值是页感化域

例如:定义一个bean:

源bean在页感化域中被拷贝大年夜哦哀求感化域中的另一个bean:

4.1.2 定义脚本变量的标记

从多种资本中定义和天生脚本变量,这些资本包括cookie,哀求参数,HTTP标优等等。属性如下:

属性

描述

Id

脚本变量和要定义的页感化域属性的名称

Name

cookie/标头/参数的名称

multiple

假如这个属性设置了随意率性一个数值,所有匹配的cookie都邑被积累并存储到一个Cookie[](一个数组)类型的bean里。若无设置,指定cookie的第一个值将作为Cookie类型的值

Value

假如没有匹配的cookie或数值,就返回这个属性指定的默认值

例如:

脚本变量名称是myCookie,用来创建这个属性的cookie的名称是userName。

脚本变量名称是myHeader,哀求标头的名称是Accept-Language.

脚本变量名称是myPatameter,它保存的哀求参数的名称也是myParameter.

标记将对一个资本的相应进行检索,并引入一个脚本变量和字符串类型的页感化域属性。这个资本可所以一个页,一个ActionForward或一个外部URL。与的不合是资本的相应被存储到一个页感化域的bean中,而不是写入到输出流。属性如下:

属性

描述

Id

脚本变量和要定义的页感化域属性的名称

Page

一个内部资本

forward

一个ActionForward

Href

要包孕的资本的完备URL

例如:

脚本变量的名称是myInclude,要检索的相应来自资本MyJsp?x=1。

标记将检索web利用中的资本,并引入一个脚本变量和InputStream或字符串类型的页感化域属性。假如在检索资本时发生问题,就会孕育发生一个哀求光阴非常。属性如下:

属性

描述

Id

脚本变量和要定义的页感化域属性的名称

Name

资本的相对路径

Input

假如这个属性不存在,资本的类型便是字符串

例如:

脚本变量的名称是myResource,要检索的资本的名称是myResource.xml。

4.1.3 显示Bean属性

标记库中定义了标记,用来将bean的属性运送到封装的JSP页写入器。这个标记与类似,属性如下:

属性

描述

Name

要进行属性显示的bean的名称

property

要显示的属性的名称。假如这个属性类有java.beans.PropertyEditor,getAsText()或toString 措施会被调用

Scope

Bean的感化域,若没有设置,搜索范围是从页到利用法度榜样感化域

Filter

假如设置true,属性中的所有特殊HTML字符都将被转化为响应的实体引用

Ignore

假如设置false,当发明属性时会孕育发生一个哀求光阴非常,否则返回null

例如:

myBean的属性myProperty将会被显示,感化域为哀求,假如发明任何HTML特殊字符都将被转化为响应的实体引用。

4.1.4 消息标记和国际化

strtus框架支持国际化和本地化。用户在他们的谋略机中定义自己所在的区域,当web利用法度榜样必要输出一条消息时,它将引用一个资本文件,在这个文件中所有的消息都应用了适当的说话。一个利用法度榜样可能供给了很多资本文件,每个文件供给了用不合说话编写的消息。假如没有找到所选说话的资本文件,就将应用默认的资本文件。

struts框架对国际化的支持是应用标记,以及应用java.util数据包中定义的Locale和ResourceBundle类来实现Java2平台对这些义务的支持。Java.text.MessageFormat类定义的技巧可以支持消息的款式。使用此功能,开拓职员不需懂得这些类的细节就可进行国际化和设置消息的款式。

用strtus实现国际化和本地化:

第一步要定义资本文件的名称,这个文件会包孕用默认说话编写的在法度榜样中会呈现的所有消息。这些消息以“关键字-值”的形式存储,如下:

error.validation.location = The entered location is invalid

这个文件必要存储在类的路径下,而且它的路径要作为初始化参数传送给ActionServlet作为参数进行通报时,路径的款式要相符完备Java类的标准命名规范。比如,假如资本文件存储在WEB-INFclasses目录中,文件名是ApplicationResources.properties,那么必要通报的参数值是ApplicationResources。假如文件在WEB-INFclassescom est中,那么参数值就应该是com.test. ApplicationResources.

为了实现国际化,所有的资本文件必须都存储在基础资本文件所在的目录中。基础资本文件包孕的是用默认地区说话-本地说话编写的消息。假如基础资本文件的名称是ApplicationResources.properties,那么用其他特定说话编写的资本文件的名称就应该是ApplicationResources_xx.properties(xx为ISO编码,如英语是en)。是以这些文件应包孕相同的关键字,但关键字的值是用特定说话编写的。

ActionServlet的区域初始化参数必须与一个true值一路传送,这样ActionServlet就会在用户会话中的Action.LOCALE_KEY关键字下存储一个特定用户谋略机的区域工具。现在可以运行一个国际化的web站点,它可以根据用户谋略机上的设置的区域自动以响应的说话显示。

我们还可以应用特定的字符串来调换部分消息,就象用java.text.MessageFormat的措施一样:

error.invalid.number = The number {0} is valid

我们可以把字符串{0}调换成任何我们必要的数字。标签属性如下:

属性

描述

Key

资本文件中定义消息关键字

Locale

用户会话中存储的区域工具的属性名称。若没有设置,默认值是Action.LOCALE_KEY

Bundle

在利用法度榜样高低文中,存储资本工具的属性的名称。假如没有设置这个属性,默认值是Action.MESSAGE_KEY

arg0

第一个调换参数值

arg1

第二个调换参数值

arg2

第三个调换参数值

arg3

第四个调换参数值

例如:资本文件中定义了一个消息:

info.myKey = The numbers entered are {0},{1},{2},{3}

我们可应用下面的消息标记:

这个信息标记输出到JSP页会显示为:The numbers entered are 5,6,7,8

4.2 逻辑标记

逻辑库的标记能够用来处置惩罚外不雅逻辑而不必要应用scriptlet。Struts逻辑标签库包孕的标记能够有前提地孕育发生输出文本,在工具聚拢中轮回从而重复地孕育发生输出文本,以及利用法度榜样流程节制。它也供给了一组在JSP页中处置惩罚流程节制的标记。这些标记封装在文件名为struts-logic.tld的标记包中。逻辑标记库定义的标记能够履行下列三个功能:

l前提逻辑

l重复

l转发/重定向相应

4.2.1 前提逻辑

struts有三类前提逻辑。第一类可以对照下列实体与一个常数的大年夜小:

lcookie

l哀求参数

lbean或bean的参数

l哀求标头

以下列出了这一类标记:

标记

功能

假如常数与被定义的实体相等,返回true

假如常数与被定义的实体不相等,返回true

假如常数大年夜于即是被定义的实体,返回true

假如常数小于即是被定义的实体,返回true

假如常数小于被定义的实体,返回true

假如常数大年夜于被定义的实体,返回true

这一类的所有标记有相同的属性

属性

描述

Value

要进行对照的常数值

Cookie

要进行对照的HTTP cookie的名称

Header

要进行对照的HTTP哀求标头的名称

parameter

要进行对照的HTTP哀求参数的名称

Name

假如要进行对照的是bean或bean的属性,则这个属性代表bean的名称

property

要进行对照的bean属性的名称

Scope

Bean的感化域,假如没有指定感化域,则它的搜索范围是从页到利用法度榜样

例如:

The entered name is SomeName

断命名为”name”的哀求参数的值是否是”SomeName”。

The value of bean.Prop is greater than 7

判断在页的感化域中是否有一个名为”bean”的bean,它有一个prop属性,这个属性的值是否大年夜于7。假如这个属机能够转化为数值,就进行数值对照,否则就进行字符串对照。

第二类前提标记定义了两个标记:

l

l

它们的功能是在谋略标记体之前判断特定的项目是否存在。标记的属性和属性值抉择了要进行反省的项目。

属性

描述

Cookie

由这个属性指定的cookie将被反省是否存在

Header

由这个属性指定的哀求标头将被反省是否存在

parameter

由这个属性指定的哀求参数将被反省是否存在

Name

假如没有设置property属性,那么有这个属性指定的bean将被反省是否存在。假如设置了,那么bean和bean属性都将被反省是否存在。

property

反省有name属性指定的bean中是否存在指定的属性

Scope

假如指定了bean的名称,这便是bean的感化域。假如没有指定感化域,搜索的范围从页到利用法度榜样感化域。

Role

反省当前已经确认的用户是否属于特殊的角色

User

反省当前已经确认的用户是否有特定的名称

例如:

The bean property bean.prop is present

标记判断在页感化域中是否存在一个名为”bean”的bean,这个bean有一个prop属性。

第三类前提标记对照繁杂,这些标记根据模板匹配的结果反省标记体的内容。换句话说,这些标记判断一个指定项目的值是否是一个特定常数的子字符串:

l

l

这些标记容许JSP引擎在发清楚明了匹配或是没有发明时谋略标记主体。属性如下:

属性

描述

Cookie

要进行对照的HTTP cookie的名称

Header

要进行对照的的HTTP标头 的名称

parameter

要进行对照的的HTTP哀求参数的名称

Name

若要对bean或bean的属性进行对照,这个属性是用户指定bean的名称

location

假如设置了这个属性的值,将会在这个指定的位置(索引值)进行匹配

scope

假如对bean进行对照,这个属性指定了bean的感化域。假如没有设置这个参数,搜索范围是从页到利用法度榜样感化域

property

要进行对照的bean的属性名称

value

要进行对照的常数值

例如:

The parameter name is a sub-string of the string xyz from index 1

标记反省名为”name”的哀求参数是否是”xyz”的子字符串,然则子字符串必须从”xyz”的索引位置1开始(也便是说子字符串必须是”y”或”yz”)。

4.2.2 重复标记

在逻辑标记库中定义了标记,它能够根据特定聚拢中元素的数目对标记体的内容进行重复的反省。聚拢的类型可所以java.util.Iterator,java.util.Collection

,java.util.Map或是一个数组。有三种措施可以定义这个聚拢:

l应用运行光阴表达式来返回一个属性聚拢的聚拢

l将聚拢定义为bean,并且应用name属性指定存储属性的名称。

l应用name属性定义一个bean,并且应用property属性定义一个返回聚拢的bean属性。

当前元素的聚聚会会议被定义为一个页感化域的bean。属性如下,所有这些属性都能应用运行时表达式。

属性

描述

collection

假如没有设置name属性,它就指定了要进行重复的聚拢

Id

页感化域bean和脚本变量的名称,它保存着聚拢中当前元素的句柄

indexed

页感化域JSP bean的名称,它包孕着每次重复完成后聚拢确当前索引

Length

重复的最大年夜次数

Name

作为聚拢的bean的名称,或是一个bean名称,它由property属性定义的属性,是个聚拢

Offset

重复开始位置的索引

property

作为聚拢的Bean属性的名称

Scope

假如指定了bean名称,这个属性设置bean的感化域。若没有设置,搜索范围从页到利用法度榜样感化域

Type

为当前定义的页感化域bean的类型

例如:

type=”java.lang.Integer”

offset=”1”

length=”2”>

代码将从列表中的第一个元素开始重复两个元素并且能够让当前元素作为页感化域和java.lang.Integer类型的脚本变量来应用。也便是说,假如myList包孕元素1,2,3,4等,代码将会打印1和2。

4.2.3 转发和重定向标记

转发标记

标记能够将相应转发给重定向到特定的全局ActionForward上。ActionForward的类型抉择了是应用PageContext转发相应,照样应用sendRedirect将相应进行重定向。此标记只有一个”name”属性,用来指定全局ActionForward的名称,例如:

重定向标记

标记是一个能够履行HTTP重定向的强大年夜对象。根据指定的不合属性,它能够经由过程不合的要领实现重定向。它还容许开拓职员指定重定向URL的查询参数。属性如下:

属性

描述

Forward

映射了资本相对路径的ActionForward

Href

资本的完备URL

Page

资本的相对路径

Name

Map类型的页名称,哀求,会话或法度榜样属性的名称,此中包孕要附加大年夜哦重定向URL(假如没有设置 property属性)上的“名称-值”参数。或是具有Map类型属性的bean名称,此中包孕相同的信息(没有设置property属性)

Property

Map类型的bean属性的名称。Bean的名称由name属性指定。

Scope

假如指定了bean的名称,这个属性指定搜索bean的范围。假如没有设置,搜索范围从页到利用法度榜样感化域

ParamID

定义特定查询参数的名称

ParamName

字符串类型的bean的名称,此中包孕查询参数的值(假如没有设置paramProperty属性);或是一个bean的名称,它的属性(在paramProperty属性中指定)包孕了查询参数值

paramProperty

字符串bean属性的名称,此中包孕着查询参数的值

ParamScope

ParamName定义的bean的搜索范围

应用这个标记时至少要指定forward,href或page中的一个属性,以便标明将相应重定向到哪个资本。

4.3 HTML标记

Struts HTML标记可以大年夜致地分为以下几个功能:

l显示表单元素和输入控件

l显示差错信息

l显示其他HTML元素

4.3.1 显示表单元素和输入控件

struts将HTML表单与为表单操作而定义的ActionForm bean慎密联系在一路。表单输入字段的名称与ActionForm bean里定义的属性名称是对应的。当第一次显示表单时,表单的输入字段是从ActionForm bean中移植过来的,当表单被提交时,哀求参数将移植到ActionForm bean实例。

所有可以在标记中应用的用来显示HTML输入控件的内嵌标记都应用下列属性来定义JavaScript事故处置惩罚器。

属性

描述

Onblur

字段掉去了焦点

Onchange

字段掉去了焦点并且数值被变动了

Onclick

字段被鼠标点击

Ondblclick

字段被鼠标双击

Onfocus

字段接管到输入焦点

Onkeydown

字段拥有焦点并且有键按下

onkeypress

字段拥有焦点并且有键按下并开释

Onkeyup

字段拥有焦点并且有键被开释

onmousedown

鼠标指针指向字段并且点击

onmousemove

鼠标指针指向字段并且在字段内移动

onmouseout

鼠标指针指向控件,然则指针在元素外围移动

onmouseover

鼠标指针没有指向字段,然则指针在元素内部移动

Onmouseup

鼠标指针指向字段,并且开释了鼠标按键

元素中能够被定义的其他一样平常属性有:

属性

描述

Accesskey

定义造访输入字段的快捷键

Style

定义输入字段的样式

styleClass

定义输入字段的样式表类

Tabindex

输入字段的tab顺序

表单标记

标记用来显示HTML标记,可以指定AcitonForm bean的名称和它的类名。假如没有设置这些属性,就必要有设置设置设备摆设摆设文件来指定ActionMapping以注解当前输入的是哪个JSP页,以及从映掷中检索的bean名和类。假如在ActionMapping指定的感化域中没有找到指定的名称,就会创建并存储一个新的bean,否则将应用找到的bean。

标记能够包孕与各类HTML输入字段相对应的子标记。

标记属性如下:

属性

描述

Action

与表单相关的操作。在设置设置设备摆设摆设中,这个操作也用来标识与表单相关的ActionForm bean

Enctype

表单HTTP措施的编码类型

Focus

表单中必要初始化焦点的字段

Method

表单应用的HTTP措施

Name

与表单相关的ActionForm bean的名称。假如没有设置这个属性,bean的名称将会从设置设置设备摆设摆设信息中得到

Onreset

表单复位时的JavaScript事故句柄

Onsubmit

表单提交时的JavaScript事故句柄

Scope

搜索ActionForm bean的范围。假如没有设置,将从设置设置设备摆设摆设文件中获取

Style

应用的款式

styleClass

这个元素的款式表类

Type

ActionForm bean的完备名称。假如没有设置,将从设置设置设备摆设摆设文件得到

例如:

与表单相关的操作路径是validateEmployee,而表单数据是经由过程POST通报的。对付这个表单来说,ActionForm bean的其他信息,如bean名称类型,感化域,都是从表单指定操作的ActionMapping中检索获得的:

http://www.xtong.com.cn/robornet/software/java/struts/struts2.html

您可能还会对下面的文章感兴趣: