`

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-data-rest-mvc-react:一个使用spring-data-rest-mvc并在后端使用spring-security并在前端使用ReactJS的示例应用程序,其中包括一个身份验证组件

    该示例应用程序使用spring-data-rest-mvc,在后端具有spring-security,在前端具有ReactJS,包括身份验证组件。 使用mvn spring-boot:run运行该应用程序。 一旦运行,请通过http://localhost:8080/访问该应用程序...

    Spring-mvc-examples:Spring mvc 项目

    Spring-mvc-例子 Spring mvc 项目 创建项目:git clone cd gs-rest-service/complete gradelw build gradlew run JDEE 插件在 emacs 中编码 java mvn 运行系统: mvn spring-boot:run 传递参数/浏览:

    Spring MVC--6.封装参数获得与传递

    Spring MVC--6.封装参数获得与传递

    spring-framework-3.1.0.RELEASE.zip

    Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。... 1、核心容器 2、Spring 上下文 3、Spring AOP 4、Spring DAO 5、Spring ORM 6、Spring Web 模块 7、Spring MVC 框架

    Spring-Boot-Reference.pdf

    •Web应用:MVC |嵌入式容器 •处理数据:SQL | NO-SQL •消息传递:概述| JMS •测试:概述|引导应用| Utils •扩展:自动配置| @Conditions •管理端点:概述 •连接选项:HTTP | JMX •监控:度量|审计| HTTP跟踪|过程 •...

    Spring Mvc参数传递例子

    Spring MVC传参是Spring学习中的比较容易混淆的地方,因为传参方式种类多,接受参数种类多,初学者较容易因为不懂HTTP参数传递原理,而摸不着头脑,该篇文章介绍Spring MVC参数绑定的几种方式。

    springmvc2.5.6实现webservice rest接口实例

    2、配置步骤: 1)引入架包;... spring-webmvc-2.5.6.jar不支持@PathVariable注解,参数必须采用传统方式的?传递;3以上版本就支持@PathVariable注解,允许的话,建议采用SpringMVC4,增加了一些新特性 ;

    Spring MVC参数传递

    Spring MVC传参是Spring学习中的比较容易混淆的地方,因为传参方式种类多,接受参数种类多,初学者较容易因为不懂HTTP参数传递原理,而摸不着头脑,该篇文章介绍Spring MVC参数绑定的几种方式(包括json和普通文本)

    Spring-Rest-Demo

    Spring休息演示在此示例代码演示中,如何使用[Jackson Databind]( )使用Spring将信息从Rest-Client传递到Rest-Webservices,它将json转换为Java Pojo类控制器,然后通过将Java Pojo转换回json以在Rest Client上...

    java spring mvc项目,通过URL地址传递对象参数给action.zip

    java spring mvc项目,通过URL地址传递对象参数给action

    spring3 mvc基于注解的用户登录实例

    经过一段时间对spring mvc的学习,自己做了个简单的用户登录模块。仅仅是登录模块。...这个事例只是让新手明白spring mvc 的页面如何跳转,页面值参数如何传递。 使用到的数据库大家可以看实体类自己建立。

    Spring MVC不能直接接收list类型参数的问题

    前端使用jquery向后台传递数组类型的参数,Java后台直接通过List类型接收,会发现无法取到参数。

    spring3+mybatis3+spring3 mvc整合带数据库基础操作

    整合了spring3+spring3 mvc+mybatis,里面包括了基础的增删查,spring mvc主要介绍了表单控制,以及参数传递,重定向操作

    Spring MVC 学习 之 - URL参数传递详解

    本篇文章主要介绍了SpringMVC-URL参数传递,在学习 Spring Mvc 过程中,有必要来先了解几个关键参数,有兴趣的可以了解一下。

    spring mvc框架中接收前端传递的批量数据的两种超实用例子

    spring mvc框架中接收前端传递的批量数据的两种超实用例子

    java8源码-spring-boot-demo:springboot学习的demo

    boot中的起步依赖,利用maven的依赖传递,可以更好的构建项目,不用在向spring一样,要考虑maven的依赖的版本和版本之间的兼容或者冲突。 spring boot内置Tomcat容器,不用在自己部署,部署更简单 spring boot 可以...

    spring + spring mvc+mybatis plus

    里面包含了ssm基本整合以外,还包含了jackson demo、fastjson demo、freemarker demo、vus.js 2.5 demo、mybatis plus代码自动生成工具、mybatis plus 自定义分页示例、spring mvc各种类型参数传递demo、logback配置...

    Spring MVC+Maven 实现前端和后台交互源码

    这是结合博客的源码,链接是:http://blog.csdn.net/u012660464/article/details/53508757 。名为:Spring MVC+Maven 实现同一项目的前端和后台交互,该源码示例了前端和后台如何进行参数的绑定传递。

    spring_mvc_angularjs

    spring-mvc-angularjs ... 还集成了 Velocity,以防需要将一些值从 spring mvc 控制器传递到 partials 或 index.html 文件中。 我还包含了引导库以获得更好的 UI。 跑步: mvn tomcat:运行 然后打开网址:

    spring MVC中传递对象参数示例详解

    主要给大家介绍了在spring MVC中传递对象参数的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看吧。

Global site tag (gtag.js) - Google Analytics