zoukankan      html  css  js  c++  java
  • 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-1背包、完全背包、多重背包、混合三种背包、二位费用背包、分组背包
    HDU1712ACboy needs your help【分组背包】
    关于kettle
    面向接口编程
    MS Sql添加描述信息 及其他信息
    记录我一个特别酷的梦
    EF 线程内唯一对象
    javascript 学习犯错记录
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/5090386.html
Copyright © 2011-2022 走看看