选择显示字体大小

jakarta struts 编程:使用tiles框架(第三部分)

作者:        chuck cavaness
原文:        http://www.onjava.com/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框架中蕴含着更丰富的功能。

表 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 标记的属性:
表 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)中已经描述过的定义,并且可以重载以前定义的参数。
table 14-3 列出了definition 标签支持的属性

属性名            描述
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标签。

<tiles:definition
  id=&quot;storefront.default&quot;
  page=&quot;/layouts/storefrontdefaultlayout.jsp&quot;
  scope=&quot;request&quot;>
    <tiles:put name=&quot;header&quot; value=&quot;/common/header.jsp&quot; />
    <tiles:put name=&quot;menubar&quot; value=&quot;/common/menubar.jsp&quot; />
    <tiles:put name=&quot;copyright&quot; value=&quot;/common/copyright.jsp&quot; />  
</tiles:definition>

一个完整的例子将在这章后面的&quot;declaring definitions in a jsp page&quot; 中展示

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=&quot;true&quot; 与setting type=&quot;string&quot; 是相同的.
table 14-4 列出了put 标签的属性。

属性名                描述
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=&quot;true&quot;, content
                        是 &quot;string&quot;; 如果 direct=&quot;false&quot;, content 是 &quot;page&quot;.
                        增加这个属性是为了于jsp template tags 兼容。.
name                属性的名称(name).
role                如果用户是指定的角色,那么这个标记才会起作用,否则,
                这个标记会被忽略掉,并且不会写出任何内容。
type                content 的类型(type)。有效值
                是&quot;string&quot;, &quot;page&quot;, &quot;template&quot;, 或 &quot;definition&quot;.
value                属性的值,可以是string 或者 object. 值是直接被分配
                的。 (value=&quot;avalue&quot;) 或者从一个bean 获得。一个
                value, content, 或 beanname 一定存在。
putlist 标签
     putlist 标签建立一个list,在 tile 中以值传递。 list 元素用add 标签增加。这个标签只能在insert 或definition 标签中使用。
table 14-5 列出putlist 标签的属性。

属性名        描述
name        list 的名称。这个属性是被要求的。

add 标签
     add 标签是增加一个element 到周围的list 中。这个标签只能在putlist 标签中使用。这个值可以直接被分配。 (value=&quot;avalue&quot;) 或者从一个bean中获得。 一个value 或beanname 必须被指定。
table 14-6 列出 add 标签的属性。

属性名                   描述
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)。有效值
                    是&quot;string&quot;, &quot;page&quot;, &quot;template&quot;, 或 &quot;definition&quot;.
                              如果type 属性没有指定,则 content 是没有类型的
                    (untyped)除非它从一个bean 类型中获得。.
value                      增加的值。可以是string 或者 object.

get 标签
      get 标签是从 tile 文中获得内容。并且把它插入到页面中。
table 14-7 列出get 标签的属性。

属性名        描述
flush        true 或者 false. 如果true, 当前页会在tile insertion.前输出流.
ignore        如果这个属性值被设置为 true 并且属性被指定的名字不存在,
           只会简单的返回一个什么都没有的结果。默认值是false, 它可以引
           起一个runtime exception 的抛出。
name        从 tile 范围内得到的内容的名称。这个属性是要求的。
role        如果用户是指定的角色,那么这个标记才会起作用,否则,这个标
           记会被忽略掉,并且不会写出任何内容。

getasstring 标签
     getasstring标记负责查找tile属性指定的属性值,并作为字符串传给当前的jspwriter对象,一般使用tostring()方法进行转换。如果不存在,将会抛出一个jspexception异常。表14-8列出了这个标记的属性:
table 14-8: getasstring标记属性

属性名        描述
ignore        如果这个属性值被设置为 true 并且属性被指定的名字不存在,只
           会简单的返回一个什么都没有的结果。默认值是false, 它可以引起
           一个runtime exception 的抛出。
name        属性的名称(name). 这个属性是要求的
role        如果用户是指定的角色,那么这个标记才会起作用,否则,这个标
          记会被忽略掉,并且不会写出任何内容。

useattribute标记
    useattribute 标记在指定的范围内使用tile的属性值声明了一个java 变量和一个属性。这个变量和属性由id指定一个名字,如果没有指定,则是original name 。
table 14-9 列出了useattribute tag的属性。

属性名             描述
classname       声明变量的类名
id                属性和变量所声明的名称
ignore                如果这个属性值被设置为 true 并且属性被指定的名字不存
                在,只会简单的返回一个什么都没有的结果。默认值是
                false, 它可以引起一个runtime exception 的抛出。
name                属性的名称(name). 这个属性是要求的
scope                声明属性的scope.默认是&quot;page&quot;.
importattribute标记

    importattribute 标记从tile 中插入一个属性到被请求的作用域。name 和 scope 属性是可选的。如果没有指定,所有的属性将引入到page作用域 中. 一旦引入,这个属性可以像其他在jsp中的bean一样使用。
table 14-10 列出了 importattribute 标签的属性
table 14-10: importattribute标记属性

属性名        描述
ignore        如果这个属性值被设置为 true 并且属性被指定的名字不存在,只
           会简单的返回一个什么都没有的结果。默认值是false, 它可以引起
           一个runtime exception 的抛出。
name        tile的属性名。如果没有指定,则所有的属性将被引入。
scope        被引入属性的scope属性,默认值&quot;page&quot;.
initcomponentdefinitions标记
      initcomponentdefinitions标记初始化定义工厂。
table 14-11: initcomponentdefinitions标记的属性

属性名           描述
classname    如果指定,值为创建和初始化工厂属性的类名。
file             定义文件名,此属性是必需的

作者简介:
chuck cavaness:毕业于georgia tech,获计算机工程与科学学位,在医疗,银行和b2b领域创建了许多java企业系统,同时也是o'reilly的programming jakarta struts 和 jakarta struts pocket reference两本书的作者。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons