1.页面向后台传值

A.HttpServletRequest方式:

 package com.rong.controller;

 import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import com.rong.entity.User;
import com.rong.service.UserService; @Controller
@RequestMapping("/user")
public class UserController {
@Resource
UserService userService;// 用接口,动态代理 @RequestMapping("/login.do")
public String login() {
return "login";
} /**
* 登录判断逻辑 页面传值方式一:借助servlet原生对象传值
* 在方法中只需要将原生的对象设置成参数,springMVC会自动的将对象注入到参数中传递过来
*/
@RequestMapping("/one.do")
public String one(HttpServletRequest request) {
String name = request.getParameter("name");
String password = request.getParameter("password");
User user = userService.login(new User(name, password));
if (user != null) {
return "main";
} else {
return "login";
}
} }

B.通过页面的name传值到后台,spring自动注入(页面的name必须与后台的参数名一致)

 /**
* 页面传值方式二:借助表单的name属性名来传值 spring会自动根据参数的名字,从request中通过getParameter取值
* 需要表单的name值与方法中的参数名一致
*
* @author 容杰龙
*/
@RequestMapping("/two.do")
public String two(String name,String pwd){
User user = userService.login(new User(name, pwd));
if (user != null) {
return "main";
} else {
return "login";
}
}

C.通过@RequestParam注解传值

     /**
* 页面传值方式三:
* 通过RequestParam注解来解决表单的name与请求处理方法参数名不一致问题
* @RequestParam("name")String userName
* 告诉spring从request的name的参数名上获取值绑定到userName参数上
*
*/
@RequestMapping("/three.do")
public String three(@RequestParam("name")String userName,@RequestParam("pwd")String password){
User user = userService.login(new User(userName, password));
System.out.println(user);
if (user != null) {
return "main";
} else {
return "login";
}
}
     /**
* 页面传值方式三:
* 通过RequestParam注解来解决表单的name与请求处理方法参数名不一致问题 @RequestParam("name")String
* userName 告诉spring从request的name的参数名上获取值绑定到userName参数上
*
*/
@RequestMapping("/three.do")
// RequestParam中的required是指这个参数是否客户端必须提供,defaultValue则是如果没有提供该参数默认值是什么
public String three(@RequestParam(name = "name", required = false, defaultValue = "rjl") String userName,
@RequestParam(name = "pwd", required = false) String password) {
System.out.println(userName+";"+password);
User user = userService.login(new User(userName, password));
System.out.println(user);
if (user != null) {
return "main";
} else {
return "login";
}
}

D.通过spring的自动封装机制实现封装成bean对象

     /**
* 页面传值方式四:通过spring提供的bean封装功能
* 1.需要页面的name值与bean的属性名一致
* spring会自动调用setXXX属性的方法来赋值
* 2.在方法中的参数指定为该bean的类型参数 参数名随意
* 3.有些情况下bean的某些属性没有值,则spring自动赋值为null
*
*/ @RequestMapping("/four.do")
public String four(User user){
User MyUser = userService.login(user);
System.out.println(MyUser);
if (MyUser != null) {
return "main";
} else {
return "login";
}
}

2.后台向页面传值

A.利用原生的request或session等对象传值

B.通过ModelAndView传值

     /**
* 后台传值到页面方式二:通过ModelAndView传值
* ModelAndView(viewName, model) :viewName 视图字符串 model是模型数据,类型是Map类型
* spring会从modelAndView对象中获取map对象,然后将map.key当成是request的attribut的name,map.value当
* 成request的attribut的值
* request.setAttribute(model的条目.getKey(),model的条目.getValue())
*
*/ @RequestMapping("/five.do")
public ModelAndView five(User user) {
System.out.println(user);
User login = userService.login(user);
Map<String, Object> map = new HashMap<>();
ModelAndView modelAndView = null;
if (login != null) {
map.put("user", login);
modelAndView = new ModelAndView("main", map);
} else {
map.put("msg", "login fail!");
modelAndView = new ModelAndView("login", map);
}
return modelAndView;
}

C.通过ModelMap传值

     /**
*
* @param user
* @param modelMap
* 该对象由spring注入,只需要给其绑定数据,spring会根据modelMap对象的key和value绑定
* request的attribute
*
*/
@RequestMapping("/six.do")
public String six(User user, ModelMap modelMap) {
System.out.println(user);
User login = userService.login(user);
if (login != null) {
modelMap.put("user", login);
return "main";
} else {
modelMap.put("msg", "login fail!");
return "login";
}
}

