Jakarta Struts 编程:使用Tiles框架

2024-01-11 11:08

本文主要是介绍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 编程:使用Tiles框架的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/594163

相关文章

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态:

使用Java将实体类转换为JSON并输出到控制台的完整过程

《使用Java将实体类转换为JSON并输出到控制台的完整过程》在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用JSON格式,用Java将实体类转换为J... 在软件开发的过程中,Java是一种广泛使用的编程语言,而在众多应用中,数据的传输和存储经常需要使用j

Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例

《Nginx使用Keepalived部署web集群(高可用高性能负载均衡)实战案例》本文介绍Nginx+Keepalived实现Web集群高可用负载均衡的部署与测试,涵盖架构设计、环境配置、健康检查、... 目录前言一、架构设计二、环境准备三、案例部署配置 前端 Keepalived配置 前端 Nginx

Python logging模块使用示例详解

《Pythonlogging模块使用示例详解》Python的logging模块是一个灵活且强大的日志记录工具,广泛应用于应用程序的调试、运行监控和问题排查,下面给大家介绍Pythonlogging模... 目录一、为什么使用 logging 模块?二、核心组件三、日志级别四、基本使用步骤五、快速配置(bas

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Python文件操作与IO流的使用方式

《Python文件操作与IO流的使用方式》:本文主要介绍Python文件操作与IO流的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python文件操作基础1. 打开文件2. 关闭文件二、文件读写操作1.www.chinasem.cn 读取文件2. 写

PyQt6中QMainWindow组件的使用详解

《PyQt6中QMainWindow组件的使用详解》QMainWindow是PyQt6中用于构建桌面应用程序的基础组件,本文主要介绍了PyQt6中QMainWindow组件的使用,具有一定的参考价值,... 目录1. QMainWindow 组php件概述2. 使用 QMainWindow3. QMainW

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

java变量内存中存储的使用方式

《java变量内存中存储的使用方式》:本文主要介绍java变量内存中存储的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、变量的定义3、 变量的类型4、 变量的作用域5、 内存中的存储方式总结1、介绍在 Java 中,变量是用于存储程序中数据