使用Apache Tiles3.x构建界面布局(二)

接着上一篇:使用Apache Tiles3.x构建界面布局(一)继续构建页面布局。

上一篇示例中已经对页面的公共部分进行了抽取,创建了布局,并且将使用的布局应用的响应页面了。

1.定义definition来改变公共部分

现在有个新变化,响应页面的footer部分需要发生点变化,这个时候仍然可以通过继承的方式来配置一个definition。

  • /WEB-INF/tiles-defs.xml 中新增definition
<definition name="tiles.override.definition" extends="tiles.index.definition">
		<put-attribute name="footer"
			value="Copy Right &lt;a href=‘http://aiilive.blog.51cto.com‘&gt;野马红尘&lt;/a&gt;"></put-attribute>
	</definition>

1.1创建响应页面/example/index_override.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<tiles:insertDefinition name="tiles.override.definition">
	<tiles:putAttribute name="title" value="这是一个有Apache Tiles构建的页面布局." />
</tiles:insertDefinition>

1.2访问:/tiles/example/index_override.jsp

注意:footer部分发生了改变,使用了tiles.override.definition的footer属性。

2.响应页面中定义body

  • /example/home.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<tiles:insertDefinition name="tiles.index.definition">
	<tiles:putAttribute name="title" value="HOME 页面." />
	<tiles:putAttribute name="body">
		<h3>这是HOME页面的body</h3>
		<ul>
			<li>Apache Tiles</li>
			<li>Sitemesh</li>
			<li>Smarty</li>
			<li>Freemarker</li>
			<li>Velocity</li>
		</ul>
	</tiles:putAttribute>
</tiles:insertDefinition>

访问:/tiles/example/home.jsp

3.通过Servlet来访问definition(tiles.index.definition),可编程式!

package secondriver.tiles.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.tiles.Attribute;
import org.apache.tiles.Definition;
import org.apache.tiles.TilesContainer;
import org.apache.tiles.access.TilesAccess;
import org.apache.tiles.request.ApplicationContext;
import org.apache.tiles.request.Request;
import org.apache.tiles.request.servlet.ServletRequest;
import org.apache.tiles.request.servlet.ServletUtil;

public class TilesServlet extends HttpServlet {

	private static final long serialVersionUID = 2721434552222217027L;

	@Override
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		ApplicationContext applicationContext = ServletUtil
				.getApplicationContext(getServletContext());

		TilesContainer container = TilesAccess.getContainer(applicationContext);
		Request currentRequest = new ServletRequest(applicationContext,
				request, response);

		Definition definition = container.getDefinition(
				"tiles.index.definition", currentRequest);
		definition.putAttribute("title", new Attribute("通过servlet访问"));
		definition.putAttribute("body", new Attribute(
				"这是通过Servlet处理后的definition."));
		container.render(definition, currentRequest);

		/**
		 * 不需要处理的时候可以直接使用definition的name
		 * 
		 * tiles.index.definition没有定义title属性
		 * 
		 * 而template文件(布局)中用到所以需要在Servlet中进行添加
		 */
		// container.render("tiles.index.definition", currentRequest);

	}
}

访问:/tiles/tilesservlet

注意:

  • 这里使用了Servlet需要在web.xml中增加Servlet的配置
<servlet>
		<servlet-name>tilesservlet</servlet-name>
		<servlet-class>secondriver.tiles.servlet.TilesServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>tilesservlet</servlet-name>
		<url-pattern>/tilesservlet</url-pattern>
	</servlet-mapping>
  • 在pom.xml中添加servlet-api:
<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.5</version>
		</dependency>

4.通过标签在响应页面上配置definition,并插入到页面中

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>

<tiles:definition name="tiles.runtime.definiation"
	template="/layout/index_layout.jsp" extends="tiles.base.definition">
	<tiles:putAttribute name="title" value="通过标签配置 definition." />
	<tiles:putAttribute name="body">
		通过tiles标签配置的运行时definition
	</tiles:putAttribute>
</tiles:definition>

<tiles:insertDefinition name="tiles.runtime.definiation"></tiles:insertDefinition>

访问:/tiles/example/runtime.jsp

本文通过多种方式展示了Tiles的使用和其灵活性。另外Tiles还可以和Freemarker,Velocity,Spring,Struts等多种框架集成使用。

具体可以参考官方文档:http://tiles.apache.org/framework/whats-new.html。

另外更多的示例:http://tiles.apache.org/download.html

时间: 2024-10-12 16:12:36

使用Apache Tiles3.x构建界面布局(二)的相关文章

使用Apache Tiles3.x构建界面布局(一)

