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" %>  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值