在项目中发现用JSP取不到ModelAndView的数据,但能跳转到对应的页面,显示$("message"),而非对应的值
找了半天原因,发现在web.xml的配置有问题:
原配置为:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app>
当改成这样就可以了:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
没想到与web.xml的配置有关系。原web.xml是我建立项目用maven生成的。
还有一个原因:
一个可能是你实现了HandlerInterceptor并实现了:
void postHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.Object o, org.springframework.web.servlet.ModelAndView modelAndView) throws java.lang.Exception;
在此处修改了modelAndView
这个是网上找的(http://www.blogjava.net/javagrass/archive/2012/12/17/393107.html)
解决方法:
按照标准用法的话应该是没问题
内部其实把model 通过request.setAttribute(modelName, modelValue); 放入的
内部其实把model 通过request.setAttribute(modelName, modelValue); 放入的
protected void exposeModelAsRequestAttributes(Map<String, Object> model, HttpServletRequest request) throws Exception {
for (Map.Entry<String, Object> entry : model.entrySet()) {
String modelName = entry.getKey();
Object modelValue = entry.getValue();
if (modelValue != null) {
request.setAttribute(modelName, modelValue);
if (logger.isDebugEnabled()) {
logger.debug("Added model object '" + modelName + "' of type [" + modelValue.getClass().getName() +
"] to request in view with name '" + getBeanName() + "'");
}
}
else {
request.removeAttribute(modelName);
if (logger.isDebugEnabled()) {
logger.debug("Removed model object '" + modelName +
"' from request in view with name '" + getBeanName() + "'");
}
}
}
}
for (Map.Entry<String, Object> entry : model.entrySet()) {
String modelName = entry.getKey();
Object modelValue = entry.getValue();
if (modelValue != null) {
request.setAttribute(modelName, modelValue);
if (logger.isDebugEnabled()) {
logger.debug("Added model object '" + modelName + "' of type [" + modelValue.getClass().getName() +
"] to request in view with name '" + getBeanName() + "'");
}
}
else {
request.removeAttribute(modelName);
if (logger.isDebugEnabled()) {
logger.debug("Removed model object '" + modelName +
"' from request in view with name '" + getBeanName() + "'");
}
}
}
}
一个可能是你实现了HandlerInterceptor并实现了:
void postHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.Object o, org.springframework.web.servlet.ModelAndView modelAndView) throws java.lang.Exception;
在此处修改了modelAndView
void postHandle(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.Object o, org.springframework.web.servlet.ModelAndView modelAndView) throws java.lang.Exception;
在此处修改了modelAndView
当然还有其他配置不能忘了:
<display-name>dk</display-name> <filter> <filter-name>encodingFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:config/SpringMVC*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping>
SpringMVC_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" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!-- ViewResolver --> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/WEB-INF/page/" /> <property name="suffix" value=".jsp" /> </bean> <context:component-scan base-package="com.dk.*.controller" /> <mvc:annotation-driven /> </beans>
当然jsp中也少不了这句:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
pom.xml
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>3.2.8.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.8.RELEASE</version> </dependency> <!--jstl--> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies>
相关推荐
在本文中,我们将深入探讨SpringMVC在实现数据管理中的关键功能,包括增删改操作、分页以及数据导入。 1. **增删改操作**:在SpringMVC中,增删改(CRUD)操作是数据库交互的基础。通过Controller层接收HTTP请求,...
在本系统中,JSP主要负责展示视图层,与SpringMVC的Controller层交互,接收和展示数据。 3. **Java后端开发**:Java作为服务器端编程语言,提供了丰富的类库和框架支持,使得开发大型、复杂的Web应用变得容易。本...
SpringMVC 提供了自动的数据绑定功能,可以从请求参数自动填充到 Java 对象,同时也支持基于 Bean Validation 的数据验证。 十、上传下载支持 SpringMVC 提供了对文件上传和下载的支持,可以方便地处理用户的文件...
ModelAndView是SpringMVC中的一个关键类,它结合了模型数据和视图逻辑。在处理用户请求时,控制器通常会创建一个ModelAndView对象,然后将处理结果填充到模型中,同时指定用于渲染结果的视图。这使得开发者可以轻松...
在描述中提到的JSP页面实现,是指在SpringMVC中,控制器处理完请求后,可能会转发或重定向到一个JSP页面来呈现结果。控制器可以通过`ModelAndView`对象或者直接在`@RequestMapping`方法中返回逻辑视图名来指定JSP...
当控制器方法执行完毕,需要返回一个响应时,通常会创建一个 `ModelAndView` 对象,并添加数据到模型(Model)中,然后指定视图(View)的名字。这样,DispatcherServlet 就知道如何将数据传递给视图解析器,并渲染...
5. ViewResolver:视图解析器,根据ModelAndView中的视图名解析实际的视图。 6. View:视图,负责渲染结果,可以是JSP、FreeMarker等。 三、SpringMVC的配置 1. web.xml:配置DispatcherServlet,并设置其初始化...
3. **处理请求**:在Controller方法中,调用Service层方法获取数据,然后将数据填充到Model对象,最后使用`ModelAndView`或`Model`返回视图。 4. **视图解析**:视图可以是JSP、Thymeleaf或其他模板引擎。返回的...
SpringMVC提供了MockMvc工具,允许在不依赖Web服务器的情况下进行单元测试和集成测试。 这份教案将涵盖以上各个知识点,并可能包括实践案例和代码示例,帮助初学者理解SpringMVC的工作原理,掌握如何构建和调试...
- 控制器中,通过ModelAndView对象将数据传递到视图,同时指定要跳转的视图名称。 7. **视图解析**: - 视图解析器(如InternalResourceViewResolver)根据视图名称查找实际的JSP页面或其他视图技术。 8. **视图...
Thymeleaf是一种现代的、强大的模板引擎,它可以与SpringMVC无缝集成,通过`ModelAndView`对象传递模型数据到视图。 7. **RESTful风格** SpringMVC4支持创建RESTful API,通过`@PathVariable`、`@RequestParam`等...
7. DispatcherServlet调用ViewResolver视图解析器来解析ModelAndView中的视图。 8. ViewResolver解析出具体视图,如JSP、Freemarker等。 9. DispatcherServlet根据解析的视图进行渲染,将模型数据填充到视图中。 10....
5. **处理Controller**:在控制器层,创建一个处理请求的HTTP方法,如`@GetMapping("/page")`,接收页码参数,调用Service获取分页数据,然后将结果填充到ModelAndView或ResponseEntity中。 6. **视图渲染**:在...
ViewResolver是视图解析器,它的任务是根据ModelAndView中的视图名定位到实际的视图资源。 SpringMVC的工作流程如下: 1. 用户发送HTTP请求到达应用服务器。 2. DispatcherServlet拦截请求,通过HandlerMapping找到...
在 SpringMVC 框架中,我们可以使用 `@RequestMapping` 注解来映射注册请求,并使用 `ModelAndView` 对象来返回成功页面。 3.2 注册失败 在注册失败的情况下,我们需要显示错误信息,以便用户了解注册失败的原因。...
在MVC模式中,"Model"代表应用程序的核心逻辑和数据处理,"View"负责展示数据,而"Controller"则是两者之间的桥梁,处理用户请求并调用Model进行业务处理,最后更新View。SpringMVC通过DispatcherServlet来扮演...
SpringMVC通过ModelAndView或Model接口来传递数据到视图层。同时,它支持使用DAO(数据访问对象)模式与数据库交互,通常结合MyBatis或Hibernate等持久层框架。在示例中,我们可能会看到Service层和DAO层的实现,...
**ModelAndView** 类是 SpringMVC 中用于传递模型数据和视图信息的对象。在 Controller 方法中,我们可以创建一个 ModelAndView 对象,添加模型数据并指定视图名称,然后将其返回给 DispatcherServlet,后者会根据...
当数据校验失败时,SpringMVC可以通过`ModelAndView`对象或`Model`接口将错误信息绑定到视图。这些错误信息可以在视图模板(如JSP或Thymeleaf)中显示。此外,`BindingResult`对象包含了所有错误的详细信息,如错误...
在这个快速入门教程中,我们将深入理解 SpringMVC 的核心概念、配置以及如何创建一个简单的应用程序。 1. **MVC 模式** MVC 模式是一种设计模式,将应用程序分为三个主要部分:模型(Model)、视图(View)和控制...