Tiles是一个免费的开源模板Java应用程序的框架.基于复合模式简化的用户界面的构建.对于复杂的网站仍是最简单.最优雅的方式与任何MVC技术一起工作.Struts2对Tiles提供了支持,如今Tiles发展已有13个年头,成为Apache的一个独立项目,我们可以单独使用Tiles来构建用户界面布局. Tiles项目:http://tiles.apache.org/index.html Tiles的配置DTD定义:http://tiles.apache.org/framework/tiles-c

Android常用界面布局(二)

ImageView ScaleType属性, 该属性用以表示显示图片的方式 ①matrix               根据一个3x3的矩阵对其中图片进行缩放 ②fitXY                  将图片非等比例缩放到大小与ImageView相同 ③fitStart               缩放方式同FIT_CENTER,只是将图片显示在左方或上方,而不是居中 ④fitCenter           ImageView的默认状态,大图等比例缩小,小图等比例放大,整体居中显示在Im

使用 Apache Tiles 3 构建页面布局(一)

参考博客:http://aiilive.blog.51cto.com/1925756/1596059Apache Tiles是一个JavaEE应用的页面布局框架.Tiles框架提供了一种模板机制,可以为某一类页面定义一个通用的模板,该模板定义了页面的整体布局.布局由可以复用的多个块组成,每个页面可以有选择性的重新定义块而达到组件的复用.Tiles最先作为Apache Struts框架的一个组件,后来被独立为Apache的一个独立项目.Tiles项目主页:http://tiles.apache.o

WinForm界面布局控件WeifenLuo.WinFormsUI.Docking&quot;的使用 (二)

WinForm界面布局控件WeifenLuo.WinFormsUI.Docking"的使用 (二) 编写人:CC阿爸 2015-1-29 今天我想与大家继续一起分享这一伟大的控件.有兴趣的同学,可以一同探讨与学习一下,否则就略过吧. 1.    DockPanel的一点点改进: 在浏览网上的一些技术文章发现,的确有些地方还是可以进一步改进,如当双击Tab时,原先是直接把当前Tab所表示的这个窗体,从主窗体的框架上分离现来,成为一个浮动的窗体.这不是我们想要的,有些同学修改源代码,把它改成了双击关

手把手教你做安豆计算器(二)-计算器界面布局

第3节 计算器界面布局 现在起,我们就开始正式开发"计算器"应用.这一节,我们将完成计算器的界面布局,让它初具计算器的模样. 计算器界面是通过布局文件定义的.它位于项目的res\layout\activity_main.xml文件中. 这个布局文件通过java源代码MainActivity.java中的setContentView()函数,设置到界面上. @Override protected void onCreate(Bundle savedInstanceState) { sup

Android进阶——构建UI布局的多种方式总结

引言 作为Android App,给人第一印象的就是用户界面(UI),简洁友好的UI,自然会给用户优秀的体验,自然很容易就得到用户的认可和赞许,这样App才变得真正的有价值.所以作为开发App的第一步,UI尤为重要,构建UI有很多种方式:xml静态布局.java动态代码.HTML构建(借助WebView)和第三方开源框架等. 一.构成UI的基本元素--View和ViewGroup概述 在Android中绝大部分的UI组件都是存放在android.widget包及其子包.android.view包

Android入门——构建UI布局的多种方式

引言 作为Android App,给人第一印象的就是用户界面(UI),简洁友好的UI,自然会给用户优秀的体验,自然很容易就得到用户的认可和赞许,这样App才变得真正的有价值.所以作为开发App的第一步,UI尤为重要,构建UI有很多种方式:xml静态布局.java动态代码.HTML构建(借助WebView)和第三方开源框架等. 一.构成UI的基本元素--View和ViewGroup概述 在Android中绝大部分的UI组件都是存放在android.widget包及其子包.android.view包

iOS界面布局的核心以及TangramKit介绍

前言 TangramKit是iOS系统下用Swift编写的第三方界面布局框架.他集成了iOS的AutoLayout和SizeClass以及Android的五大容器布局体系以及HTML/CSS中的float和flex-box的布局功能和思想,目的是为iOS开发人员提供一套功能强大.多屏幕灵活适配.简单易用的UI布局解决方案.Tangram的中文即七巧板的意思,取名的寓意表明这个布局库可以非常灵巧和简单的解决各种复杂界面布局问题.他的同胞框架:MyLayout是一套用objective-C实现的界面

ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局

本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局 一.实现效果 二.使用纯代码自定义一个tableview的步骤 1.新建一个继承自UITableViewCell的类 2.重写initWithStyle:reuseIdentifier:方法 添加所有需要显示的子控件(不需要设置子控件的数据和frame,  子控件要添加到contentView中