实现有价值的IT服务
全部博文(709)
分类: 系统运维
2006-07-10 10:37:43
Struts标记库 -------------------------------------------------------------------------------- Schensheng913 [原作] JSP视窗组件所使用的struts标记库由四类标记组成: 2. Bean标记:用来在JSP页中管理bean 3. 逻辑标记:用来在JSP页中控制流程 4. HTML标记:用来生成HTML标记,在表单中显示数据,使用会话ID对URL进行编程 5. 模板标记:使用动态模板构造普通格式的页 2.1 Bean标记 这个标记库中包含用于定义新bean、访问bean及其属性的标记。Struts框架提供了多种自定义标记用来在JSP页中处理JavaBean。这些标记被封装在一个普通的标记库中,在文件struts-bean.tld中定义了它的标记库描述器。Bean标记库将标记定义在四个子类别中: 创建和复制bean的标记 脚本变量定义标记 bean翻译标记 消息国际化标记 2.1.1 Bean复制标记 可定义新bean,可复制现有bean,还可从现有bean复制属性。 定义新字符串常数 将现有的bean复制到新定义的bean对象 复制现有bean的属性来创建新的bean 属性描述Id 新定义的bean脚本变量名称,必须设置Type 定义引入脚本变量的类Value 为id属性定义的脚本变量分配一个新的对象Name 目标bean的名称。若value属性没有设置,这个属性就必须设置property Name属性定义的bean的属性名称,用来定义新的bean 13 Scope 源bean的作用域。若没有设置,搜索范围是从页作用域到应用程序作用域toScope 目标bean的作用域。若没有设置,默认值是页作用域 例如:定义一个bean: 源bean在页作用域中被拷贝大哦请求作用域中的另一个bean: 2.1.2 定义脚本变量的标记 从多种资源中定义和生成脚本变量,这些资源包括cookie,请求参数,HTTP标头等等。属性如下: 属性描述Id 脚本变量和要定义的页作用域属性的名称Name cookie/标头/参数的名称multiple 如果这个属性设置了任意一个数值,所有匹配的cookie都会被积累并存储到一个Cookie[](一个数组)类型的bean里。若无设置,指定cookie的第一个值将作为Cookie类型的值Value 如果没有匹配的cookie或数值,就返回这个属性指定的默认值 例如: 脚本变量名称是myCookie,用来创建这个属性的cookie的名称是userName。 脚本变量名称是myHeader,请求标头的名称是Accept-Language. 脚本变量名称是myPatameter,它保存的请求参数的名称也是myParameter. 属性描述Id 脚本变量和要定义的页作用域属性的名称Page 一个内部资源forward 一个ActionForward Href 要包含的资源的完整URL 例如: 脚本变量的名称是myInclude,要检索的响应来自资源MyJsp?x=1。 属性描述 14 Id 脚本变量和要定义的页作用域属性的名称Name 资源的相对路径Input 如果这个属性不存在,资源的类型就是字符串 例如: 脚本变量的名称是myResource,要检索的资源的名称是myResource.xml。 2.1.3 显示Bean属性 标记库中定义了 属性描述Name 要进行属性显示的bean的名称property 要显示的属性的名称。如果这个属性类有java.beans.PropertyEditor,getAsText()或toString 方法会被调用Scope Bean的作用域,若没有设置,搜索范围是从页到应用程序作用域Filter 如果设置true,属性中的所有特殊HTML字符都将被转化为相应的实体引用Ignore 如果设置false,当发现属性时会产生一个请求时间异常,否则返回null 例如: myBean的属性myProperty将会被显示,作用域为请求,如果发现任何HTML特殊字符都将被转化为相应的实体引用。 2.1.4 消息标记和国际化 strtus框架支持国际化和本地化。用户在他们的计算机中定义自己所在的区域,当web应用程序需要输出一条消息时,它将引用一个资源文件,在这个文件中所有的消息都使用了适当的语言。一个应用程序可能提供了很多资源文件,每个文件提供了用不同语言编写的消息。如果没有找到所选语言的资源文件,就将使用默认的资源文件。 struts框架对国际化的支持是使用 用strtus实现国际化和本地化: 第一步要定义资源文件的名称,这个文件会包含用默认语言编写的在程序中会出现的所有消息。这些消息以“关键字-值”的形式存储,如下: error.validation.location = The entered location is invalid 这个文件需要存储在类的路径下,而且它的路径要作为初始化参数传送给ActionServlet作为参数进行传递时,路径的格式要符合完整Java类的标准命名规范。比如,如果资源文件存储在WEB-INF\classes目录中,文件名是 15 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}替换成任何我们需要的数字。 属性描述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 2.2 逻辑标记 逻辑库的标记能够用来处理外观逻辑而不需要使用scriptlet。Struts逻辑标签库包含的标记能够有条件地产生输出文本,在对象集合中循环从而重复地产生输出文本,以及应用程序流程控制。它也提供了一组在JSP页中处理流程控制的标记。这些标记封装在文件名为struts-logic.tld的标记包中。逻辑标记库定义的标记能够执行下列三个功能: 条件逻辑 重复 转发/重定向响应 16 2.2.1 条件逻辑 struts有三类条件逻辑。第一类可以比较下列实体与一个常数的大小: cookie 请求参数 bean或bean的参数 请求标头 以下列出了这一类标记: 标记功能 这一类的所有标记有相同的属性 属性描述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。如果这个属性能够转化为数值,就进行数值比较,否则就进行字符串比较。 第二类条件标记定义了两个标记: 它们的功能是在计算标记体之前判断特定的项目是否存在。标记的属性和属性值决定了要进行检查的项目。 属性描述 17 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属性。 第三类条件标记比较复杂,这些标记根据模板匹配的结果检查标记体的内容。换句话说,这些标记判断一个指定项目的值是否是一个特定常数的子字符串: 这些标记允许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”)。 2.2.2 重复标记 在逻辑标记库中定义了 18 ,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的类型 例如: type=”java.lang.Integer” offset=”1” length=”2”> <% =currentint %> 代码将从列表中的第一个元素开始重复两个元素并且能够让当前元素作为页作用域和java.lang.Integer类型的脚本变量来使用。也就是说,如果myList包含元素1,2,3,4等,代码将会打印1和2。 2.2.3 转发和重定向标记 转发标记 重定向标记 19 属性描述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中的一个属性,以便标明将响应重定向到哪个资源。 2.3 HTML标记 Struts HTML标记可以大致地分为以下几个功能: 显示表单元素和输入控件 显示错误信息 显示其他HTML元素 2.3.1 显示表单元素和输入控件 struts将HTML表单与为表单操作而定义的ActionForm bean紧密联系在一起。表单输入字段的名称与ActionForm bean里定义的属性名称是对应的。当第一次显示表单时,表单的输入字段是从ActionForm bean中移植过来的,当表单被提交时,请求参数将移植到ActionForm bean实例。 所有可以在 |