5、查询和删除功能开发(springmvc笔记)

说明:这里和之前一样通过相关功能的开发理解springmvc框架的内容。

一、复杂参数绑定

1.1 包装类型的参数绑定(工程springmvc-mybatis02

1.1.1 需求

商品查询,Controller方法中实现商品查询条件传入。这里是根据传入的商品名称进行查询。

1.1.2 实现方式

  • 方式一:在形参中添加HttpServletRequest request参数,通过request接收查询条件参数,但是这种方式较为原始。

  • 方式二:在形参中让包装类型的pojo接收查询条件参数。
    页面传参的特点:复杂,多样性。比如条件有:用户帐号、商品编号...。
    如果将用户帐号、商品编号、订单信息等放在简单pojo(属性是简单类型)中,pojo类属性比较多,比较乱,不方便维护,建议使用包装类型的pojo
    我们看包装类型的pojo(ItemsQueryVo.java):

public class ItemsQueryVo {
    //商品信息
    private Items items;
    //为了系统的可扩展性,一般都是对原始的pojo进行扩展
    private ItemsCustom itemsCustom;
......

1.1.3 页面参数

editItems.jsp

<td>商品名称:<input name="itemsCustom.name" /></td>

这样我们便可以将商品名称传入进去,其实和使用ognl类似。

1.1.4 Controller方法实现

ItemsController.java

public ModelAndView queryItems(HttpServletRequest request, ItemsQueryVo itemsQueryVo) throws Exception{

    List<ItemsCustom> itemsList = itemsService.findItemsList(itemsQueryVo);
    ModelAndView modelAndView = new ModelAndView();
    modelAndView.addObject("itemsList",itemsList);
    modelAndView.setViewName("items/itemsList");
    
    return modelAndView;
}

说明:

  • 可以看到我们在页面中使用的itemsCustom就是和Controller方法中形参ItemsQueryVo的一个属性对应(一致)。这样就接收到页面传入的参数值了。
  • 同时对于Controller形参中有多个pojo,如果多个pojo有些属性名一样,那我们可以使用包装类型将多个pojo包装起来,这样就不至于弄混淆。

1.2 数组类型绑定(工程springmvc-mybatis03

1.2.1需求

商品批量删除,用户在页面选择多个商品,批量删除。

1.2.2表现层实现

关键:将页面选择(多选)的商品的id传到Controller方法的形参,方法形参年使用数组接收页面请求的多个商品的id
itemsList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!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>查询商品列表</title>
<script type="text/javascript">
    function deleteItems(){
        //提交form
        document.itemsForm.action="${pageContext.request.contextPath }/items/deleteItems.action";
        document.itemsForm.submit();
    }
    function queryItems(){
        //提交form
        document.itemsForm.action="${pageContext.request.contextPath }/items/queryItems.action";
        document.itemsForm.submit();
    }

</script>
</head>
<body>
    <form name="itemsForm" action="${pageContext.request.contextPath }/items/queryItems.action" method="post">
        查询条件:
        <table width="100%" border=1>
            <tr>
                <td>商品名称:<input name="itemsCustom.name" /></td>
                <td><input type="button" value="查询" onclick="queryItems()"/></td>
                <td><input type="button" value="批量删除" onclick="deleteItems()" /></td>
            </tr>
        </table>
        商品列表:
        <table width="100%" border=1>
            <tr>
                <td>选择</td>
                <td>商品名称</td>
                <td>商品价格</td>
                <td>生产日期</td>
                <td>商品描述</td>
                <td>操作</td>
            </tr>
            <c:forEach items="${itemsList }" var="item">
                <tr>
                    <td><input type="checkbox" name="items_id" value="${item.id}" /></td>
                    <td>${item.name }</td>
                    <td>${item.price }</td>
                    <td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss" /></td>
                    <td>${item.detail }</td>
                    <td><a href="${pageContext.request.contextPath }/items/editItems.action?id=${item.id}">修改</a></td>
                </tr>
            </c:forEach>
        </table>
    </form>
</body>
</html>

1.2.3 Controller方法定义

//批量删除商品信息
@RequestMapping("/deleteItems")
public String deleteItems(Integer[] items_id) throws Exception{
    //调用service批量删除商品
    //................
    
    return "success";
}

说明:这里我们没有进行相关的业务操作,只是使用断点调试查看我们选中的商品id是否传入到了此方法中。

1.3 List类型绑定

1.3.1 需求

通常在需要批量提交数据时,将提交的数据绑定到List<pojo>中,比如:成绩的录入(会批量提交)。本例子需求:批量商品修改,在页面输入多个商品信息,将多个商品信息提交到Controller方法中。

1.3.2 表现层实现

editItems.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!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>查询商品列表</title>
<script type="text/javascript">
    function deleteItems(){
        //提交form
        document.itemsForm.action="${pageContext.request.contextPath }/items/deleteItems.action";
        document.itemsForm.submit();
    }
    function queryItems(){
        //提交form
        document.itemsForm.action="${pageContext.request.contextPath }/items/queryItems.action";
        document.itemsForm.submit();
    }
    
    function editItemsAllSubmit(){
        //提交form
        document.itemsForm.action="${pageContext.request.contextPath }/items/editItemsAllSubmit.action";
        document.itemsForm.submit();
    }
</script>
</head>
<body>
    <form name="itemsForm" action="${pageContext.request.contextPath }/items/queryItems.action" method="post">
        查询条件:
        <table width="100%" border=1>
            <tr>
                <td>商品名称:<input name="itemsCustom.name" /></td>
                <td><input type="button" value="查询" onclick="queryItems()"/></td>
                <td><input type="button" value="批量修改" onclick="editItemsAllSubmit()" /></td>
            </tr>
        </table>
        商品列表:
        <table width="100%" border=1>
            <tr>
                <td>商品名称</td>
                <td>商品价格</td>
                <td>生产日期</td>
                <td>商品描述</td>
                <td>操作</td>
            </tr>
            <c:forEach items="${itemsList }" var="item" varStatus="status">
                <tr>
                    <td><input name="itemsList[${status.index}].name" value="${item.name }"/></td>
                    <td><input name="itemsList[${status.index}].price" value="${item.price }"/></td>
                    <td><input name="itemsList[${status.index}].createtime" value="<fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss" />"/></td>
                    <td><input name="itemsList[${status.index}].detail" value="${item.detail }"/></td>
                </tr>
            </c:forEach>
        </table>
    </form>
</body>
</html>

说明:这里可以看到itemsList 就是pojo中的一个属性(添加一个List属性),这样提交过来的值就会被传递到Controller中。

1.3.3 Controller方法实现

@RequestMapping("/editItemsAllSubmit")
public String editItemsAllSubmit(ItemsQueryVo itemsQueryVo) throws Exception{
            
    return "success";
}

说明:这里通过itemsQueryVo接收批量提交的商品信息,将商品信息存储到itemsQueryVoitemsList属性中。这里itemsList对应包装pojo中的一个属性。

1.4 Map类型参数绑定

对于此种参数绑定,其实和List类型参数绑定类似,这里不做过多说明,只是给出相关示例。

  • 在包装类中定义Map对象,并添加getter、setter方法,action使用包装对象接收。在包装类中定义Map对象如下
public class QueryVo{
    private Map<String, Object> itemInfo = new HashMap<String, Object>();
    //get
    //set
}
  • 页面定义如下
<tr>
    <td>学生信息</td>
    <td>
        姓名:<input type=”text” name=”itemInfo[‘name’]”/>
        年龄:<input type=”text” name=”itemInfo[‘price’]”/>
    </td>
......
</tr>
  • Controller方法定义如下
public String userAddSubmit(Model model, QueryVo  q)throws Exception{
    System.out.println(“q.getStudentInfo()”);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 经过上篇文章Spring、Spring MVC与Mybatis整合工程搭建我们便将SSM的环境搭建了,接下来我们便...
    codingXiaxw阅读 23,285评论 1 38
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,969评论 19 139
  • 主要内容: RequestMapping特性 Controller方法返回值 参数绑定 一、需求分析 这里我们还是...
    yjaal阅读 2,942评论 1 9
  • 特殊类型的参数绑定:包装类型的pojo参数绑定:需求:实现商品查询条件,在商品查询的controller中实现商品...
    MsterKerrigan阅读 377评论 0 1
  • 不识醉眼迷离,怎知此情何意?似醉非醉,何所谓,唯有伊人能相对,杜康始之孟德慕,李白惜之杜浦顾,不为万千,解愁心头绪...
    独孤绪秋阅读 222评论 0 0