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     }

 

posted @ 2018-04-30 21:27  evil_liu  阅读(831)  评论(0编辑  收藏  举报