JAVA springmvc参数
一、简单参数:
1 package jd.com.contronller; 2 3 import jd.com.projo.goods; 4 import org.springframework.stereotype.Controller; 5 import jd.com.service.goodsService ; 6 import org.springframework.ui.Model; 7 import org.springframework.web.bind.annotation.RequestMapping; 8 9 import javax.annotation.Resource; 10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletResponse; 12 import javax.servlet.http.HttpSession; 13 import java.util.List; 14 15 @Controller 16 public class goodsController { 17 @Resource(name="goodsServiceImpl") 18 private goodsService goodsService; 19 20 @RequestMapping("/items") 21 public String findAll(HttpServletRequest request, HttpServletResponse response, HttpSession session, Model model){ 22 List<goods> list=this.goodsService.findAllGoods(); 23 model.addAttribute("items",list); 24 return "items"; 25 26 } 27 }
其中:public String findAll(HttpServletRequest request, HttpServletResponse response, HttpSession session, Model model)controller类中的方法,自动重载,其中参数HttpServletRequest request, HttpServletResponse response, HttpSession session, Model model根据实际情况进行加减。
当方法返回的是字符串的时候,返回值是页面的名称。其中Modle我们定义在其中定义数据。
springmvc可以自动接收一些简单的参数比如基本类型参数加上String。
controller类:
1 @RequestMapping("/update") 2 public String updateByid(String goodsname, String detail, Integer id, Integer money){ 3 System.out.println(goodsname+detail+id+money); 4 goods goods =new goods(); 5 goods.setDetail(detail); 6 goods.setGoodsname(goodsname); 7 goods.setId(id); 8 goods.setMoney(money); 9 this.goodsService.updateById(goods); 10 return "success"; 11 }
需要前端传递过来的参数的key和我们上面的方法的参数的名称需要保持一致。
因为传递传递过来的参数都是字符串类型,我们可以直接在方法中修改我们想接收的参数类型,springmvc帮我们自动转换类型。比如上 面的例子中id,就是spring帮我们转换的。
上面的方法有点麻烦如果前端传递过来很多参数的话 我们需要一一set这些值。spring为我们提供projo类的方法。
二、projo类的参数传递
条件:
传递过来的参数需要key和projo类的属性一一对应。否则接收不到。
我们使用projo类goods来替换我们上面的简单类型的参数
1 @RequestMapping("/update") 2 public String upddateById(goods goods){ 3 this.goodsService.updateById(goods); 4 5 return "success"; 6 }
解决post中文乱码:
在web.xml加入 :
1 <filter> 2 <filter-name>CharacterEncodingFilter</filter-name> 3 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 4 <init-param> 5 <param-name>encoding</param-name> 6 <param-value>utf-8</param-value> 7 </init-param> 8 </filter>
三、vo参数类型
前端传递过来的参数有可能是多个表的字段,所以我们projo类不可能是都满足需求。这时候需要几个projo类组成我们需要的实体类。
需要注意前端页面需要写属性.属性 这样才能对应上vo类中引用其他的类的数据
vo类:
1 package jd.com.vo; 2 3 import jd.com.projo.goods; 4 5 import java.util.Date; 6 7 public class vo { 8 9 private goods goods; 10 public jd.com.projo.goods getGoods() { 11 return goods; 12 } 13 14 public void setGoods(jd.com.projo.goods goods) { 15 this.goods = goods; 16 } 17 }
controller类:
1 @RequestMapping("/vo") 2 public String searchBydateAndNmae(vo vo){ 3 goods goods =this.goodsService.findByTime(vo); 4 System.out.println(goods.getMoney()); 5 return null; 6 }
前端页面:需要注意前端页面想显示日期格式需要使用<fmt:formatDate value="${n.create_time}" pattern="yyyy-MM-dd HH:mm:ss" />
1 <%-- 2 Created by IntelliJ IDEA. 3 User: liumeide 4 Date: 2018/4/30 5 Time: 19:05 6 To change this template use File | Settings | File Templates. 7 --%> 8 <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" pageEncoding="utf-8" %> 9 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 10 <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 11 <html> 12 <head> 13 <title>Title</title> 14 <script type="text/javascript" src="<c:url value='/resources/bootstrap.min.js'/>"></script> 15 <link rel="stylesheet" type="text/css" href="<c:url value='/resources/bootstrap.min.css'/>"/> 16 </head> 17 <body style="text-align: center"> 18 <div class="col-md-5" style="text-align: center"> 19 <h1> 商品详情</h1> 20 <table class="table table-bordered table-responsive"> 21 <tbody> 22 <form method="post" action="/vo.action"> 23 <tr> 24 <td>查询条件</td> 25 <td>商品日期</td> 26 <td><input type="text" name="goods.goodsname" value="${items[0].goodsname}"></td> 27 <td>商品名称</td> 28 <td><input type="text" name="goods.create_time" value="<fmt:formatDate value="${items[0].create_time}" pattern="yyyy-MM-dd HH:mm:ss" /> "></td> 29 <td><input type="submit"></td> 30 </tr> 31 </form> 32 33 <c:forEach items="${items}" var="n"> 34 <tr> 35 <td>${n.id}</td> 36 <td>${n.goodsname}</td> 37 <td>${n.money}</td> 38 <td>${n.detail}</td> 39 <td><fmt:formatDate value="${n.create_time}" pattern="yyyy-MM-dd HH:mm:ss" /> </td> 40 <td><a href="/edit.action?id=${n.id}">修改</a></td> 41 </tr> 42 </c:forEach> 43 </tbody> 44 45 </table> 46 </div> 47 48 </body> 49 </html>
四、参数类型为数组
解决方法:
1、使用vo类中的设置属性,比如:private Integer[] ids;使用该字段接收数组。
比如批量删除根据id值。通过vo类来接收删除的id数组。前端页面需要将name改成ids。
1 package jd.com.vo; 2 3 import jd.com.projo.goods; 4 5 import java.util.Date; 6 7 public class vo { 8 9 private Integer[] ids; 10 private goods goods; 11 public jd.com.projo.goods getGoods() { 12 return goods; 13 } 14 15 public void setGoods(jd.com.projo.goods goods) { 16 this.goods = goods; 17 } 18 19 public Integer[] getIds() { 20 return ids; 21 } 22 23 public void setIds(Integer[] ids) { 24 this.ids = ids; 25 } 26 }
2、可以用Integer[] ids 进行接收。
controller类:
1 @RequestMapping("/deleteids") 2 public String deleteByIds(Integer[] ids){ 3 System.out.println(Arrays.toString(ids)); 4 return ""; 5 }
1 @RequestMapping("/deleteids") 2 public String deleteByIds(vo vo){ 3 System.out.println(Arrays.toString(vo.getIds())); 4 return ""; 5 }
五、接收参数为List<E>
一般我们进行更新或者批量更新的时候,需要使用泛型来进行处理。
在vo类中添加属性:private List<goods> goodsList;
1 private List<goods> goodsList;
前端页面:name属性为后端定义属性.下标.属性名字
1 <c:forEach items="${items}" var="n" varStatus="status"> 2 <tr> 3 <td><input type="checkbox"></td> 4 <td><input type="text" name="ids" hidden="hidden" value="${n.id}"></td> 5 <td><input type="text" name="goodsList[${status.index}].goodsname" id="" value="${n.goodsname}"></td> 6 <td><input type="text" value="${n.money}" name="goodsList[${status.index}].money" ></td> 7 <td><input type="text" value="${n.detail}" name="goodsList[${status.index}].detail" ></td> 8 <td><input type="text" disabled="disabled" value="<fmt:formatDate value="${n.create_time}" pattern="yyyy-MM-dd HH:mm:ss" />" name="goodList[status.index].create_time" ></td> 9 <td><a href="/edit.action?id=${n.id}">修改</a></td> 10 </tr> 11 </c:forEach>
通过foreach标签的varStatus属性。来确定在后端接收参数goodList的位置。
controller类:
1 @RequestMapping("/updateObjs") 2 public String updateObjs(vo vo){ 3 System.out.println(vo.getGoodsList().get(0).getGoodsname()); 4 return null; 5 }