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. linux介绍及基本命令

    linux简介 Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的. Linux是一套免费使用和自由传播的类Unix操作系统,是一个基 ...

  2. Java实例 Part4:数组及其常用操作

    目录 Part4:数组及其常用操作 Example01:将二维数组的行列交换 Example02:使用选择排序法对数组进行排序 Example03:使用冒泡排序法对数组进行排序 Example04:使 ...

  3. Linux中的阻塞机制

    我们知道在字符设备驱动中,应用层调用read.write等系统调用终会调到驱动中对应的接口. 可以当应用层调用read要去读硬件的数据时,硬件的数据未准备好,那我们该怎么做? 一种办法是直接返回并报错 ...

  4. 树莓派3B+简单入门

    刚刚入手一个树莓派3B+,树莓派板子.3.5寸电阻触摸屏.16G内存卡.外壳电源等一系列配件一共花了360大洋,这东西真不便宜.这里介绍一下系统安装.3.5寸屏幕安装.VNC远程屏幕. 先给大家看一下 ...

  5. Python学习笔记十:json序列化,软件结构目录规范,ATM作业讲解,import本质论

    json序列化 将系统的某个状态保存为字符串(挂起),序列化. import json json.dumps():序列化 json.loads():反序列化 简单类型数据处理 import pickl ...

  6. (译)我为什么用Go语言来做区块链——Syed Jafar Naqvi——Co-Founder/CEO at Karachain

    原文地址:https://medium.com/karachain/why-i-am-building-a-blockchain-in-go-6395a60b24dd Go语言现在常常被用来做去中心化 ...

  7. 流程控制(if、while、for)

    流程控制 一.if判断 # 1.语法一if 条件:#条件成立时执行的子代码块` 代码1 代码2 代码3# 示例:sex='female'age=18is_beautiful=Trueif sex == ...

  8. 证明SG中梯度的期望等于GD的梯度

    参考链接: https://zhuanlan.zhihu.com/p/36435504

  9. 使用mac学习java的一些基本操作

    使用mac学习java的一些基本操作 本文主要讲一下MacOS与windows的不同 iTerm2 使用mac的同学是不需要安装虚拟机来学习linux命令的.只需要使用iTerm2[下载地址]+zsh ...

  10. C#基础之并行编程

    并行编程从业务实现的角度可分为数据并行与任务并行,也就是要解决的问题是以数据为核心还是以要处理的事情为核心.基于任务的并行编程模型TPL(任务并行库)是从业务角度实现的并行模型,它以System.Th ...