分享
 
 
 

Struts系列之二--Struts标记库

王朝other·作者佚名  2006-12-16
窄屏简体版  字體: |||超大  

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

&nb

[1] [2] [3] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有