1 tiles组件
借用百度百科介绍的概念:
Tiles 是一种JSP布局框架,主要目的是为了将复杂的jsp页面作为一个的页面的部分机能,然后用来组合成一个最终表示用页面用的,这样的话,便于对页面的各个机能的变更及维护。 Tiles使得struts在页面的处理方面多了一种选择。并且更容易实现代码的重用。
Tiles框架是建立在JSP的include指令基础上的,但它提供了比JSP的include指令更强大的功能。Tiles框架具有如下特性:
1. 创建可重用的模板
2. 动态构建和装载页面
3. 定义可重用的Tiles组件
4. 支持国际化。
2 在spring配置文件中增加对tiles的视图解析配置
<!-- Tiles3 Resolver -->
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.tiles3.TilesViewResolver" p:order="1"/>
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions">
<list>
<value>classpath:tiles.xml</value>
</list>
</property>
</bean>
3 在classpath下编写tiles文件
<!--?xml version="1.0" encoding="UTF-8"?-->
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
"http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>
<!-- ↓↓↓====================layout==================↓↓↓ -->
<!-- base -->
<definition name="baseLayout" template="/WEB-INF/jsp/layouts/layout.jsp">
<put-attribute name="header" value="/WEB-INF/jsp/layouts/header.jsp" />
<put-attribute name="sidemenu" value=""/>
<put-attribute name="body" value="" />
<put-attribute name="footer" value="/WEB-INF/jsp/layouts/footer.jsp" />
</definition>
<!-- minyan_sidemenu -->
<definition name="home_sidemenu" extends="baseLayout">
<put-attribute name="sidemenu" value="/WEB-INF/jsp/layouts/minyan_sidemenu.jsp" />
</definition>
<!-- 主页 -->
<definition name="home" extends="home_sidemenu">
<put-attribute name="body" value="/WEB-INF/jsp/admin/common/home.jsp" />
</definition>
<!-- ↑↑↑===================MinYan===================↑↑↑ -->
</tiles-definitions>
4 编写重要的layout.jsp模版
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="robots" content="noindex,nofollow">
<meta name="author" content="">
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="format-detection" content="telephone=no, email=no, address=no">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>minyan web</title>
<link href="<%=basePath%>/css/bootstrap.min.css?<%=staticTimestamp%>" rel="stylesheet" type="text/css">
<link href="<%=basePath%>/css/font-awesome.min.css?<%=staticTimestamp%>" rel="stylesheet" type="text/css">
<link href="<%=basePath%>/lib/iCheck/skins/flat/_all.css?<%=staticTimestamp%>" rel="stylesheet" type="text/css"/>
<link href="<%=basePath%>/css/bootstrap-datetimepicker.min.css?<%=staticTimestamp%>" rel="stylesheet" type="text/css">
<link href="<%=basePath%>/lib/select2/css/select2.min.css?<%=staticTimestamp%>" rel="stylesheet" type="text/css">
<link href="<%=basePath%>/css/iconfont/iconfont.css?<%=staticTimestamp%>" rel="stylesheet" type="text/css">
<link href="<%=basePath%>/css/style.css?<%=staticTimestamp%>" rel="stylesheet" type="text/css">
<link href="<%=basePath%>/css/theme.css?<%=staticTimestamp%>" rel="stylesheet" type="text/css">
<script type="text/javascript" src="<%=basePath%>/js/jquery-1.11.1.min.js?<%=staticTimestamp%>"></script>
<script type="text/javascript" src="<%=basePath%>/lib/select2/js/select2.min.js?<%=staticTimestamp%>"></script>
<script type="text/javascript" src="<%=basePath%>/js/bootstrap.min.js?<%=staticTimestamp%>"></script>
<script type="text/javascript" src="<%=basePath%>/js/bootstrap-datetimepicker.js?<%=staticTimestamp%>"></script>
<script type="text/javascript" src="<%=basePath%>/js/bootstrap-datetimepicker.ja.js?<%=staticTimestamp%>"></script>
<script type="text/javascript" src="<%=basePath%>/lib/iCheck/icheck.min.js?<%=staticTimestamp%>" ></script>
<script type="text/javascript" src="<%=basePath%>/js/common.js?<%=staticTimestamp%>"></script>
</head>
<body class="theme-1">
<tiles:insertAttribute name="header" />
<div class="row-offcanvas row-offcanvas-left">
<tiles:insertAttribute name="sidemenu" />
<div class="content">
<tiles:insertAttribute name="body" />
<tiles:insertAttribute name="footer" />
</div>
</div>
</body>
</html>
其中tiles:insertAttribute根据项目需求定制页面模版。(jsp中用的是bootstarp不需注意class属性等)
5 在controller方法的返回值返回tiles.xml文件中的name属性即可
比如:@RequestMapping(value = "/init.do")
public String welcome(ModelMap model, HttpServletRequest request, @ModelAttribute(value = "pagenum") String p) {
HashMap<String, Object> params = new HashMap<String, Object>();
// 页码
if (StringUtils.isEmpty(p)) {
p = "0";
}
List<Account> accounts = new ArrayList<Account>();
for (int i = 0; i < 20; i++) {
Account account = new Account(i + 1, "login:" + i, "password:" + i);
accounts.add(account);
}
// 分页设定
PaggingHolder<Account> pagenation = new PaggingHolder<Account>(accounts);
pagenation.setPage(Integer.parseInt(p));
pagenation.setNrOfElements(accounts.size());
model.addAttribute("accountList", pagenation);
model.addAttribute("searchCond", params);
return "home";
}
所需jar包
http://download.csdn.net/detail/jwiang/9407369