posts - 431,  comments - 344,  trackbacks - 0

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

只有注册用户登录后才能发表评论。


网站导航: