JSP
视窗组件所使用的
struts
标记库由四类标记组成:
Bean
标记:用来在
JSP
页中管理
bean
逻辑标记:用来在
JSP
页中控制流程
HTML
标记:用来生成
HTML
标记,在表单中显示数据,使用会话
ID
对
URL
进行编程
模板标记:使用动态模板构造普通格式的页
1.1 Bean
标记
这个标记库中包含用于定义新
bean
、访问
bean
及其属性的标记。
Struts
框架提供了多种自定义标记用来在
JSP
页中处理
JavaBean
。这些标记被封装在一个普通的标记库中,在文件
struts-bean.tld
中定义了它的标记库描述器。
Bean
标记库将标记定义在四个子类别中:
创建和复制
bean
的标记
脚本变量定义标记
bean
翻译标记
消息国际化标记
1.1.1 Bean
复制标记
可定义新
bean
,可复制现有
bean
,还可从现有
bean
复制属性。
<bean:define>
标记用来:
定义新字符串常数
将现有的
bean
复制到新定义的
bean
对象
复制现有
bean
的属性来创建新的
bean
<bean:define>
标记属性:
属性
|
描述
|
Id
|
新定义的
bean
脚本变量名称,必须设置
|
Type
|
定义引入脚本变量的类
|
Value
|
为
id
属性定义的脚本变量分配一个新的对象
|
Name
|
目标
bean
的名称。若
value
属性没有设置,这个属性就必须设置
|
property
|
Name
属性定义的
bean
的属性名称,用来定义新的
bean
|
Scope
|
源
bean
的作用域。若没有设置,搜索范围是从页作用域到应用程序作用域
|
toScope
|
目标
bean
的作用域。若没有设置,默认值是页作用域
|
例如:定义一个
bean:
<bean:define id=
”
test
”
value=
”
this is a test
”
/>
源
bean
在页作用域中被拷贝大哦请求作用域中的另一个
bean:
<bean:define id=
”
targetBean
”
name=
”
sourceBean
”
scope=
”
page
”
toScope=
”
request
”
/>
1.1.2
定义脚本变量的标记
从多种资源中定义和生成脚本变量,这些资源包括
cookie,
请求参数,
HTTP
标头等等。属性如下:
属性
|
描述
|
Id
|
脚本变量和要定义的页作用域属性的名称
|
Name
|
cookie/
标头
/
参数的名称
|
multiple
|
如果这个属性设置了任意一个数值,所有匹配的
cookie
都会被积累并存储到一个
Cookie[](
一个数组
)
类型的
bean
里。若无设置,指定
cookie
的第一个值将作为
Cookie
类型的值
|
Value
|
如果没有匹配的
cookie
或数值,就返回这个属性指定的默认值
|
例如:
<bean:cookie id=
”
myCookie
”
name=
”
userName
”
/>
脚本变量名称是
myCookie
,用来创建这个属性的
cookie
的名称是
userName
。
<bean:header id=
”
myHeader
”
name=
”
Accept-Language
”
/>
脚本变量名称是
myHeader,
请求标头的名称是
Accept-Language.
<bean:parameter id=
”
myParameter
”
name=
”
myParameter
”
>
脚本变量名称是
myPatameter,
它保存的请求参数的名称也是
myParameter.
<bean:include>
标记将对一个资源的响应进行检索,并引入一个脚本变量和字符串类型的页作用域属性。这个资源可以是一个页,一个
ActionForward
或一个外部
URL
。与
<jsp:include>
的不同是资源的响应被存储到一个页作用域的
bean
中,而不是写入到输出流。属性如下:
属性
|
描述
|
Id
|
脚本变量和要定义的页作用域属性的名称
|
Page
|
一个内部资源
|
forward
|
一个
ActionForward
|
Href
|
要包含的资源的完整
URL
|
例如:
<bean:include id=
”
myInclude
”
page=
”
MyJsp?x=1
”
/>
脚本变量的名称是
myInclude
,要检索的响应来自资源
MyJsp?x=1
。
<bean:resource>
标记将检索
web
应用中的资源,并引入一个脚本变量和
InputStream
或字符串类型的页作用域属性。如果在检索资源时发生问题,就会产生一个请求时间异常。属性如下:
属性
|
描述
|
Id
|
脚本变量和要定义的页作用域属性的名称
|
Name
|
资源的相对路径
|
Input
|
如果这个属性不存在,资源的类型就是字符串
|
例如:
<bean:resource id=
”
myResource
”
name=
”
/WEB-INF/images/myResource.xml
”
/>
脚本变量的名称是
myResource
,要检索的资源的名称是
myResource.xml
。
1.1.3
显示
Bean
属性
标记库中定义了
<bean:write>
标记,用来将
bean
的属性输送到封装的
JSP
页写入器。这个标记与
<jsp:getProperty>
类似,属性如下:
属性
|
描述
|
Name
|
要进行属性显示的
bean
的名称
|
property
|
要显示的属性的名称。如果这个属性类有
Java.beans.PropertyEditor,getAsText()
或
toString
方法会被调用
|
Scope
|
Bean
的作用域,若没有设置,搜索范围是从页到应用程序作用域
|
Filter
|
如果设置
true,
属性中的所有特殊
HTML
字符都将被转化为相应的实体引用
|
Ignore
|
如果设置
false
,当发现属性时会产生一个请求时间异常,否则返回
null
|
例如:
<bean:write name=
”
myBean
”
property=
”
myProperty
”
scope=
”
request
”
filter=
”
true
”
/>
myBean
的属性
myProperty
将会被显示,作用域为请求,如果发现任何
HTML
特殊字符都将被转化为相应的实体引用。
1.1.4
消息标记和国际化
strtus
框架支持国际化和本地化。用户在他们的计算机中定义自己所在的区域,当
web
应用程序需要输出一条消息时,它将引用一个资源文件,在这个文件中所有的消息都使用了适当的语言。一个应用程序可能提供了很多资源文件,每个文件提供了用不同语言编写的消息。如果没有找到所选语言的资源文件,就将使用默认的资源文件。
struts
框架对国际化的支持是使用
<bean:message>
标记,以及使用
Java.util
数据包中定义的
Locale
和
ResourceBundle
类来实现
Java2
平台对这些任务的支持。
Java.text.MessageFormat
类定义的技术可以支持消息的格式。利用此功能,开发人员不需了解这些类的细节就可进行国际化和设置消息的格式。
用
strtus
实现国际化和本地化:
第一步要定义资源文件的名称,这个文件会包含用默认语言编写的在程序中会出现的所有消息。这些消息以“关键字
-
值”的形式存储,如下:
error.validation.location = The entered location is invalid
这个文件需要存储在类的路径下,而且它的路径要作为初始化参数传送给
ActionServlet
作为参数进行传递时,路径的格式要符合完整
Java
类的标准命名规范。比如,如果资源文件存储在
WEB-INF\classes
目录中,文件名是
ApplicationResources.properties
,那么需要传递的参数值是
ApplicationResources
。如果文件在
WEB-INF\classes\com\test
中,那么参数值就应该是
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}
替换成任何我们需要的数字。
<bean:message>
标签属性如下:
属性
|
描述
|
Key
|
资源文件中定义消息关键字
|
Locale
|
用户会话中存储的区域对象的属性名称。若没有设置,默认值是
Action.LOCALE_KEY
|
Bundle
|
在应用程序上下文中,存储资源对象的属性的名称。如果没有设置这个属性,默认值是
Action.MESSAGE_KEY
|
arg0
|
第一个替换参数值
|
arg1
|
第二个替换参数值
|
arg2
|
第三个替换参数值
|
arg3
|
第四个替换参数值
|
例如:资源文件中定义了一个消息:
info.myKey = The numbers entered are {0},{1},{2},{3}
我们可使用下面的消息标记:
<bean:message key=
”
info.myKey
”
arg0=
”
5
”
arg1=
”
6
”
arg2=
”
7
”
arg3=
”
8
”
/>
这个信息标记输出到
JSP
页会显示为:
The numbers entered are 5,6,7,8
1.2
逻辑标记
逻辑库的标记能够用来处理外观逻辑而不需要使用
scriptlet
。
Struts
逻辑标签库包含的标记能够有条件地产生输出文本,在对象集合中循环从而重复地产生输出文本,以及应用程序流程控制。它也提供了一组在
JSP
页中处理流程控制的标记。这些标记封装在文件名为
struts-logic.tld
的标记包中。逻辑标记库定义的标记能够执行下列三个功能:
1.2.1
条件逻辑
struts
有三类条件逻辑。第一类可以比较下列实体与一个常数的大小:
-
cookie
-
请求参数
-
bean
或
bean
的参数
-
请求标头
以下列出了这一类标记:
标记
|
功能
|
<equal>
|
如果常数与被定义的实体相等,返回
true
|
<notEqual>
|
如果常数与被定义的实体不相等,返回
true
|
<greaterEqual>
|
如果常数大于等于被定义的实体,返回
true
|
<lessEqual>
|
如果常数小于等于被定义的实体,返回
true
|
<lessThan>
|
如果常数小于被定义的实体,返回
true
|
<greaterThan>
|
如果常数大于被定义的实体,返回
true
|
这一类的所有标记有相同的属性
属性
|
描述
|
Value
|
要进行比较的常数值
|
Cookie
|
要进行比较的
HTTP cookie
的名称
|
Header
|
要进行比较的
HTTP
请求标头的名称
|
parameter
|
要进行比较的
HTTP
请求参数的名称
|
Name
|
如果要进行比较的是
bean
或
bean
的属性,则这个属性代表
bean
的名称
|
property
|
要进行比较的
bean
属性的名称
|
Scope
|
Bean
的作用域,如果没有指定作用域,则它的搜索范围是从页到应用程序
|
例如:
<logic:equal parameter=
”
name
”
value=
”
SomeName
”
>
The entered name is SomeName
</logic:equal>
判断名为”
name
”的请求参数的值是否是”
SomeName
”。
<logic:greaterThan name=
”
bean
”
property=
”
prop
”
scope=
”
page
”
value=
”
7
”
>
The value of bean.Prop is greater than 7
</logic:greaterThan>
判断在页的作用域中是否有一个名为”
bean
”的
bean
,它有一个
prop
属性,这个属性的值是否大于
7
。如果这个属性能够转化为数值,就进行数值比较,否则就进行字符串比较。
第二类条件标记定义了两个标记:
-
<logic:present>
-
<logic:notPresent>
它们的功能是在计算标记体之前判断特定的项目是否存在。标记的属性和属性值决定了要进行检查的项目。
属性
|
描述
|
Cookie
|
由这个属性指定的
cookie
将被检查是否存在
|
Header
|
由这个属性指定的请求标头将被检查是否存在
|
parameter
|
由这个属性指定的请求参数将被检查是否存在
|
Name
|
如果没有设置
property
属性,那么有这个属性指定的
bean
将被检查是否存在。如果设置了,那么
bean
和
bean
属性都将被检查是否存在。
|
property
|
检查有
name
属性指定的
bean
中是否存在指定的属性
|
Scope
|
如果指定了
bean
的名称,这就是
bean
的作用域。如果没有指定作用域,搜索的范围从页到应用程序作用域。
|
Role
|
检查当前已经确认的用户是否属于特殊的角色
|
User
|
检查当前已经确认的用户是否有特定的名称
|
例如:
<logic:notPresent name=
”
bean
”
property=
”
prop
”
scope=
”
page
”
>
The bean property bean.prop is present
</logic:notPresent>
标记判断在页作用域中是否存在一个名为”
bean
”的
bean
,这个
bean
有一个
prop
属性。
第三类条件标记比较复杂,这些标记根据模板匹配的结果检查标记体的内容。换句话说,这些标记判断一个指定项目的值是否是一个特定常数的子字符串:
-
<logic:match>
-
<logic:notMatch>
这些标记允许
JSP
引擎在发现了匹配或是没有发现时计算标记主体。属性如下:
属性
|
描述
|
Cookie
|
要进行比较的
HTTP cookie
的名称
|
Header
|
要进行比较的的
HTTP
标头
的名称
|
parameter
|
要进行比较的的
HTTP
请求参数的名称
|
Name
|
若要对
bean
或
bean
的属性进行比较,这个属性是用户指定
bean
的名称
|
location
|
如果设置了这个属性的值,将会在这个指定的位置
(
索引值
)
进行匹配
|
scope
|
如果对
bean
进行比较,这个属性指定了
bean
的作用域。如果没有设置这个参数,搜索范围是从页到应用程序作用域
|
property
|
要进行比较的
bean
的属性名称
|
value
|
要进行比较的常数值
|
例如:
<logic:match parameter=
”
name
”
value=
”
xyz
”
location=
”
1
”
>
The parameter name is a sub-string of the string xyz from index 1
</logic:match>
标记检查名为”
name
”的请求参数是否是”
xyz
”的子字符串,但是子字符串必须从”
xyz
”的索引位置
1
开始(也就是说子字符串必须是”
y
”或”
yz
”)。
1.2.2
重复标记
在逻辑标记库中定义了
<logic:iterate>
标记,它能够根据特定集合中元素的数目对标记体的内容进行重复的检查。集合的类型可以是
Java.util.Iterator,java.util.Collection,java.util.Map
或是一个数组。有三种方法可以定义这个集合:
-
使用运行时间表达式来返回一个属性集合的集合
-
将集合定义为
bean
,并且使用
name
属性指定存储属性的名称。
-
使用
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
的类型
|
<logic:iterate id=
”
currentInt
”
collection=
”
<% =myList %>
”
type=
”
Java.lang.Integer
”
offset=
”
1
”
length=
”
2
”
>
<% =currentint %>
</logic:iterate>
代码将从列表中的第一个元素开始重复两个元素并且能够让当前元素作为页作用域和
Java.lang.Integer
类型的脚本变量来使用。也就是说,如果
myList
包含元素
1
,
2
,
3
,
4
等,代码将会打印
1
和
2
。
1.2.3
转发和重定向标记
转发标记
<logic:forward>
标记能够将响应转发给重定向到特定的全局
ActionForward
上。
ActionForward
的类型决定了是使用
PageContext
转发响应,还是使用
sendRedirect
将响应进行重定向。此标记只有一个”
name
”属性,用来指定全局
ActionForward
的名称,例如:
<logic:forward name=
”
myGlobalForward
”
/>
重定向标记
<logic:redirect>
标记是一个能够执行
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
中的一个属性,以便标明将响应重定向到哪个资源。
1.3 HTML
标记
Struts HTML
标记可以大致地分为以下几个功能:
-
显示表单元素和输入控件
-
显示错误信息
-
显示其他
HTML
元素
1.3.1
显示表单元素和输入控件
struts
将
HTML
表单与为表单操作而定义的
ActionForm bean
紧密联系在一起。表单输入字段的名称与
ActionForm bean
里定义的属性名称是对应的。当第一次显示表单时,表单的输入字段是从
ActionForm bean
中移植过来的,当表单被提交时,请求参数将移植到
ActionForm bean
实例。
所有可以在
<form>
标记中使用的用来显示
HTML
输入控件的内嵌标记都使用下列属性来定义
JavaScript
事件处理器。
属性
|
描述
|
Onblur
|
字段失去了焦点
|
Onchange
|
字段失去了焦点并且数值被更改了
|
Onclick
|
字段被鼠标点击
|
Ondblclick
|
字段被鼠标双击
|
Onfocus
|
字段接收到输入焦点
|
Onkeydown
|
字段拥有焦点并且有键按下
|
onkeypress
|
字段拥有焦点并且有键按下并释放
|
Onkeyup
|
字段拥有焦点并且有键被释放
|
onmousedown
|
鼠标指针指向字段并且点击
|
onmousemove
|
鼠标指针指向字段并且在字段内移动
|
onmouseout
|
鼠标指针指向控件,但是指针在元素外围移动
|
onmouseover
|
鼠标指针没有指向字段,但是指针在元素内部移动
|
Onmouseup
|
鼠标指针指向字段,并且释放了鼠标按键
|
<form>
元素中能够被定义的其他一般属性有:
属性
|
描述
|
Accesskey
|
定义访问输入字段的快捷键
|
Style
|
定义输入字段的样式
|
styleClass
|
定义输入字段的样式表类
|
Tabindex
|
输入字段的
tab
顺序
|
表单标记
<html:form>
标记用来显示
HTML
标记,可以指定
AcitonForm bean
的名称和它的类名。如果没有设置这些属性,就需要有配置文件来指定
ActionMapping
以表明当前输入的是哪个
JSP
页,以及从映射中检索的
bean
名和类。如果在
ActionMapping
指定的作用域中没有找到指定的名称,就会创建并存储一个新的
bean
,否则将使用找到的
bean
。
<form>
标记能够包含与各种
HTML
输入字段相对应的子标记。
<html:form>
标记属性如下:
属性
|
描述
|
Action
|
与表单相关的操作。在配置中,这个操作也用来标识与表单相关的
ActionForm bean
|
Enctype
|
表单
HTTP
方法的编码类型
|
Focus
|
表单中需要初始化焦点的字段
|
Method
|
表单使用的
HTTP
方法
|
Name
|
与表单相关的
ActionForm bean
的名称。如果没有设置这个属性,
bean
的名称将会从配置信息中获得
|
Onreset
|
表单复位时的
JavaScript
事件句柄
|
Onsubmit
|
表单提交时的
JavaScript
事件句柄
|
Scope
|
搜索
ActionForm bean
的范围。如果没有设置,将从配置文件中获取
|
Style
|
使用的格式
|
styleClass
|
这个元素的格式表类
|
Type
|
ActionForm bean
的完整名称。如果没有设置,将从配置文件获得
|
例如:
<html:form action=
”
validateEmploee.do
”
method=
”
post
”
>
</html:form>
与表单相关的操作路径是
validateEmployee,
而表单数据是通过
POST
传递的。对于这个表单来说,
ActionForm bean
的其他信息,如
bean
名称类型,作用域,都是从表单指定操作的
ActionMapping
中检索得到的:
<form-beans>
<form-bean name=
”
empForm
”
type=
”
com.example.EmployeeForm
”
/>
</form-beans>
<action-mappings>
<action path=
”
/validateEmployee
”
type=
”
com.example.ValidateExampleAction
”
name=
”
empForm
”
scope=
”
request
”
input=
”
/employeeInput.jsp
”
>
<forward name=
”
success
”
path=
”
/employeeOutput.jsp
”
>
</action>
</action-mapping>
如果配置文件中包含上述信息,并且请求
URI
的
*.do
被映射到
ActionServlet
,与表单相关的
ActionForm bean
的名称,类型和作用域分别是
empForm,com.example.EmployeeForm
和
request.
这些属性也可以使用
<html:form>
标记属性进行显示的定义。
以下标记必须嵌套在
<html:form>
标记里
按钮和取消标记
<html:button>
标记显示一个按钮控件;
<html:cancel>
标记显示一个取消按钮。属性如下:
属性
|
描述
|
Property
|
定义在表单被提交时返回到服务器的请求参数的名称
|
Value
|
按钮上的标记
|
复位和提交标记
<html:reset>
和
<html:submit>
标记分别能够显示
HTML
复位按钮和提交按钮。
文本和文本区标记
<html:text>
和
<html:textarea>
标记分别
HTML
文本框和文本区,属性如下:
属性
|
描述
|
Property
|
定义当表单被提交时送回到服务器的请求参数的名称,或用来确定文本元素当前值的
bean
的属性名称
|
Name
|
属性被查询的
bean
的名称,它决定了文本框和文本区的值。如果没有设置,将使用与这个内嵌表单相关的
ActionForm
的名称
|
<html:text>
标记还有以下属性:
属性
|
描述
|
Maxlength
|
能够输入的最大字符数
|
Size
|
文本框的大小(字符数)
|
<html:textarea>
标记特有的属性如下:
属性
|
描述
|
Rows
|
文本区的行数
|
Cols
|
文本区的列数
|
检查框和复选框标记
<html:checkbox>
标记能够显示检查框控件。
<html:multibox>
标记能够显示
HTML
复选框控件,请求对象在传递检查框名称时使用的
getParameterValues()
调用将返回一个字符串数组。属性如下:
属性
|
描述
|
Name
|
Bean
的名称,其属性会被用来确定检查是否以选中的状态显示。如果没有设置,将使用与这个内嵌表单相关的
ActionFrom bean
的名称。
|
Property
|
检查框的名称,也是决定检查框是否以选中的状态显示的
bean
属性名称。在复选框的情况下,这个属性必须是一个数组。
|
Value
|
当检查框被选中时返回到服务器的请求参数的值
|
例如:
<html:checkbox property=
”
married
”
value=
”
Y
”
/>
一个名为
married
的检查框,在表单提交时会返回一个”
Y
”
.
文件标记
<html:file>
标记可以显示
HTML
文件控件。属性如下:
属性
|
描述
|
Name
|
Bean
的名称,它的属性将确定文件控件中显示的内容。如果没设置,将使用与内嵌表单相关的
ActionForm bean
的名称
|
property
|
这个属性定义了当表单被提交时送回到服务器的请求参数的名称,以及用来确定文件控件中显示内容的
bean
属性名称
|
Accept
|
服务器能够处理的内容类型集。它也将对客户浏览器对话框中的可选文件类型进行过滤
|
Value
|
按钮上的标记,这个按钮能够在本地文件系统中浏览文件
|
单选钮标记
<html:radio>
标记用来显示
HTML
单选钮控件,属性如下:
属性
|
描述
|
Name
|
Bean
的名称,其属性会被用来确定单选钮是否以选中的状态显示。如果没有设置,将使用与这个内嵌表单相关的
ActionFrom bean
的名称。
|
property
|
当表单被提交时送回到服务器的请求参数的名称,以及用来确定单选钮是否以被选中状态进行显示的
bean
属性的名称
|
Value
|
当单选钮被选中时返回到服务器的值
|
隐藏标记
<html:hidden>
标记能够显示
HTML
隐藏输入元素,属性如下:
属性
|
描述
|
Name
|
Bean
的名称,其属性会被用来确定隐藏元素的当前值。如果没有设置,将使用与这个内嵌表单相关的
ActionFrom bean
的名称。
|
property
|
定义了当表单被提交时送回到服务器的请求参数的名称,以及用来确定隐藏元素当前值的
bean
属性的名称
|
Value
|
用来初始化隐藏输入元素的值
|
密码标记
<html:password>
标记能够显示
HTML
密码控件,属性如下:
属性
|
描述
|
maxlength
|
能够输入的最大字符数
|
Name
|
Bean
的名称,它的属性将用来确定密码元素的当前值。如果没有设置,将使用与这个内嵌表单相关的
ActionFrom bean
的名称。
|
property
|
定义了当表单被提交时送回到服务器的请求参数的名称,以及用来确定密码元素当前值的
bean
属性的名称
|
redisplay
|
在显示这个字段时,如果相应的
bean
属性已经被设置了数据,这个属性决定了是否显示密码的内容
|
Size
|
字段的大小
|
选择标记
<html:select>
标记能够显示
HTML
选择控件,属性如下:
属性
|
描述
|
multiple
|
表明这个选择控件是否允许进行多选
|
Name
|
Bean
的名称,它的属性确定了哪个。如果没有设置,将使用与这个内嵌表单相关的
ActionFrom bean
的名称。
|
property
|
定义了当表单被提交时送回到服务器的请求参数的名称,以及用来确定哪个选项需要被选中的
bean
属性的名称
|
Size
|
能够同时显示的选项数目
|
Value
|
用来表明需要被选中的选项
|
选项标记
(
这个元素需要嵌套在
<html:select>
标记里
)
<html:option>
标记用来显示
HTML
选项元素集合,属性如下:
属性
|
描述
|
collection
|
Bean
集合的名称,这个集合存储在某个作用域的属性中。选项的数目与集合中元素的数目相同。
Property
属性能够定义选项值所使用的
bean
属性,而
labelProperty
属性定义选项标记所使用的
bean
的属性
|
labelName
|
用来指定存储于某个作用域的
bean
,这个
bean
是一个字符串的集合,能够定义
<html:option>
元素的标记
(
如果标志与值不相同
)
|
labelProperty
|
与
collection
属性共同使用时,用来定义了存储于某个作用域的
bean
,这个
bean
将返回一个字符串集合,能够用来写入
<html:option>
元素的
value
属性
|
Name
|
如果这是唯一被指定的属性,它就定义了存储于某个作用域的
bean
,这个
bean
将返回一个字符串集合,能够用来写入
<html:option>
元素的
value
属性
|
property
|
这个属性在与
collection
属性共同使用时,定义了每个要显示选项值的独立
bean
的
name
属性。如果不是与
collection
属性共同使用,这个属性定义了由
name
属性指定的
bean
的属性名称
(
如果有
name
属性
)
,或是定义了一个
ActionForm bean
,这个
bean
将返回一个集合来写入选项的值
|
我们看一下这个标记的一些例子:
<html:option collection=
”
optionCollection
”
property=
”
optionValue
”
labelProperty=
”
optionLabel
”
/>
标记假设在某个作用域中有一个名为
optionCollection
的集合,它包含了一些具有
optionValue
属性的独立的
bean
,每个属性将作为一个选项的值。每个选项的标志由
bean
的
optionLabel
属性属性进行定义。
<html:option name=
”
optionValues
”
labelName=
”
optionLabels
”
/>
标记中
optionValues
代表一个存储在某个作用域中的
bean
,它是一个字符串集合,能够用来写入选项的值,而
optionLabels
代表一个存储在某个作用域中的
bean
,它也是一个字符串集合,能够用来写入选项的标志。
1.3.2
显示错误信息的标记
<html:errors>
标记能够与
ActionErrors
结合在一起来显示错误信息。这个标记首先要从当前区域的资源文件中读取消息关键字
errors.header
,然后显示消息的文本。接下去它会在
ActionErrors
对象
(
通常作为请求参数而存储在
Action.ERROR_KEY
关键字下
)
中循环,读取单个
ActionError
对象的消息关键字,从当前区域的资源文件中读取并格式化相应的消息,并且显示它们。然后它读取与
errors.footer
关键字相对应的消息并且显示出来。
通过定义
property
属性能够过滤要显示的消息,这个属性的值应该与
ActionErrors
对象中存储
ActionError
对象的关键字对应。属性如下:
属性
|
描述
|
Bundle
|
表示应用程序作用域属性的名称,它包含着消息资源,其默认值
Acion.MESSAGE_KEY
|
Locale
|
表示会话作用域属性的名称,它存储着用户当前登录的区域信息。其默认值是
Action.ERROR_KEY
|
Name
|
表示请求属性的名称,它存储着
ActionErrors
对象。其默认值是
Action.ERROR_KEY
|
property
|
这个属性指定了
ActionErrors
对象中存储每个独立
ActionError
对象的关键字,它可以过滤消息
|
例子:
<html:errors/>
显示集合中所有的错误。
<html:errors property=
”
missing.name
”
/>
显示存储在
missing.name
关键字的错误。
1.3.3
其他
HTML
标记
struts HTML
标记还定义了下列标记来显示其他
HTML
元素:
<html:html> :
显示
HTML
元素
<html:img> :
显示图象标记
<html:link> :
显示
HTML
链接或锚点
<html:rewrite> :
创建没有锚点标记的
URI
这些标记的详细内容请参照
struts
文档。
1.4
模板标记
动态模板是模块化
WEB
页布局设计的强大手段。
Struts
模板标记库定义了自定义标记来实现动态模板。
插入标记
<template:insert>
标记能够在应用程序的
JSP
页中插入动态模板。这个标记只有一个
template
属性,用来定义模板
JSP
页。要插入到模板的页是有多个
<template:put>
标记来指定的,而这些标记被定义为
<template:insert>
标记的主体内容。
放置标记
<template:put>
标记是
<template:insert>
标记内部使用的,用来指定插入到模板的资源。属性如下:
属性
|
描述
|
content
|
定义要插入的内容,比如一个
JSP
文件或一个
HTML
文件
|
direct
|
如果这个设置为
true
,由
content
属性指定的内容将直接显示在
JSP
上而不是作为包含文件
|
Name
|
要插入的内容的名称
|
Role
|
如果设置了这个属性,只有在当前合法用户具有特定角色时才能进行内容的插入。
|
获得标记
在模板
JSP
页中使用
<template:get>
标记能够检索由
<template:put>
标记插入到
JSP
页的资源。属性如下:
属性
|
描述
|
Name
|
由
<template:put>
标记插入的内容的名称
|
Role
|
如果设置了这个属性,只有在当前合法用户具有特定角色时才能进行内容的检索
|
使用模板标记
首先编写一个模板
JSP
页,它将被所有的
web
页使用:
<html>
<%@ taglib uri=
”
/template
”
prefix=
”
template
”
%>
<head>
<title></title>
</head>
<body>
<table width=
”
100%
”
height=
”
100%
”
>
<tr height=
”
10%
”
>
<td>
<template:get name=
”
header
”
/>
</td>
</tr>
<tr height=
”
80%
”
>
<td>
<template:get name=
”
content
”
/>
</td>
</tr>
<tr height=
”
10%
”
>
<td>
<template:get name=
”
footer
”
/>
</td>
</tr>
</table>
</body>
</html>
我们将这个文件命名为
template.jsp
。这个文件使用
<template:get>
标记来获得由
JSP
页使用
<template:put>
标记提供的内容,并且将内容在一个
HTML
表格中显示出来。这三个内容是标题,内容和页脚。典型的内容
JSP
会是这样:
<%@ taglib uri=
”
/template
”
prefix=
”
/template
”
%>
<template:insert template=
”
template.jsp
”
>
<template:put name=
”
header
”
content=
”
header.html
”
/>
<template:put name=
”
content
”
content=
”
employeeList.jsp
”
/>
<template:put name=
”
footer
”
content=
”
footer.html
”
/>
</template:insert>
这个应用程序
JSP
页使用
<template:insert
标记来定义模板,然后使用
<template:put>
标记将特定内容名称指定的资源放到模板
JSP
页中。如果我们有上百个布局相同的页,但突然想改变这个模板,我们只需要改变
template.jsp
文件。
posted on 2006-09-06 16:51
周锐 阅读(352)
评论(0) 编辑 收藏 所属分类:
Struts