为什么 Tiles 3.0.5 在 Spring web 4.1.5 上不起作用 [英] Why Tiles 3.0.5 does not work on Spring web 4.1.5

查看:42
本文介绍了为什么 Tiles 3.0.5 在 Spring web 4.1.5 上不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我将基于 Spring 的应用程序 (4.1.5) 配置为使用 Tiles 3.0.5.在tiles.xml文件中,我放置了一个不存在的文件ewfsdfsdf.jsp"来查看配置是否有效,然后我导航到hello.htm但它显示hello.jsp而不是显示任何关于找不到ewfsdfsdf.jsp文件的错误.

web.xml

<servlet-mapping><servlet-name>springapp</servlet-name><url-pattern>*.htm</url-pattern></servlet-mapping><上下文参数><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/springapp-servlet.xml</param-value></context-param></web-app>

tiles.xml

<瓷砖定义><定义名称=baseLayout"模板=/baseLayout.jsp"><put-attribute name="title" value="Title is here (Tile)"/></定义><定义名称="hello" extends="baseLayout"><put-attribute name="title" value="HELERE"/><put-attribute name="body" value="ewfsdfsdf.jsp"/></定义></tiles-定义>

baseLayout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"http://www.w3.org/TR/html4/loose.dtd"><头><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title><tiles:insertAttribute name="title"/></title><身体><div id="容器"><tiles:insertAttribute name="header"/><tiles:insertAttribute name="menu"/><tiles:insertAttribute name="body"/><tiles:insertAttribute name="footer"/>

</html>

springapp-servlet.xml

<属性名称=定义"><列表><value>/WEB-INF/tiles.xml</value></list></属性></bean><bean id="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><属性名称=前缀"><value>/WEB-INF/pages/</value></属性><属性名称=后缀"><value>.jsp</value></属性></bean></豆类>

HelloController

包 springapp.web;导入 javax.servlet.http.HttpServletRequest;导入 javax.servlet.http.HttpServletResponse;导入 org.apache.commons.logging.Log;导入 org.apache.commons.logging.LogFactory;导入 org.springframework.web.servlet.ModelAndView;导入 org.springframework.web.servlet.mvc.Controller;公共类 HelloController 实现 Controller {受保护的最终日志记录器 = LogFactory.getLog(getClass());公共HelloController(){System.err.println("HelloController 的构造函数");}@覆盖公共 ModelAndView handleRequest(HttpServletRequest 请求,HttpServletResponse 响应)抛出异常 {logger.info("返回你好视图");return new ModelAndView("你好");}}

解决方案

我可以按照这个tutorial 并将以下行添加到 springapp-servlet.xml 和两个新 jars

罐子

jsf-api.jar文件

添加了新的 viewResolver

I configured my Spring based application (4.1.5) to use Tiles 3.0.5. In tiles.xml file I put a file that does not exist "ewfsdfsdf.jsp" to see if the configuration works, then I navigated to hello.htm but it shows hello.jsp rather than showing any error about not finding ewfsdfsdf.jsp file.

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">


   <listener>
       <listener-class>org.apache.tiles.extras.complete.CompleteAutoloadTilesListener</listener-class>
   </listener>
   <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>springapp</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springapp</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>


    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/springapp-servlet.xml</param-value>
    </context-param>



</web-app>

tiles.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
  "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
  "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">

<tiles-definitions>
    <definition name="baseLayout" template="/baseLayout.jsp">
        <put-attribute name="title" value="Title is here (Tile)"/>

    </definition>

    <definition name="hello" extends="baseLayout">
        <put-attribute name="title" value="HELERE"/>
          <put-attribute name="body" value="ewfsdfsdf.jsp"/>
    </definition>
</tiles-definitions>

baseLayout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  
     "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><tiles:insertAttribute name="title"/></title>
</head>
<body>
      <div id="container">
         <tiles:insertAttribute name="header"/>
         <tiles:insertAttribute name="menu"/>
         <tiles:insertAttribute name="body"/>
         <tiles:insertAttribute name="footer"/>
      </div>
</body>
</html>

springapp-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean name="/hello.htm" class="springapp.web.HelloController" />

<bean id="tilesConfigurer"
        class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
        <property name="definitions">
            <list>
                <value>/WEB-INF/tiles.xml</value>
            </list>
        </property>
    </bean>
    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/pages/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>


</beans>

HelloController

package springapp.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

public class HelloController implements Controller {

    protected final Log logger = LogFactory.getLog(getClass());

    public HelloController(){
        System.err.println("Constructor of HelloController");
    }
    @Override
    public ModelAndView handleRequest(HttpServletRequest request,
            HttpServletResponse response) throws Exception {
        logger.info("Returning hello view");

        return new ModelAndView("hello");
    }

}

解决方案

I could solve the problem by following this tutorial and adding following line to springapp-servlet.xml and two new jars

jars

jsf-api.jar
jstl.jar

new viewResolver added

<bean id="viewResolver" class="org.springframework.web.servlet.view.tiles3.TilesViewResolver"/> 

这篇关于为什么 Tiles 3.0.5 在 Spring web 4.1.5 上不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