Spring MVC集成Tiles使用方法
首先,我们定义一个总体的tiles视图 /tiles/mainTemplate.jsp
首先使用:<tiles:getAsString name="title"/>打印tiles配置文件中定义的字符串属性title
然后是分别加载header,content,footer三个jsp页面,共同组成mainTemplate.jsp
<%@taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles"%>
<html>
<head> <title><tiles:getAsString name="title"/></title>
</head>
<body>
the title is:<tiles:getAsString name="title"/><br>
<tiles:insert name="header"/><br>
<tiles:insert name="content"/><br>
<tiles:insert name="footer"/><br>
</body>
</html>
header.content.footer页面如下:
<html>
<head>
</head>
<body>
this is from header
</body>
</html> <html>
<head>
</head>
<body>
this is from content
</body>
</html> <html>
<head>
</head>
<body>
this is from footer</body>
</html>
Spring MVC 控制类:
package Action; import java.util.ArrayList;
import java.util.List; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import model.Student; import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractCommandController; public class TilesHomeController extends AbstractCommandController { protected ModelAndView handle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, BindException arg3) throws Exception {
return null;
} protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception { return new ModelAndView("courseDetail","","");
}
}
当我们运行上面这个控制器时候,系统会自动去寻找courseDetail.jsp这个文件,但我们还没有定义这个文件,所以,我们要这样写tiles-def.xml
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration//EN"
"http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd"> <tiles-definitions>
<definition name="template" page="/tiles/mainTemplate.jsp">
<put name="title" value="default title"/>
<put name="header" value="="/tiles/header.jsp"/>
<put name="content" value="/tiles/content.jsp"/>
<put name="footer" value="/tiles/footer.jsp"/>
</definition> <!--以courseDetail命名的配置,覆盖了模板中的title和content对应的页面-->
<definition name="courseDetail" extends="template">
<put name="title" value="courseDetail title"/>
<put name="content" value="/tiles/courseContent.jsp"/>
</definition> </tiles-definitions>
/title/courseContent.jsp
<%@taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %>
<html>
<head></head>
<body>
this is courseContent
</body>
</html>
spring配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
<beans> <bean id="simpleUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/tiles.mvc">TilesController</prop>
</props>
</property>
</bean> <bean id="TilesController" class="Action.TilesHomeController">
</bean> <!-- tiles页面解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.tiles.TilesView</value>
</property>
</bean> <!-- tiles配置器-->
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/train-def.xml</value>
</list>
</property>
</bean>
</beans>
运行/title.mvc (mvc是我自定义的扩展名)我们可以看到如下结果:
courseDetail title
this is from header
this is courseDetail
this is from footer
如果我们需要在每一个页面的header部分显示一些我们从数据库里读取的数值,我们可以在不同的控制器中加入访问数据库的代码,但这样显得很啰唆,因为header部门在每个页面都是公用的,也就是说不同的页面只有content部分不同,这样,我们就会有很多冗余代码,为了解决这个问题,我们可以使用spring为我们提供的ComponentControllerSupport
package Action; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import model.Student; import org.apache.struts.tiles.ComponentContext;
import org.springframework.web.servlet.view.tiles.ComponentControllerSupport; public class HeaderTilesController extends ComponentControllerSupport { protected void doPerform(ComponentContext context, HttpServletRequest request,
HttpServletResponse response) throws Exception {
Student stu=new Student();
stu.setName("gaoxiang");
stu.setSex("male");
//tiles context中存放简单数据
context.putAttribute("name", stu.getName());
context.putAttribute("sex", stu.getSex());
//tiles context中存放对象
context.putAttribute("student", stu);
//request中存放数据
request.setAttribute("requestname", stu.getName()+"-request");
request.setAttribute("requestsex", stu.getSex()+"-request");
} }
改写train-def.xml
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration//EN"
"http://jakarta.apache.org/struts/dtds/tiles-config_1_1.dtd"> <tiles-definitions>
<definition name="template" page="/tiles/mainTemplate.jsp">
<put name="title" value="default title"/>
<put name="header" value=".header"/>
<put name="content" value="/tiles/content.jsp"/>
<put name="footer" value="/tiles/footer.jsp"/>
</definition> <definition name="courseDetail" extends="template">
<put name="title" value="courseDetail title"/>
<put name="content" value="/tiles/courseContent.jsp"/>
</definition> <definition name=".header" page="/tiles/header.jsp" controllerClass="Action.HeaderTilesController">
</definition>
</tiles-definitions>
改header.jsp
<%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles" prefix="tiles" %>
Spring MVC集成Tiles使用方法的更多相关文章
- spring mvc集成freemarker使用
freemarker作为视图技术出现的比velocity早,想当年struts风靡一时,freemarker作为视图层也风光了一把.但现在velocity作为后起之秀的轻量级模板引擎,更容易得到青睐. ...
- spring mvc集成velocity使用
目前流行的三大页面视图神器是:老牌大哥jsp.后起之秀freemarker和velocity.这里不详细比较这三者的优劣,总体来说,jsp是标配,但后面两个更严格的执行了视图与业务的分离,页面里是不允 ...
- spring mvc 集成freemarker模板
主要使用到的jar 文件:spring mvc +freemarker.jar 第一步:spring mvc 集成 freemarker <!-- 定义跳转的文件的前后缀 ,视图模式配置--&g ...
- Spring MVC集成slf4j-logback
转自: Spring MVC集成slf4j-logback 1. Spring MVC集成slf4j-log4j 关于slf4j和log4j的相关介绍和用法,网上有很多文章可供参考,但是关于logb ...
- Spring MVC集成Swagger
什么是Swagger? 大部分 Web 应用程序都支持 RESTful API,但不同于 SOAP API——REST API 依赖于 HTTP 方法,缺少与 Web 服务描述语言(Web Servi ...
- spring boot 1.x完整学习指南(含各种常见问题servlet、web.xml、maven打包,spring mvc差别及解决方法)
spring boot 入门 关于版本的选择,spring boot 2.0开始依赖于 Spring Framework 5.1.0,而spring 5.x和之前的版本差距比较大,而且应该来说还没有广 ...
- Spring Boot与Spring MVC集成启动过程源码分析
开源项目推荐 Pepper Metrics是我与同事开发的一个开源工具(https://github.com/zrbcool/pepper-metrics),其通过收集jedis/mybatis/ht ...
- Spring MVC集成Swagger2.0
在集成Swagger之前,得先说说什么是Swagger,它是用来做什么的,然后再讲讲怎么集成,怎么使用,当然,在这之前,需要了解一下OpenAPI. OpenAPI OpenAPI 3.0规范定义了一 ...
- Spring mvc集成log4j2
前期环境 Spring mvc + Maven + Idea 一.下面开始配置log4j2,先简单演示其如何配置,再仔细了解log4j2用法. 1.1 配置pom.xml,引用log4j2相关包 & ...
随机推荐
- IOS开发中UIBarButtonItem上按钮切换或隐藏实现案例
IOS开发中UIBarButtonItem上按钮切换或隐藏案例实现案例是本文要介绍的内容,这个代码例子的背景是:导航条右侧有个 edit button,左侧是 back button 和 add bu ...
- eclipse java快捷模板 快捷键大全
建议没事研究研究自己吃饭的工具,俗话说工欲善其事必先利其器嘛. 首先,快捷键这种东西大家都会知道点,但是很少人重视javaEditorTemplate这块.先介绍下Template java编辑模板 ...
- BZOJ 1025: [SCOI2009]游戏( 背包dp )
显然题目要求长度为n的置换中各个循环长度的lcm有多少种情况. 判断一个数m是否是满足题意的lcm. m = ∏ piai, 当∑piai ≤ n时是满足题意的. 最简单我们令循环长度分别为piai, ...
- C# 使用IENUMERABLE,YIELD
C# 使用IENUMERABLE,YIELD 前言 在上篇文章中我得出结论,遍历迭代器修改迭代器中项目的值未生效,是因为使用了yield return,并且每次遍历迭代器都执行返回迭代器的方法.这篇文 ...
- Qt学习之路:自定义Model三篇,自定义委托等等
http://devbean.blog.51cto.com/448512/d-8/p-2
- JVM调优总结(六)-分代垃圾回收详述2
分代垃圾回收流程示意 选择合适的垃圾收集算法 串行收集器 用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高.但是,也无法使用多处理器的优势,所以此收集器适合单处理器机器.当然,此收集器 ...
- struts2之高危远程代码执行漏洞,可造成服务器被入侵,下载最新版本进行修复
Struts2 被发现存在新的高危远程代码执行漏洞,可造成服务器被入侵,只要是Struts2版本 低于 2.3.14.3 全部存在此漏洞.目前官方已经发布了最新的版本进行修复.请将stru ...
- ORACLE FLASHBACK DATABASE 知识整理
1.知识储备 1) 只有SYSDBA有权执行,闪回前一定要记录当前SCN 2) 需要停机,并要求处于ARCHIVELOG模式中 3) 闪回日志不能被复用和归档,是自动管理的.RVWR ...
- 西门子PLC学习笔记七-(位逻辑指令)
位逻辑指令处理的对象为二进制位信号.存储在状态字"RLO"中. 1.触点与线圈指令 1)常开触点 在PLC中规定:操作数为1,则常开触点"动作(闭合)":操作数 ...
- Android imageView图片按比例缩放
android:scaleType可控制图片的缩放方式,示例代码如下: <ImageView android:id="@+id/img" android:src=" ...