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()”);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容

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