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

简介:

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


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

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

 

  • /WEB-INF/tiles-defs.xml 中新增definition

1
2
3
4
< 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

1
2
3
4
5
6
<%@ 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

 wKiom1Sb96DDAm5oAAEhoooRGJE684.jpg

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



 2.响应页面中定义body

  •  /example/home.jsp

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ 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

  wKiom1Sb-gWTWy_ZAAFd6FchcBg656.jpg


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

   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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

 wKioL1Sb_h3jkXb1AAFFVrJgc_s618.jpg


 注意:

  •  这里使用了Servlet需要在web.xml中增加Servlet的配置

1
2
3
4
5
6
7
8
< 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:

 

1
2
3
4
5
< dependency >
             < groupId >javax.servlet</ groupId >
             < artifactId >servlet-api</ artifactId >
             < version >2.5</ version >
         </ dependency >



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

  

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ 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

  wKioL1ScAFvzgdFVAAFkTQLIVLw274.jpg


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



本文转自 secondriver 51CTO博客,原文链接:http://blog.51cto.com/aiilive/1596069,如需转载请自行联系原作者

相关文章
|
19天前
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
64 5
|
19天前
|
消息中间件 存储 监控
构建高可用性Apache Kafka集群:从理论到实践
【10月更文挑战第24天】随着大数据时代的到来,数据传输与处理的需求日益增长。Apache Kafka作为一个高性能的消息队列服务,因其出色的吞吐量、可扩展性和容错能力而受到广泛欢迎。然而,在构建大规模生产环境下的Kafka集群时,保证其高可用性是至关重要的。本文将从个人实践经验出发,详细介绍如何构建一个高可用性的Kafka集群,包括集群规划、节点配置以及故障恢复机制等方面。
52 4
|
1月前
|
消息中间件 分布式计算 大数据
大数据-166 Apache Kylin Cube 流式构建 整体流程详细记录
大数据-166 Apache Kylin Cube 流式构建 整体流程详细记录
63 5
|
1月前
|
存储 SQL 分布式计算
大数据-162 Apache Kylin 全量增量Cube的构建 Segment 超详细记录 多图
大数据-162 Apache Kylin 全量增量Cube的构建 Segment 超详细记录 多图
57 3
|
3月前
|
消息中间件 监控 数据挖掘
基于RabbitMQ与Apache Flink构建实时分析系统
【8月更文第28天】本文将介绍如何利用RabbitMQ作为数据源,结合Apache Flink进行实时数据分析。我们将构建一个简单的实时分析系统,该系统能够接收来自不同来源的数据,对数据进行实时处理,并将结果输出到另一个队列或存储系统中。
220 2
|
18天前
|
存储 数据挖掘 数据处理
巴别时代使用 Apache Paimon 构建 Streaming Lakehouse 的实践
随着数据湖技术的发展,企业纷纷探索其优化潜力。本文分享了巴别时代使用 Apache Paimon 构建 Streaming Lakehouse 的实践。Paimon 支持流式和批处理,提供高性能、统一的数据访问和流批一体的优势。通过示例代码和实践经验,展示了如何高效处理实时数据,解决了数据一致性和故障恢复等挑战。
99 61
|
1月前
|
Java 大数据 数据库连接
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
29 2
大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scala
|
1月前
|
SQL 分布式计算 大数据
大数据-160 Apache Kylin 构建Cube 按照日期构建Cube 详细记录
大数据-160 Apache Kylin 构建Cube 按照日期构建Cube 详细记录
41 2
|
1月前
|
SQL 消息中间件 大数据
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
50 1
|
1月前
|
SQL 大数据 Apache
大数据-159 Apache Kylin 构建Cube 准备和测试数据(二)
大数据-159 Apache Kylin 构建Cube 准备和测试数据(二)
77 1

推荐镜像

更多