`
java_frog
  • 浏览: 253261 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Jakarta Struts 编程:使用Tiles框架

阅读更多
 

发布时间:2006.03.15 19:55     来源:Matrix    作者:javaduke

作者:        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="storefront.default"   page="/layouts/storefrontDefaultLayout.jsp"   scope="request">    <tiles:put name="header" value="/common/header.jsp" />    <tiles:put name="menubar" value="/common/menubar.jsp" />    <tiles:put name="copyright" value="/common/copyright.jsp" />  </tiles: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" 是相同的.

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="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 标签中使用。

Table 14-5 列出putList 标签的属性。

属性名        描述
Name        List 的名称。这个属性是被要求的。

add 标签
     add 标签是增加一个element 到周围的list 中。这个标签只能在putList 标签中使用。这个值可以直接被分配。 (value="aValue") 或者从一个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)。有效值
                    是"string", "page", "template", 或 "definition".
                              如果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.默认是"page".

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属性,默认值"page".
initComponentDefinitions标记
      initComponentDefinitions标记初始化定义工厂。

Table 14-11: initComponentDefinitions标记的属性

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


分享到:
评论

相关推荐

    Jakarta+Struts编程(中英文双版版)

    综上所述,《Jakarta Struts编程》这本书详细介绍了如何使用Struts框架进行Web应用开发,涵盖了从基础概念到高级特性的全方位内容。通过阅读中英文双版,读者不仅能学习到Struts的使用方法,还能提升英语阅读能力,...

    Jakarta.Struts编程

    - **Tiles框架**:Struts的Tiles组件允许开发者定义和重用页面布局,提高了视图的复用性和可维护性。 - **国际化与本地化**:Struts支持多语言,通过资源文件管理不同语言的文本,轻松实现应用的国际化。 - **异常...

    Programming Jakarta Struts

    《Programming Jakarta Struts》这本书是Java Web开发领域中的一本经典之作,主要聚焦于Struts框架的使用和实践。Struts是由Apache软件基金会维护的一个开源项目,它为构建基于MVC(Model-View-Controller)设计模式...

    struts编程思想初探

    ##### 5.1 使用JBuilder实现Struts编程 - **创建项目**:首先在JBuilder中创建一个新的Struts项目。 - **配置环境**:确保所有的Struts依赖都被正确配置。 - **编写代码**:根据Struts的体系结构编写Action、...

    jakarta-struts-1.2.0-lib

    5. **Tiles框架集成**:Struts 1.2.0支持Tiles框架,允许开发者创建可重用的页面布局(Tiles),提高了页面模板的复用性。 6. **国际化与本地化**:Struts支持多语言环境,通过资源文件(.properties)实现应用程序...

    Struts编程源代码

    4. **Tiles框架**:Struts常与Tiles框架结合使用,来实现视图的布局和组合。Tiles允许开发者定义可重用的视图模板,提高了页面设计的灵活性和模块化。 5. **国际化与本地化**:Struts支持国际化的功能,通过资源...

    ⑤jakarta-struts-20040510.zip

    2. **Tiles框架集成**:Tiles是Struts的一个插件,用于构建可重用的页面布局。20040510版本可能已经增强了Tiles的功能,使得开发者可以更方便地定义和组合页面组件。 3. **配置文件优化**:Struts的配置文件...

    Struts完整框架打开即用

    7. **Tiles框架集成**:Struts2支持与Tiles框架集成,用于构建复杂的页面布局。Tiles允许将页面分解为多个组件(tiles),每个组件可以独立设计和复用。 8. **Validation框架**:Struts2内置了强大的表单验证功能,...

    Struts编程基础与实例精讲

    在实际开发中,我们还会接触到Struts的国际化支持、异常处理、 Tiles框架集成、自定义标签等高级特性。例如,通过修改配置文件,我们可以轻松地实现多语言支持。异常处理允许我们统一处理程序中的错误,提供更友好的...

    0积分:Struts精采文章合集.rar

    4. **Tiles框架**:Struts常与Tiles框架结合使用,Tiles允许开发者创建可重用的页面布局,提高页面设计的效率和一致性。 5. **国际化和本地化**:Struts支持国际化,通过资源bundle文件实现不同语言环境下的文本...

    精通struts基于mvc的网络编程pdf

    Struts是Apache软件基金会旗下Jakarta项目的一个子项目,它是一个开源的Java Web应用程序框架,主要基于Model-View-Controller(MVC)设计模式。这个框架使得开发者能够更有效地构建可维护、可扩展且结构清晰的Web...

    struts定点学习

    Struts是Apache软件基金会 Jakarta项目下的一个开源框架,主要用于构建基于Java的企业级Web应用程序。它提供了MVC(Model-View-Controller)设计模式的实现,帮助开发者更好地组织和管理应用程序的业务逻辑、用户...

    Struts快速学习指南

    12. **Tiles框架**: Struts的一个扩展,用于创建复杂的页面布局。它允许你定义可重用的页面组件,便于维护和构建大型应用。 学习Struts的过程中,除了理解上述概念,还需要动手实践,编写Action类、ActionForm、...

    Struts帮助文档.rar

    通过使用JSP标签库(如Struts的Tiles框架),可以实现模板化的页面布局。 7. **RequestProcessor**:预定义的处理器,用于处理HTTP请求并调用ActionServlet。 8. **ActionContext**:提供了当前请求上下文的相关...

    Struts2.0学习

    7. **Tiles框架集成**:Struts2可以与Tiles框架集成,实现页面布局和组件化。Tiles允许定义可重用的页面模板,提高视图的复用性和可维护性。 8. **Struts2插件**:Struts2有一个丰富的插件库,如Struts2-dojo-...

    模拟struts

    5. **Tiles框架**:Struts通常与Tiles框架结合使用,用于页面布局。Tiles允许你定义可重用的页面组件,通过组合这些组件创建复杂的页面结构。 6. **Struts标签库**:Struts提供了丰富的JSP标签库,如`&lt;s:textfield&gt;...

    struts2.0学习资料

    5. **Tiles模板**:Struts2可以结合Tiles框架实现页面布局,使得页面结构更加清晰,易于维护。 6. **插件机制**:Struts2拥有强大的插件扩展能力,例如JSON插件支持JSON格式的数据交互,Ajax插件方便实现异步更新。...

    Struts.rar

    7. **Tiles**:Struts框架常常与Tiles组件一起使用,Tiles允许开发者定义和重用页面布局,创建复杂的模板系统。 8. **国际化与本地化**:Struts框架支持多语言,通过资源文件实现不同语言环境下的文本显示。 9. **...

    struts 帮助文档 全了

    6. **Tiles框架集成**:Tiles允许你定义和重用页面布局,使得构建复杂的视图结构更为简单。 7. **Struts拦截器**(Struts 2):拦截器是Struts 2中的一种强大的机制,它们可以插入到Action调用链中,实现日志记录、...

    struts中文手册

    此外,还可以结合Tiles框架进行动态页面组装,根据查询结果生成不同的视图。 5. 国际化与本地化:Struts支持多语言环境,通过资源文件(.properties)管理应用中的文本和消息,可以根据用户的浏览器设置动态选择...

Global site tag (gtag.js) - Google Analytics