`
sumongh
  • 浏览: 226461 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Struts标签库详解

阅读更多
 
Struts标签库详解
 
 
4.    struts标记库

4.1 Bean标记

4.1.1    Bean复制标记

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标记库由四类标记组成:

l         Bean标记:用来在JSP页中管理bean

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

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

l         模板标记:使用动态模板构造普通格式的页

4.1 Bean标记

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

l         创建和复制bean的标记

l         脚本变量定义标记

l         bean翻译标记

l         消息国际化标记

4.1.1 Bean复制标记

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

<bean:define>标记用来:

l         定义新字符串常数

l         将现有的bean复制到新定义的bean对象

l         复制现有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”/>

4.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。

  

4.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特殊字符都将被转化为相应的实体引用。

  

4.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

  

4.2 逻辑标记

逻辑库的标记能够用来处理外观逻辑而不需要使用scriptlet。Struts逻辑标签库包含的标记能够有条件地产生输出文本,在对象集合中循环从而重复地产生输出文本,以及应用程序流程控制。它也提供了一组在JSP页中处理流程控制的标记。这些标记封装在文件名为struts-logic.tld的标记包中。逻辑标记库定义的标记能够执行下列三个功能:

l         条件逻辑

l         重复

l         转发/重定向响应

4.2.1 条件逻辑

struts有三类条件逻辑。第一类可以比较下列实体与一个常数的大小:

l         cookie

l         请求参数

l         bean或bean的参数

l         请求标头

 以下列出了这一类标记:

标记
 功能
 
<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。如果这个属性能够转化为数值,就进行数值比较,否则就进行字符串比较。

第二类条件标记定义了两个标记:

l         <logic:present>

l         <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属性。

第三类条件标记比较复杂,这些标记根据模板匹配的结果检查标记体的内容。换句话说,这些标记判断一个指定项目的值是否是一个特定常数的子字符串:

l         <logic:match>

l         <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”)。

4.2.2 重复标记

在逻辑标记库中定义了<logic:iterate>标记,它能够根据特定集合中元素的数目对标记体的内容进行重复的检查。集合的类型可以是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的类型
 

例如:

<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。

4.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中的一个属性,以便标明将响应重定向到哪个资源。

4.3 HTML标记

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

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

l         显示错误信息

l         显示其他HTML元素

4.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,它也是一个字符串集合,能够用来写入选项的标志。

4.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关键字的错误。

4.3.3 其他HTML标记

struts HTML标记还定义了下列标记来显示其他HTML元素:

l         <html:html> : 显示HTML元素

l         <html:img> : 显示图象标记

l         <html:link> : 显示HTML链接或锚点

l         <html:rewrite> : 创建没有锚点标记的URI

这些标记的详细内容请参照struts文档。

4.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文件。


分享到:
评论

相关推荐

    struts标签库详解

    在本文中,我们将深入探讨Struts标签库,包括它们的使用方法、功能以及如何在实际项目中应用。 一、HTML标签库 HTML标签库是Struts中最基础的标签库,它提供了与HTML元素相对应的标签,如`&lt;s:textfield&gt;`用于创建...

    struts2标签库详解(非常不错)

    这个“Struts2标签库详解(非常不错)”的资源应该包含了对Struts2所有标签的详细介绍,以及相关的API文档。 Struts2标签库的核心在于提供了一种声明式编程的方式,使得开发者可以更专注于业务逻辑,而不是繁琐的JSP...

    struts1标签库详解

    Struts1 标签库详解 Struts1 标签库是 Apache Jakarta 的一个著名的开源项目,目标是为构建基于 Java 的 web 应用程序提供一个框架。Struts 提供了非常多的标签,依据功能和使用习惯的不同被分到了五个标签库中:...

    Struts 2.1标签库详解与AJAX技术应用

    Struts 2.1标签库详解与AJAX技术应用Struts 2.1标签库详解与AJAX技术应用Struts 2.1标签库详解与AJAX技术应用Struts 2.1标签库详解与AJAX技术应用Struts 2.1标签库详解与AJAX技术应用Struts 2.1标签库详解与AJAX技术...

    JSP Struts的HTML标签库详解

    需要注意的是,虽然Struts标签库支持脚本表达式,但最佳实践是尽量减少脚本的使用,以保持页面的清晰度和可测试性。在实际开发中,结合使用Struts标签库和其他JavaServer Pages的JSTL标签,可以进一步提升代码质量。

    JSP Struts之HTML标签库详解

    Struts标签库的一个重要特性是它们支持属性的嵌套引用,这意味着可以使用`.`来访问对象的深层属性,如`property="foo.bar.baz"`。此外,虽然设计初衷是避免使用scriptlet,但Struts标签仍能接受scriptlet表达式,...

    Struts2标签库详解

    Struts2标签库详解 Struts2框架是Java Web开发中的一个强大工具,它提供了丰富的标签库,使得开发者能够更方便地在JSP页面中处理业务逻辑和展示数据。了解和掌握Struts2标签库是提升开发效率的关键,本文将深入解析...

    struts的标签库参考表

    ### Struts标签库详解 #### 一、Struts标签库简介 Struts是Apache软件基金会下的一个开源项目,主要用于简化Java EE应用的开发过程。它采用MVC(Model-View-Controller)架构模式来分离应用的业务逻辑与展示层。在...

    Struts配置及标签库详解

    本文将深入探讨Struts的配置以及其标签库的详细内容。 在Struts框架中,配置文件起着至关重要的作用。主要的配置文件有两个:`struts-config.xml`和`web.xml`。`struts-config.xml`是Struts的核心配置文件,它定义...

    struts2标签库struts2标签库struts2标签库

    "Struts2标签库详解" Struts2标签库是Struts2框架中的一个重要组件,它提供了一系列的标签,帮助开发者快速构建Web应用程序。在Struts2标签库中,标签可以分为UI标签和非UI标签两大类。UI标签用于生成HTML控件,如...

    Struts 标签库

    ### Struts 标签库详解 #### 一、概述 Struts 标签库是Apache Struts框架中的一部分,主要用于简化HTML表单处理和页面控制流。它提供了一系列的标签来帮助开发者更方便地与Struts框架进行交互,提高开发效率。...

    jstl和struts标签

    ### JSTL与Struts标签库详解 #### JSTL(JavaServer Pages Standard Tag Library)简介 JSTL,即JavaServer Pages Standard Tag Library(JavaServer Pages标准标签库),是为简化JavaServer Pages (JSP) 页面开发...

    struts2标签库例子

    Struts2 标签库详解 Struts2 提供了一个强大的标签库,用于简化 Web 应用程序的开发过程。这些标签可以分为两类:通用标签和 UI 标签。下面,我们将详细介绍 Struts2 标签库的使用。 4.1 通用标签 通用标签用来...

    struts2标签库详解

    Struts2标签库详解 Struts2作为一款强大的MVC框架,其标签库是其核心功能之一,极大地简化了开发者在视图层的工作,提高了开发效率。本文将深入解析Struts2标签库,帮助读者理解并掌握其用法。 1. **简介** ...

    struts2标签用法详解

    Struts2标签库是基于JavaServer Pages (JSP) 标准标签库(JSTL)的扩展,它包含了一系列与Action、结果、表单、国际化等相关的标签。这些标签使得开发者可以将业务逻辑与展示逻辑分离,从而更专注于页面的呈现。 二...

    Struts2标签库详解.rar

    在实际应用中,`Struts2标签库详解.doc`文档可能详细介绍了如何使用这些标签,包括它们的语法、属性、用法示例等。例如,`s:form`标签通常会覆盖默认的提交方法,添加验证规则,而`s:property`可以轻松地将Action中...

    struts自定义标签详解

    Struts 是一个强大的Java Web应用程序开发框架,它提供了一套丰富的自定义标签库,使得开发者在构建用户界面时能够更加方便地处理业务逻辑和数据展示。本文将详细讲解Struts中的Bean Tags、HTML Tags和Logic Tags的...

Global site tag (gtag.js) - Google Analytics