SpingMVC框架前后台参数传递

前端传后台

  1. 在目标方法内添加形参,形参名与前端请求的参数名一直或者使用注解绑定

@Controller
public class Login {
   
   @RequestMapping("/login")
   //前端请求中的参数名为userName与psw
  public String login(@RequestParam("userName")String uname,String psw){{
      System.out.println("------------执行登录操作------------");
      System.out.println("uname:"+uname+",密码:"+psw);
      return "index";
  }
}
  1. 封装复杂类型的参数,复杂类型中属性名应与前端请求参数名一致
@Controller
public class Login {
@RequestMapping("/login")
//User实体类内包含uname与psw属性
      public String login(User user){
   	   System.out.println("------------执行登录操作------------");
   	   System.out.println("uname:"+user.getUname()+",密码:"+user.getPsw());
   	   return "index";
      }
}
  1. 使用原生request接收
@Controller
public class Login {
@RequestMapping("/login")
   	   public String login(HttpServletRequest request){
   		   System.out.println("------------执行登录操作------------");
   		   System.out.println("uname:"+request.getParameter("uname")+",密码:"+request.getParameter("psw"));
   		   return "index";
   	   }
}		   

如果前端传后台的参数是中文,可能会出现乱码,本人是通过在web.xml中添加过滤器解决

    <!-- 解决中文乱码 -->
<filter>
    <filter-name>characterEncodingFilter</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>
 <filter-mapping>
     <filter-name>characterEncodingFilter</filter-name>
     <url-pattern>/*</url-pattern>
 </filter-mapping>

后台传前端

后台往前端传值需要使用jstl表达式,需要导入相关jar包

  1. 在后台控制类返回值需要是org.springframework.web.servlet.ModelAndView 类型,即数据加视图,通过赋值为其添加数据
package cn.controller;


import java.util.ArrayList;
import java.util.List;



import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import cn.entity.User;
 @Controller
public class Login {
		@RequestMapping("/login")
	   public ModelAndView login(){
			List<User> list  = new ArrayList<>();
			User u1 = new User("tom","111");
			User u2 = new User("jack","222");
			User u3 = new User("lilei","333");
			list.add(u1);
			list.add(u2);
			list.add(u3);
			//创建ModelAndView 对象
			ModelAndView mav = new ModelAndView();
			//添加视图名
			mav.setViewName("index");
			//添加返回数据,可添加多个,在前端使用el表达式获取
			mav.addObject("userList", list);
		   return mav;
	   }
}
  1. 通过在目标方法内加入形参map来赋值
 @RequestMapping("/getData")
		public String getData(User user,Map<String, Object> map){
		  map.put("user", user);
			return "index";
		}
  1. 通过在目标方法内加入形参ModelMap来赋值
@RequestMapping("/getData")
	public String getData(User user,ModelMap map){
	  map.put("user", user);
		return "index";
	}
  1. 通过在目标方法内加入形参Model来赋值
	@RequestMapping("/getData")
	public String getData(User user,Model model){
	  model.addAttribute("user", user);
		return "index";
	}

在前端通过el表达式取值

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <!--引入jstl标签库-->
 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <!--通过jstl标签循环,通过el表达式取值-->
<c:forEach items="${userList}" var="user">
  ${user.uname},${user.psw}<br>
</c:forEach>

</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_36677358/article/details/84527833
今日推荐