【问题标题】:Spring Web MVC returns unprocessed viewsSpring Web MVC 返回未处理的视图
【发布时间】:2013-12-01 19:17:24
【问题描述】:

我已经配置了一个 Spring 项目以返回基于 JSP/JSTL 的视图。但是模板返回时未处理,占位符未填写,但按照定义保持 1:1。我错过了什么?

HomeController.java

@Controller
@RequestMapping("/")
public class HomeController {
    @RequestMapping("")
    public ModelAndView home() {
        String message = "Hello, home.";

        ModelAndView modelAndView = new ModelAndView("index");
        modelAndView.getModelMap().addAttribute("message", message);
        return modelAndView;
    }
}

/WEB-INF/views/index.jsp - 此模板完全按照此处显示的方式返回,无需解析,这意味着用户可以看到${message} 而不是实际消息。 p>

<html>
<head>
<title>Home</title>
</head>
<body>
    <h1>Hello world! -</h1>
    ${message}
    <br />
</body>
</html>

/WEB-INF/web.xml - 我看到有些地方将servlet-mapping 用于jsp/WEB-INF/views,但这也无济于事。

<web-app>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/META-INF/spring/dispatcherServlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/META-INF/spring/applicationContext.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

</web-app>

/META-INF/spring/dispatcherServlet.xml

<beans>
    <mvc:annotation-driven />

    <context:component-scan base-package="my.app.controller" />

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>  

【问题讨论】:

  • 您的代码看起来不错。您调用哪个网址?你确定控制器被调用(添加一些 sytem.out 语句来验证它)?
  • 控制器被调用,我正在调用localhost:8080/myapp/,我的应用程序的根文件夹。

标签: java spring jsp spring-mvc jstl


【解决方案1】:

我认为您错过了将 JSTL jar 添加到应用程序。

来自InternalResourceViewResolver的java文档:

此解析器生成的所有视图的视图类可以通过 {@link #setViewClass} 指定。有关详细信息,请参阅 {@link UrlBasedViewResolver} 的 javadoc。默认值为 {@link InternalResourceView},或 {@link JstlView}如果存在 JSTL API


所以:

  • 如果您使用 maven,请将其添加到您的 maven 的依赖项中

pom.xml

  <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>jstl</artifactId>
     <version>1.2</version>
  </dependency>
  • 否则下载JSTL jar,并将其添加到您的网络库中。

【讨论】:

  • 我确实包含了 JSTL,它出现在我的 WEB-INF/libs 中。但是我最近将依赖项从过时的jstl 更改为javax.servlet,但只有在我最终运行mvn dependency:purge-local-repository 之后,JSTL 才会起作用。非常感谢!
猜你喜欢
  • 2010-11-15
  • 2016-01-08
  • 2011-07-20
  • 1970-01-01
  • 2023-03-13
  • 2010-12-11
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
相关资源
最近更新 更多