作者: Chuck Cavaness
原文: http://www./pub/a/onjava/excerpt/progjakstruts_14/index3.html 译者: blasterboy Email: zhangjy@bpusoft.com.cn MSN: sinogod928@hotmail.com 这是Jakarta Struts编程一书中使用 Tiles框架系列的第三部分,主要阐述了如何使用标记库(包括:insert, definition, put, putList, add, get, getAsString, useAttribute, importAttribute, and initComponentDefinitions). Tiles标记库(The Tiles Tag Library) 这一部分介绍Tiles 框架使用的JSP自定义标记。表14-1列出了框架可用的标记 。这些标记与其他一些基于模板的框架所提供的标记是非常相似的,但是Tiles框架中蕴含着更丰富的功能。 标记名(Tag name) 描述(Description) Add 增加一个元素到环境列表中。 definition 创建一个Tiles组件定义。 Get 从请求作用域中得到内容(content),这个内容是put 标 记所置入的。 GetAsString 传递tile/component/template属性指定的值到当前的 JspWriter中。 importAttribute 引入一个Tiles属性到指定的上下文(context)中; initComponentDefinitions 初始化一个Tiles定义工厂。 Insert 插入一个Tiles组件。 Put 设置一个属性到一个Tiles上下文中。 PutList 声明一个列表,这个列表作为一个属性被传递。 useAttribute 在页面中使用一个属性值。 insert 标记 insert 标记是负责页面中插入内容。在一个Tiles布局中, insert标记使用属性值指定的内容。在非Tile布局中,insert标记是用来获得一个框架(layout)并且使用put 标记把内容传递给布局中。 表14-2列出insert 标记的属性: 属性名(Attribute name) 描述(Description) attribute 当前Tiles /组件上下文的属性名称,这个属性值是由 name 属性来传递的。 beanName Bean 的名称作为值来使用.Bean是从指定的内容中获得。 如果有的话,Bean可以从指定的上下文中获得。否则就得 使用pageContext.findAttribute( ) 方法获得。 如果 beanProperty 属性已经指定,也可以从相应Bean属性中 获得这个值 。 如果,这个Bean(或Bean的属性值)是某个属性类 (Direct, Instance,等等)的实例, 那么插入过程要依照类 的类型而定。另外,调用Bean 的toString( ) 方法,并返 回值为String,并传给name属性。 beanProperty Bean 属性(property)的名字,如果指定,那么这个值从 Bean的属性(property)中获得. beanScope Bean的作用范围,如果没有指定, pageContext.findAttribute( ) 方法可以使用。Bean的 范围可以是任何的JSP, 组件(component),或者模板 (template)。在后两者情况(组件,模板),bean 可 以在 Tiles (tile)/组件(component)/模板(template) 内容中 component 一个描述tile 或者 模板(template)URI的字符串. 模板 (template),页(page)和 组件(component)属 性必须有严格相同的行为 controllerUrl 在页被插入前,控制器(controller)的直接URI 。 这个URI 通常用来指示一个struct action. 这个控制器(action) 是用 来为inserted tile 准备数据的。 只能有 一个controllerUrl 或 controllerClass controllerClass 页面(page)被插入前,直接调用的一种控制(control)类 的类型。这个类是用来为inserted tile 准备数据的。 只能有 一个controllerUrl 或 controllerClass 。这个类 实现或扩展下列类之一: org.apache.struts.tiles.Controller, org.apache.struts.tiles.ControllerSupport, 或org.apache.struts.action.Action. definition Insert定义的名称。定义在一个集中的文件中被定义。现 在,仅仅一个工厂(factory)的定义可以用这个属性插入。 插入一个用definition定义的定义,用beanName="". flush true 或者 false. 如果true, 当前页会在tile insertion.前 输出流 ignore 如果这个属性设置为 true 并且name所指定的属性不存在的 话,仅仅会返回一个什么都没有写得结果。初始值设置为 false,可以抛出一个 runtime exception name 一个要被插入得实体(entity)的名字。查找按照下面的顺 序 definition, attribute, 然后 page. page 一个表示tile 或者 template 的URI字符串。template, page, 和 component 属性要严格的有同样的行为 role 如果用户是指定的角色,那么这个标记才会起作用,否则, 这个标记会被忽略掉,并且不会写出任何内容。 template 一个表示tile 或者 template 的URI字符串。template, page, 和 component 属性要严格的有同样的行为 definition 标签 definition 标签用bean的定义方法创建一个tile (template),这个新创建的bean在requested scope用一个id来标识。definition 标签的有些语法和insert 一样。新的定义可以扩展在definition factory (XML file)中已经描述过的定义,并且可以重载以前定义的参数。 属性名 描述 extends 可以用来扩展的父定义,这个父定义在definitions factory被 定义了。 id 定义bean的名称,这个属性是必需的 page 要插入template/component 的URL 。和template.一样。 role 在插入一个定义前,进行检查role.如果当前用户并没有定义这个 role,那么这个定义将不会被插入。再插入的时候进行检查, 而不是在定义的时候。 scope 在新定义bean 的时候被创建。如果没有指定, 默认值是page scope. template tile/component/template (a JSP page)的URL . 下面的片断展示了如何在JSP中使用definition标签。
一个完整的例子将在这章后面的"Declaring Definitions in a JSP Page" 中展示 put 标签 put 标签用来传递属性到一个tile 组件。 这个标签只能在insert 或 definition 标签内部使用。 put标签的值被value 属性或者标签体指定。也经常被指定值得类型。 string: 文如其名 page 或template: 内容包含指定的URL. 名字通常以URL用. definition: 内容从指定(from factory)的定义获得. 名字以已定义的名字使用。如果type 已经使用, 他就会被get 或 insert 标签插入到tile. 如果type 属性没有被指定,则内容是不确定的untyped,除非它来自一个typed bean. 提示: Setting direct="true" 与setting type="string" 是相同的. 属性名 描述 beanName Bean 的名称,和值(value)的使用方法一样.Bean是从 特殊的内容中获得。如果有的话,还可以用 pageContext.findAttribute( ) 方法获得。 如果 beanProperty 属性已经指定,可以从相应Bean属性中获 得这个值 。 beanProperty Bean 属性(property)的名字,如果指定,那么这个值从 Bean的属性(property)中获得. beanScope Bean的作用范围,如果没有指定, pageContext.findAttribute( ) 方法可以使用。Bean的 范围可以是任何的JSP, 组件(component),或者模板 (template)。在后两者情况(组件,模板),bean 可以 在 Tiles (tile)/组件(component)/模板(template) 内 容中 content Content 在tile 范围内。 属性相当于value 属性,增加是 为了于JSP template tags 兼容。. Direct Content的控制方法: true意味着Content直接显示; false 意味着content 被包含。 false 是默认值。也是指定 content 类型的一种方法。如果 direct="true", content 是 "string"; 如果 direct="false", content 是 "page". 增加这个属性是为了于JSP template tags 兼容。. Name 属性的名称(name). Role 如果用户是指定的角色,那么这个标记才会起作用,否则, 这个标记会被忽略掉,并且不会写出任何内容。 Type content 的类型(type)。有效值 是"string", "page", "template", 或 "definition". Value 属性的值,可以是String 或者 Object. 值是直接被分配 的。 (value="aValue") 或者从一个bean 获得。一个 value, content, 或 beanName 一定存在。 putList 标签 putList 标签建立一个list,在 tile 中以值传递。 list 元素用add 标签增加。这个标签只能在insert 或definition 标签中使用。 属性名 描述 Name List 的名称。这个属性是被要求的。 add 标签 add 标签是增加一个element 到周围的list 中。这个标签只能在putList 标签中使用。这个值可以直接被分配。 (value="aValue") 或者从一个bean中获得。 一个value 或beanName 必须被指定。 属性名 描述 beanName Bean 的名称,和值(value)的使用方法一样.Bean 是从特殊的内容中获得。如果有的话,还可以用 pageContext.findAttribute( ) 方法获得。 如果 beanProperty 属性已经指定,可以从相应Bean属性 中获得这个值 。 beanProperty Bean 属性(property)的名字,如果指定,那么这 个值从Bean的属性(property)中获得. beanScope Bean的作用范围,如果没有指定, pageContext.findAttribute( ) 方法可以使用。 Bean的范围可以是任何的JSP, 组件 (component),或者模板(template)。在后两者 情况(组件,模板),bean 可以在 Tiles (tile)/组件 (component)/模板(template) 内容中content 和value 属性相同。增加这个属性是为了于JSP template tags 兼容。 direct Content的控制方法: true意味着Content直接显示; false 意味着content 被包含。 false 是默认值 role 如果用户是指定的角色,那么这个标记才会起作用,否 则,这个标记会被忽略掉,并且不会写出任何内容。如果 add 标签在定义中被定义,则role不会起什么作用。. type content 的类型(type)。有效值 是"string", "page", "template", 或 "definition". 如果type 属性没有指定,则 content 是没有类型的 (untyped)除非它从一个bean 类型中获得。. value 增加的值。可以是String 或者 Object. get 标签 get 标签是从 tile 文中获得内容。并且把它插入到页面中。 属性名 描述 flush true 或者 false. 如果true, 当前页会在tile insertion.前输出流. ignore 如果这个属性值被设置为 true 并且属性被指定的名字不存在, 只会简单的返回一个什么都没有的结果。默认值是false, 它可以引 起一个runtime exception 的抛出。 name 从 tile 范围内得到的内容的名称。这个属性是要求的。 role 如果用户是指定的角色,那么这个标记才会起作用,否则,这个标 记会被忽略掉,并且不会写出任何内容。 getAsString 标签 getAsString标记负责查找tile属性指定的属性值,并作为字符串传给当前的JspWriter对象,一般使用toString()方法进行转换。如果不存在,将会抛出一个JSPException异常。表14-8列出了这个标记的属性: 属性名 描述 ignore 如果这个属性值被设置为 true 并且属性被指定的名字不存在,只 会简单的返回一个什么都没有的结果。默认值是false, 它可以引起 一个runtime exception 的抛出。 name 属性的名称(name). 这个属性是要求的 role 如果用户是指定的角色,那么这个标记才会起作用,否则,这个标 记会被忽略掉,并且不会写出任何内容。 useAttribute标记 useAttribute 标记在指定的范围内使用tile的属性值声明了一个Java 变量和一个属性。这个变量和属性由id指定一个名字,如果没有指定,则是original name 。 属性名 描述 classname 声明变量的类名 id 属性和变量所声明的名称 ignore 如果这个属性值被设置为 true 并且属性被指定的名字不存 在,只会简单的返回一个什么都没有的结果。默认值是 false, 它可以引起一个runtime exception 的抛出。 name 属性的名称(name). 这个属性是要求的 scope 声明属性的Scope.默认是"page". importAttribute 标记从tile 中插入一个属性到被请求的作用域。name 和 scope 属性是可选的。如果没有指定,所有的属性将引入到page作用域 中. 一旦引入,这个属性可以像其他在JSP中的BEAN一样使用。 Table 14-10 列出了 importAttribute 标签的属性 属性名 描述 ignore 如果这个属性值被设置为 true 并且属性被指定的名字不存在,只 会简单的返回一个什么都没有的结果。默认值是false, 它可以引起 一个runtime exception 的抛出。 name Tile的属性名。如果没有指定,则所有的属性将被引入。 scope 被引入属性的scope属性,默认值"page". initComponentDefinitions标记 initComponentDefinitions标记初始化定义工厂。 属性名 描述 classname 如果指定,值为创建和初始化工厂属性的类名。 file 定义文件名,此属性是必需的 作者简介: Chuck Cavaness:毕业于Georgia Tech,获计算机工程与科学学位,在医疗,银行和B2B领域创建了许多Java企业系统,同时也是O‘Reilly的Programming Jakarta Struts 和 Jakarta Struts Pocket Reference两本书的作者。 |
|