【问题标题】:Spring 3 MVC + Tiles 3 - nothing displayedSpring 3 MVC + Tiles 3 - 没有显示
【发布时间】:2013-10-26 02:35:48
【问题描述】:

我是 Tiles 的新手,正在尝试让 Tiles3 与 Spring MVC 3.2.4 一起工作。我以为我已经正确设置/配置了所有内容,但我根本没有显示任何内容。我尝试为 org.apache.tiles 启用 DEBUG 日志记录,但日志中根本没有显示任何磁贴。

我很困惑。我认为我的路径或配置一定有问题,但我不知道从哪里开始调试 Tiles 以确定它正在寻找什么,或者为什么没有找到某些东西。我尝试在 TilesView 中的每个公共方法上设置断点,但是当我尝试访问页面时,没有任何东西被调用。

webmvc-config.xml:

<!-- Tiles page resolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.tiles3.TilesViewResolver" >
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
</bean>

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<property name="definitions">
    <value>/WEB-INF/tiles.xml</value>
</property>
</bean>

/WEB-INF/tiles.xml:

<?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>
    <definition name="secure/login" template="/WEB-INF/views/tiles/layouts/default.jsp">
            <put-attribute name="body" value="/WEB-INF/views/tiles/secure/login/body.jsp"/>
    </definition>
</tiles-definitions>

我可以确认文件 /WEB-INF/views/tiles/layouts/default.jsp 和 /WEB-INF/views/tiles/secure/login/body.jsp 存在。

我希望在日志输出中出现错误消息,或者至少是一些错误消息,这样我就可以开始弄清楚这一点,但我什么也没得到。我在输出日志中看到的唯一与磁贴相关的是:

2013-10-25 13:55:05,034 [localhost-startStop-1] INFO  web.servlet.view.tiles3.TilesConfigurer - Found JSP 2.1 ExpressionFactory
2013-10-25 13:55:05,082 [localhost-startStop-1] INFO  org.apache.tiles.access.TilesAccess - Publishing TilesContext for context: org.springframework.web.servlet.view.tiles3.SpringWildcardServletTilesApplicationContext

我从哪里开始/如何开始?

我应该补充一点,我目前已经成功地让应用程序与 Tiles2 一起工作,并且正在尝试升级到 Tiles3 但没有运气。

控制器看起来像:

SecureController.java

@RequestMapping("/secure/**")
@Controller
public class SecureController {

    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String login(ModelMap model) {
        return "secure/login";
    }
}

我可以确认正在执行“return secure/login”语句。

log4j.xml:

<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601} [%t] %-5p %c{5} - %m%n" />
        </layout>
    </appender>

    <!-- Some other loggers here too -->

    <!-- Apache Tiles -->
    <logger name="org.apache.tiles">
        <level value="TRACE" />
    </logger>


    <root>
        <level value="INFO" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>

pom.xml sn-p:

    <!-- Apache Tiles -->
    <dependency>
        <groupId>org.apache.tiles</groupId>
        <artifactId>tiles-extras</artifactId>
        <version>3.0.1</version>
    </dependency>

正在访问的 URL://localhost:8080/myapp/secure/login

【问题讨论】:

  • 您是如何发出请求的(即 url 路径是什么?)您的控制器是什么样的?你的 log4j.xml 是什么样的?您确实没有提供足够的资源让我们进行故障排除。
  • @kungfuters 我已经用您要求的附加信息更新了问题。我最初没有把它们放进去,因为我认为它们相当微不足道,但已经添加了它们。
  • 问题已解决。愚蠢的错误。有一个 InternalResourceViewResolver 埋在我没见过的更高的配置中。将其删除,一切正常。谢谢。

标签: spring tiles tiles-3


【解决方案1】:

发现问题。留下这篇文章以防其他人遇到问题。我错过了配置文件中设置 InternalResourceViewResolver 的更高配置。不幸的是,Spring 只能处理链中的一个 UrlViewResolver 或 InternalResourceViewResolver。在没有指定顺序偏好的情况下,Spring 尝试使用 InternalResourceViewResolver (JstlView) 并完全跳过 Tiles 视图解析器。

删除了另一个视图解析器,一切都按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    相关资源
    最近更新 更多