`

spring-mvc值传递

阅读更多

在controller中有两种方式,获取前台页面传来的参数

页面表单: 

<form action="user.do" method="post">
    	用户名:<input type="text" name="name"/><br/>
    	年龄:<input type="text" name="age"/><br/>
    	生日:<input type="text" name="birth"/><br/>
    	<input type="submit" value="添加"/>
</form

 第一种

/**
 * 1、直接使用形参获取前台传递的参数
 * 要注意的是形参的名字必须和页面参数的名字一致
 * @param model
 * @param name
 * @param age
 * @param birth
 * @return
 */
@RequestMapping(method=RequestMethod.POST)
public String registerUser(Model model,String name,Integer age,Date birth){
	model.addAttribute("message", "注册一个用户");
	System.out.println("name:"+name + "age:"+age+"birth:"+birth);
	System.out.println("UserController.registerUser()");
	return "/WEB-INF/account/userDetail.jsp";
}

 第二种

/**
 * 2、使用对象接受前台传递的参数
 * 要注意的是前台传递的参数的名称必须和对象的属性名称一直,如果不一致则可以使用@ModelAttribute("u")String uname指定
 */
@RequestMapping(method=RequestMethod.POST)
public String registerUser(Model model,User user){
	model.addAttribute("message", "注册一个用户");
	System.out.println("name:"+user.getName() + "age:"+user.getAge()+"birth:"+user.getBirth());
	System.out.println("UserController.registerUser()");
	return "/WEB-INF/account/userDetail.jsp";
}

 

SpringMVC不支持List参数,可以先绑定json数据,然后再把json转成List。

 

SpringMVC不支持Date参数类型转换,需要在DTO上加如下注解

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")

 

private Date                     publishBegin;

 

List<String> attributeValues = JSON.parseArray(searchDTO.getFilterQuery(), String.class);

 

action的@Controller的@RequestMapping不写,那么直接去找方法的@RequestMapping,但是方法的@RequestMapping不能为空

 

controller中获取web元素

当某个方法需要使用web对象时(request,response,session,application)可以使用如下方式:

除了application,其他的对象都可以直接设为方法的形参。spring会自动将对应的对象传递给对应的形参。

而application对象可以使用session对象获取。

 

当然也可以在方法中使用response对象重定向到其他的url,这时方法最后return的url则可以视作无效。

同样的也可以使用request对象转发到其他的url。 

@RequestMapping(value="/web.do")
public String getWebElement(HttpServletRequest request,HttpServletResponse response,HttpSession session) throws IOException, ServletException{
	System.out.println("request:"+request.getParameter("pname"));
	request.setAttribute("message", "requestData");
	session.setAttribute("message", "sessionData");
	session.getServletContext().setAttribute("message", "applicationData");
	//response.sendRedirect("http://localhost:8080/tiger/account/user.do?method=add");
	//return null;
	//request.getRequestDispatcher("/WEB-INF/account/userDetail.jsp").forward(request, response);
	return "/WEB-INF/account/userDetail.jsp";
}

 将controller中数据传递到jsp页面

 

1、可以在controller中获取request对象,然后将数据设置为request对象的属性,然后使用转发的方式进入jsp即可。

2、将方法的返回值改为ModelAndView,将数据存储在ModelAndView对象中:

new ModelAndView("/WEB-INF/account/userDetail.jsp","message",message)

其中第一个参数为url,第二个参数为要传递的数据的key,第三个参数为数据对象。

要注意的是:数据默认被存放在request中。

//使用modelAndView对象将数据传递到前台。
@RequestMapping(value="/mad/showData_1.do")
public ModelAndView showData_1(){
	String message = "这个是要传递的数据";
	//其中第一个参数为url,第二个参数为要传递的数据的key,第三个参数为数据对象。
	//在这里要注意的是   数据是默认被存放在request中的。
	return new ModelAndView("/WEB-INF/account/userDetail.jsp","message",message);
}

 前台页面获取方式:

request:${requestScope.message}

 

可以在类的前面添加注解@SessionAttributes({"message","user"}) 

这个注解可以设置对应的model中参数也会在session中存储一份。该注解中的参数为一个集合,可以写多个,如上面的例子,其中message和user都是存储的数据的key.

示例程序:

@SessionAttributes({"message","user"})   //modelAndView中的对应的数据也会在session中存储一份

页面获取:

session:${sessionScope.message}

 

数据modelAndView返回一个集合

该处理方式和上面的处理方式一致,因为modelAndView接受的数据类型是Object的,集合也是一样的处理方式

//使用modelAndView对象将数据传递到前台。
//传递多个参数(不同类型的)
@RequestMapping(value="/mad/showData_2.do")
public ModelAndView showData_2(){
	String message = "这个是要传递的数据";
	UserDTO user = new UserDTO("张三", 12, new Date());
	List<User> us= new ArrayList<User>();
	us.add(new User("张三", 12, new Date()));
	us.add(new User("张四", 13, new Date()));
	us.add(new User("张五", 14, new Date()));
	ModelAndView mav = new ModelAndView("/WEB-INF/jsp/showData.jsp");
	//将数据存入modelMap
	mav.addObject("message", message);
	mav.addObject(user);//默认为类名的首字母小写
	mav.addObject("users", us);
	return mav;
}

 前台页面获取方式:

 

request:${requestScope.message }<br/>

<c:forEach items="${requestScope.users }" var="u">

${u.name }-${u.age }-${u.birth }<br/>

</c:forEach>

可以通过ModelAndView的mav.addObject("message", message);方法设置参数。

该方法中第一个参数为数据的key,第二个参数为数据对象。

也可以使用mad.addObject(user);方法

该方法中数据的参数为数据对象,数据的key为该对象的类的类名(其中首字母小写)。

 

当然也可以使用ModelMap传递多个数据到jsp中。

 

设置跳转方式为重定向或者转发

1、spring默认的跳转方式即为转发,当然转发也可以写作:return "forward:/WEB-INF/account/userDetail.jsp";

2、重定向必须写作:return "redirect:http://localhost:8080/tiger/account/user.do?method=userDetail&id=1";

 

视图解析器的配置和使用

1、在spring-servlet.xml中配置视图解析器

<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<!-- 视图后缀,controller中的方法返回的url字符串会添加该后缀 -->
	<property name="suffix" value=".jsp"/> 
	<!-- 视图前缀,controller中的方法返回的url字符串会添加该前缀 -->
	<property name="prefix" value="/WEB-INF/account/"/> 
</bean>

 配置该解析器之后,那么controller中的返回的视图url就会被改写

 

如:return "userDetail";   实际跳转的url为:/WEB-INF/account/userDetail.jsp

 

controller中方法的返回值类型

返回值除了可以返回String和ModelAndView外还有其他类型。

其他类型还包括:void、ModelMap、Map、Object、map、List、Set。一般建议使用String。

1、返回值类型为void 则只是纯粹的执行了方法中的程序,然后响应的url依然为请求的url

例如案例中请求为index.do 则响应的url为 index 在视图解析器解析之后得到的最终的url为/WEB-INF/account/index.jsp

示例:

//返回值为void
@RequestMapping(value="/index.do",params="type=void")
public void resultVoid(HttpServletRequest request){
	request.setAttribute("void", "resultVoid");
}

 2、返回值为modelMap时,响应的url和void一致。

 

只是存储在MpdelMap中的数据可以在jsp页面中取出。

示例:

//返回值为ModelMap
@RequestMapping(value="index.do",params="type=modelMap")
public ModelMap resultModelMap(ModelMap map){
	map.put("msg", "这里是modleMap中的数据");
	return map;
}

 3、返回值为Map时,和modelMap几乎完全一致。

//返回值为Map
@RequestMapping(value="index.do",params="type=map")
public Map resultMap(){
	Map<String,String> map = new HashMap<String,String>();
	map.put("msg", "这里是Map中的数据");
	return map;
}

 4、返回值为List时,响应的url和void一致。 

spring会将list对象存储在request中,而该对象的存储的key为:当list中存储为String类型数据时key为:stringList。当存储为User对象时 key为:userList。其他的类型的可以类比。

//返回值为List<String>
@RequestMapping(value="index.do",params="type=list_string")
public List resultList_String(){
	List ls = new ArrayList();
	ls.add("list1");ls.add("list2");ls.add("list3");
	return ls;
}
//返回值为List<User>
@RequestMapping(value="index.do",params="type=list_user")
public List<User> resultList_User(){
	List<User> ls = new ArrayList<User>();
	ls.add(new User("张三"));
	ls.add(new User("张四"));
	return ls;
}

 5、返回值为Set时,和List除了没有顺序之外,其他都一致。 

//返回值为Set<User>
@RequestMapping(value="index.do",params="type=set_user")
public Set<User> resultSet_User(){
	Set<User> ls = new HashSet<User>();
	ls.add(new User("张三"));
	ls.add(new User("张四"));
	return ls;
}

 6、返回值为Object时,响应的url和以上一致,spring也会将返回的对象存储在request中,该对象在request中的key为该对象类型的类名(首字母小写)

//返回值为User
@RequestMapping(value="index.do",params="type=user")
public User resultUser(){
	return new User("张四");
}

 所有的返回值类型页面获取方式为:

<h1>返回值类型</h1>
<p>
<h3>Void</h3>
<a href="index.do?type=void">无返回值类型</a><br/>
${requestScope.void }
</p>
<p>
<h3>ModelMap</h3>
<a href="index.do?type=modelMap">返回ModelMap</a><br/>
${requestScope.msg } 
</p>
<p>
<h3>Map</h3>
<a href="index.do?type=map">返回map</a><br/>
${requestScope.msg }
</p>
<p>
<h3>List</h3>
<a href="index.do?type=list_string">返回List&lt;String&gt;</a><br/>
${requestScope.stringList }
</p>
<p>
<h3>List</h3>
<a href="index.do?type=list_user">返回List&lt;User&gt;</a><br/>
${requestScope.userList }
</p>
<p>
<h3>Set</h3>
<a href="index.do?type=set_user">返回Set&lt;User&gt;</a><br/>
${requestScope.userSet }
</p>
<p>
<h3>User(Object)</h3>
<a href="index.do?type=user">返回User(Object)</a><br/>
${requestScope.user }
</p>

 

分享到:
评论

相关推荐

    spring-mvc-showcase

    《Spring MVC 展示应用深度解析》 Spring MVC 是 Spring 框架的重要组成部分,它为构建基于模型-视图-控制器(MVC)模式的Web应用程序提供了强大的支持。"spring-mvc-showcase"项目是Spring官网提供的一个实战示例...

    spring-mvc jar包

    Spring MVC 是一个基于Java的轻量级Web应用框架,它是Spring框架的重要组成部分,主要用于构建Web应用程序的后端控制器。在Spring MVC中,开发者可以利用Model-View-Controller(模型-视图-控制器)架构模式来组织...

    spring-mvc-demo

    【Spring MVC 框架详解】 Spring MVC 是 Spring 框架的一部分,它是一个轻量级的、基于模型-视图-控制器(MVC)设计模式的 Web 应用开发框架。Spring MVC 提供了丰富的功能,使得开发者可以快速、高效地构建高质量...

    spring-mvc-官方中文文档

    Spring MVC 提供了模型数据绑定和视图解析功能,使得模型数据可以方便地传递到视图进行渲染。 7. **ModelAndView**:这是 Spring MVC 中的一个重要类,用于存储模型数据和视图名。在控制器处理完请求后,可以通过...

    最全最经典spring-mvc教程

    Spring MVC 是一款强大的Java Web开发框架,用于构建高效、可维护和模块化的Web应用程序。它作为Spring框架的一部分,提供了一种优雅的方式来处理HTTP请求和响应,使得开发者可以专注于业务逻辑而不是底层实现。在这...

    spring-web-5.2.3.RELEASE和spring-webmvc-5.2.3.RELEASE

    Spring Web模块和Spring Web MVC模块是Spring框架中的两个关键组成部分,它们在构建Web应用程序时起着至关重要的作用。 Spring Web模块(spring-web-5.2.3.RELEASE.jar)主要负责提供Web相关的功能支持,包括HTTP...

    简单-利用Spring-MVC框架开发项目实例

    在本教程中,我们将深入探讨如何使用Spring-MVC框架来开发一个简单的项目实例。Spring-MVC是Spring框架的一个模块,专为构建Web应用程序提供模型-视图-控制器(MVC)架构支持。它使得开发者可以将业务逻辑、数据访问...

    Spring-MVC框架简单实现

    **Spring MVC 框架简单实现** Spring MVC 是 Spring 框架的一部分,它是一个用于构建 Web 应用程序的模型-视图-控制器(MVC)架构。在这个简易版框架中,我们将深入理解 Spring MVC 的核心概念和关键组件。 **1. ...

    spring-mvc-lib

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建模型-视图-控制器(MVC)架构的应用程序提供了强大的支持。在"spring-mvc-lib"这个压缩包中,我们很可能找到了Spring MVC框架运行所必需的一些库文件。虽然...

    spring-mvc 官方实例

    6. **数据绑定**:Spring MVC提供了强大的数据绑定功能,可以从请求参数自动填充模型对象,或者将模型对象的属性值渲染到表单。例如,@RequestParam和@PathVariable注解用于从URL路径或请求参数中获取数据。 7. **...

    spring-mvc maven IDEA

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建模型-视图-控制器(MVC)架构的应用程序提供了强大的支持。Maven则是一个项目管理工具,它可以帮助开发者管理项目的依赖、构建过程和生命周期。IDEA是...

    spring-mvc.rar_spring mvc

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建RESTful应用程序提供了强大的支持。这个名为"spring-mvc.rar_spring mvc"的压缩包可能是为了帮助初学者理解和入门Spring MVC,解决他们在开发过程中可能遇到...

    spring-web.jar spring-webmvc.jar

    在本讨论中,我们将深入探讨两个核心组件——`spring-web.jar`和`spring-webmvc.jar`,它们在Spring MVC框架中扮演着关键角色。 首先,`spring-web.jar`是Spring框架的Web层组件,它提供了与Web相关的功能。这个库...

    spring-mvc-showcase.zip

    《Spring MVC 展示应用深度解析》 Spring MVC 是 Spring 框架的重要组成部分,它为构建基于模型-视图-控制器(MVC)架构的Web应用程序提供了强大的支持。"spring-mvc-showcase.zip" 文件包含了一个名为 "spring-mvc...

    spring-mvc本地仓库

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在 Maven 项目中,Spring MVC 的依赖通常通过 Maven 仓库来管理。...

    Spring-MVC的demo

    Spring MVC通过ModelAndView类将模型数据传递给视图进行渲染。 4. **控制器(Controller)** 控制器处理HTTP请求,调用业务逻辑,并将结果转发给视图。Spring MVC通过@Controller注解定义控制器类,@...

    spring-mvc-04-master.zip

    《Spring MVC 框架深度解析与实践指南》 在当今的Java Web开发领域,Spring MVC作为Spring框架的重要组成部分,已经成为了构建MVC(Model-View-Controller)模式应用程序的主流选择。本教程将深入剖析Spring MVC的...

    spring-mvc-study.zip_spring mvc_spring mvc项目_springmvc

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的一部分,主要用于构建 MVC(Model-View-Controller)模式的 Web 应用程序。在本项目 "spring-mvc-study" 中,我们可以看到一些核心的文件和...

Global site tag (gtag.js) - Google Analytics