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" %>  
时间: 2024-10-19 09:40:22

Spring MVC集成Tiles使用方法的相关文章

Spring MVC集成slf4j-logback

1.  Spring MVC集成slf4j-log4j 关于slf4j和log4j的相关介绍和用法,网上有很多文章可供参考,但是关于logback的,尤其是Spring MVC集成logback的,就相对少一些了,而且其中一些也有着这样那样的问题.进入正题之前先简单介绍下Spring MVC集成slf4j-log4j的过程,如下: 1)      在pom.xml文件中添加slf4j-log4j的依赖,完成后的classpath中将新增三个jar包,分别是:slf4j-api.jar.log4j

第二十六天 蛰伏的Hibernate遇到春日的暖阳 —Spring MVC 集成Hibernate使用(一)

6月7日,晴."纷纷红紫已成尘,布谷声中夏令新.夹路桑麻行不尽,始知身是太平人."        Hibernate和Spring的香艳相逢,不仅是Bean和Bean之间电光火石般的碰撞,也是XML和XML之间的萍水聚首.两种奇妙的架构,携手闯荡江湖,不仅塑造了依赖注入淋漓酣畅的快感,也让J2EE蹿红大半个地球. 第二十六天 蛰伏的Hibernate遇到春日的暖阳 -Spring MVC 集成Hibernate使用(一)

string与spring mvc集成多种技术构建复杂工程(转载)

使用spring集成其他技术,最基本的配置都是模板化的,比如配置视图模板引擎.数据库连接池.orm框架.缓存服务.邮件服务.rpc调用等,以spring的xml配置为例,我将这些配置过程整理出来,并不时更新,以备参考! spring 在普通的java工程中引入spring,只需要配置以下依赖 1 2 3 4 5 <dependency>     <groupId>org.springframework</groupId>     <artifactId>sp

Spring MVC学习:处理方法返回值的可选类型

spring mvc处理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void. * ModelAndView Java代码 1. @RequestMapping("/show1") 2. public ModelAndView show1(HttpServletRequest request, 3. HttpServletResponse response) throws Exception { 4. Mod

spring mvc文件上传方法

spring mvc上传功能很强大. spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype="multipart/form-data" 这个是上传文件必须的2.applicationContext.xml中 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolv

Spring MVC集成Spring Data Reids和Spring Session实现Session共享

说明:Spring MVC中集成Spring Data Redis和Spring Session时版本是一个坑点,比如最新版本的Spring Data Redis已经不包含Jedis了,需要自行引入.且最新版本的2.0.1会与Spring MVC 4.1.4有冲突,估计写法错了.所以要明确引入的Spring MVC版本和Spring Data Redis和Spring Session版本. 小提示:如果想要官方明确的版本可以参考Spring Boot的版本,比如我使用了1.4.7的Spring

spring mvc bean的初始化方法优先级

开始学spring mvc打卡!!! 经过测试得 实现了InitializingBean, DisposableBean接口的初始化方法和销毁方法优先级最高,但是缺点是不能够自定义方法名. 自定义的初始化方法和销毁方法其次 init-method="initMethod" destroy-method="destroyMethod" 默认的初始化方法和销毁方法优先级最低 default-init-method="defaultInit" defa

spring mvc 坑之PUT方法接收不到请求参数

spring mvc老是接收不到前台传递来的参数,搞了半天才知道spring mvc对PUT方法支持不好,难受!在web.xml文件中加入下面的过滤器应该可以解决: <filter> <filter-name>HttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class> <

为何Spring MVC可获取到方法参数名,而MyBatis却不行?【享学Spring MVC】

每篇一句 胡适:多谈些问题,少聊些主义 前言 Spring MVC和MyBatis作为当下最为流行的两个框架,大家平时开发中都在用.如果你往深了一步去思考,你应该会有这样的疑问: 在使用Spring MVC的时候,你即使不使用注解,只要参数名和请求参数的key对应上了,就能自动完成数值的封装 在使用MyBatis(接口模式)时,接口方法向xml里的SQL语句传参时,必须(当然不是100%的必须,特殊情况此处不做考虑)使用@Param('')指定key值,在SQL中才可以取到 我敢相信这绝不是我一