我已经配置了一个 Spring 项目来返回基于 JSP/JSTL 的 View 。但模板返回时未处理,占位符未填充,但仍按定义保持 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}
而不是实际的消息。
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Hello world! -</h1>
${message}
<br />
</body>
</html>
/WEB-INF/web.xml - 我发现有些人将 jsp
的 servlet-mapping
放置到 /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>
最佳答案
我认为您错过了将 JSTL
jar 添加到应用程序。
来自InternalResourceViewResolver
的java文档:
<小时/>The view class for all views generated by this resolver can be specified via {@link #setViewClass}. See {@link UrlBasedViewResolver}'s javadoc for details. The default is {@link InternalResourceView}, or {@link JstlView} if the JSTL API is present.
所以:
- 如果您使用 maven,请将其添加到您的 maven 的依赖项
pom.xml
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
- 否则下载
JSTL
jar ,并将其添加到您的网络库中。
关于java - Spring Web MVC 返回未处理的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20316105/