springmvc值传递的更多相关文章

  1. 《Java从入门到放弃》入门篇:springMVC数据传递

    springMVC中的数据传递方式与JSP和Struts2相比,更加的简单.具体有什么样的区别呢?我们通过下面这张图来对比就知道了. 随手画的,有些错别字,不用太在意..... 接下来,进入正题,sp ...

  2. [SpringMVC-值传递] 初始SpringMVC--SpringMVC中的值传递

    把页面中输入的值传递到后台以及后台向前台传递,有以下几种方式 这里以登录为例子,实现打印前端页面的值 1,新建一个控制器,根据不同的请求地址实现不同的请求方式 LoginController.java ...

  3. Java 为值传递而不是引用传递

    ——reference Java is Pass by Value and Not Pass by Reference 其实这个问题是一个非常初级的问题,相关的概念初学者早已掌握,但是时间长了还是容易 ...

  4. python 引用传递与值传递

    https://taizilongxu.gitbooks.io/stackoverflow-about-python/content/16/README.html 1.也就是如果传可变对象,就是引用传 ...

  5. java的值传递笔记

    1. 背景:开发小伙伴突然问我java是值传递还是引用传递,我说当然是值传递,只不过有时候传递一个对象时实际传递的是对象的地址值,所以让人容易产生一种引用传递的假象,貌似在李刚的疯狂java讲义有提到 ...

  6. Java 中的值传递和参数传递

    Java中没有指针,所以也没有引用传递了,仅仅有值传递不过可以通过对象的方式来实现引用传递 类似java没有多继承 但可以用多次implements 接口实现多继承的功能 值传递:方法调用时,实际参数 ...

  7. java是值传递还是引用传递

    首先写一个简便的Employee,以便测试使用. class Employee { private String name; public Employee(String name) { this.n ...

  8. Java中值传递和引用传递的概念

    很多书中都提到了在Java中只存在值传递,但是今天在一个NanoHTTPD的源码中看到这样一段: if (qmi >= 0) { decodeParms(uri.substring(qmi + ...

  9. javascript中值传递与值引用的研究

    今天重新看了一下<javascript高级程序设计>,其中讲到了javascript中的值传递和值引用,所以就自己研读了一下,但是刚开始没有明白函数中的参数只有值传递,有的场景好像参数是以 ...

随机推荐

  1. [转] JetBrains Products License Server,适用RubyMine、Goland等

    原文:http://jetbrains.license.laucyun.com/ Working Server http://jetbrains.license.laucyun.com (Lower ...

  2. 旭日图(sunburst chart)绘制:R语言 & excel

    旭日图(sunburst chart)也叫太阳图,一种圆环镶接图,每一个圆环就代表了同一级别的比例数据,离原点越近的圆环级别越高,最内层的圆表示层次结构的顶级.除了圆环外,旭日图还有若干从原点放射出去 ...

  3. pentestbox更新msf

    pentestbox成功升级msf 1.  输入 msfupdate 进行软件更新 2.  在[*] Updating gems...,软件报错,提示找不到文件路径,输入以下两条命令,尝试单独安装 g ...

  4. 20155233 2016-2017-2《Java程序设计》课程总结

    20155233 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:预习去写博客,如何达到理想的师生关系. 预备作业2:对自己C语言的学习进行了解与认识. ...

  5. 20155334 实验二 Java面向对象程序设计

    实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验要求 完成实验.撰写 ...

  6. 关于web服务安全的一些思考

    一.问题: 在开发web项目是时,安全问题有以下几种问题: (1)用户可以自己伪造一个URL请求来进行访问吗? (2)用户不在服务器登录,可以自己封装出用户名.密码进行访问吗? (3)url的参数可以 ...

  7. js灵活处理日期(函实例)

    基础方法: var dd = new Date() dd.getFullYear() dd.getMonth() dd.getDate() dd.getDay() //获取星期几(0~6) dd.ge ...

  8. autoreleasepool 自动释放池的理解

    常见的面试题:以下代码存在什么样的问题?应该如何改进? for (int i = 0; i < 100000; i++) { NSString *str = @"abc"; ...

  9. PHP序列化serialize()和反序列化unserialize()

    所谓的序列化,就是把保存在内存中的各种对象状态或属性保存起来,在需要时可以还原出来. serialize() 可处理除了 resource 之外的任何类型返回字符串,此字符串包含了表示 value 的 ...

  10. 创建第一个Scrapy项目

    d:进入D盘 scrapy startproject tutorial建立一个新的Scrapy项目 工程的目录结构: tutorial/ scrapy.cfg # 部署配置文件 tutorial/ # ...