ssm项目第二天记录手稿:

1.纸质版过程

page1:

在这里插入图片描述

page2:

在这里插入图片描述

2.demo

2.1.添加

product-list1.jsp:

<!--${pageContext.request.contextPath}/product/save.do,form表单提交数据到后台-->
<form action="${pageContext.request.contextPath}/product/save.do"
				method="post">
				<!-- 正文区域 -->
				<section class="content"> <!--产品信息-->

				<div class="panel panel-default">
					<div class="panel-heading">产品信息</div>
					<div class="row data-type">

						<div class="col-md-2 title">产品编号</div>
						<div class="col-md-4 data">
						<!--为每一项添加输入框-->
							<input type="text" class="form-control" name="productNum"
								placeholder="产品编号" value="">
						</div>
						<div class="col-md-2 title">产品名称</div>
						<div class="col-md-4 data">
							<input type="text" class="form-control" name="productName"
								placeholder="产品名称" value="">
						</div>
						<div class="col-md-2 title">出发时间</div>
						<div class="col-md-4 data">
						<!--时间输入框的开始-->
							<div class="input-group date">
								<div class="input-group-addon">
									<i class="fa fa-calendar"></i>
								</div>
								<input type="text" class="form-control pull-right"
									id="datepicker-a3" name="departureTime">
							</div>
							<!--时间输入框的结束-->
						</div>


						<div class="col-md-2 title">出发城市</div>
						<div class="col-md-4 data">
							<input type="text" class="form-control" name="cityName"
								placeholder="出发城市" value="">
						</div>

						<div class="col-md-2 title">产品价格</div>
						<div class="col-md-4 data">
							<input type="text" class="form-control" placeholder="产品价格"
								name="productPrice" value="">
						</div>

						<div class="col-md-2 title">产品状态</div>
						<div class="col-md-4 data">
							<select class="form-control select2" style="width: 100%"
								name="productStatus">
								<option value="0" selected="selected">关闭</option>
								<option value="1">开启</option>
							</select>
						</div>

						<div class="col-md-2 title rowHeight2x">其他信息</div>
						<div class="col-md-10 data rowHeight2x">
							<textarea class="form-control" rows="3" placeholder="其他信息"
								name="productDesc"></textarea>
						</div>

					</div>
				</div>
				<!--订单信息/--> <!--工具栏-->
				<div class="box-tools text-center">
					<button type="submit" class="btn bg-maroon">保存</button>
					<button type="button" class="btn bg-default"
						onclick="history.back(-1);">返回</button>
				</div>
				<!--工具栏/--> </section>
				<!-- 正文区域 /-->
			</form>

dao:

@Insert("insert into product (productNum,productName,cityName,departureTime,productPrice,productDesc,productStatus) values(#{productNum},#{productName},#{cityName},#{departureTime},#{productPrice},#{productDesc},#{productStatus})")
    public void save(Product product);

service的实现类:

@Override
    public void save(Product product){
         productDao.save(product);
    }

controller:

 @Autowired
    private IProductService productService;

    @RequestMapping("/save.do")
    public String save(Product product){
        productService.save(product);
        return "redirect:findAll.do";//新增后要从数据库重新获取数据
    }

2.2.删除(含批量):

dao:

@Delete({"<script>",
            "delete from product where id in",
            "<foreach collection='list' item='id' open='(' close=')' separator=','>",
            "#{id}",
            "</foreach>",
            "</script>"}
    )
    public int  deleteProduct(List<String> id);

service的实现类:

@Override
    public boolean deleteProduct(List<String> id){

            int result = productDao.deleteProduct(id);
        if(result>0) {
            System.out.println(result);
            return true;
        }else {
            return false;
        }

    }

controller:

@RequestMapping("/delete.do")
    @ResponseBody
    //@RequestParam("productList")与前端ajax中data:{productList:productList.toString()},data里的属性名(key)productList要一致
    public Object deleteProduct(@RequestParam("productList") String productList, Model model){
        //js数组默认以逗号为分隔符,转为字符串传过来需要过滤逗号
        String[] strs=productList.split(",");
        List<String> ids=new ArrayList<>();
        for(int i=0;i<strs.length;i++){
            ids.add(strs[i]);
        }
        Map<String, Integer> map=new HashMap<String, Integer>();
        boolean isOk = productService.deleteProduct(ids);
        if(isOk) {
            map.put("result",1);
        }else {
            map.put("result",0);
        }
        //返回一个键值对给前端中data:{productList:productList.toString()}里的data,即data(也是一个key),也就是将data对应的值改为map
        return JSON.toJSONString(map);
    }

前端:

<!--onclick="deleteAll()绑定点击事件-->
<button type="button" class="btn btn-default" title="删除" onclick="deleteAll()"><i class="fa fa-trash-o"></i> 删除</button>

点击删除按钮触发的事件:

<!-- 批量删除的操作 -->
        function deleteAll() {
        //name的值要与复选框中name一致
            var checkNum=$("input[name='ids']:checked").length;
            if(checkNum==0){
                alert("请至少选择一项");
                return;
            }
            if(confirm("确定要删除吗?")){
                var productList=new Array();
                $("input[name='ids']:checked").each(function () {
                    productList.push($(this).val())
                });
            }
            $.ajax({
                type:"post",
                url:"${pageContext.request.contextPath}/product/delete.do",//controller中的请求路径
                async:false,
                <!--data为属性,productList为数组,转化为字符串后作为请求参数传到后端-->
                data:{productList:productList.toString()},//controller返回的数据为data,{'productList':productList.toString()}为json对象,例如data:{result:1}
                dataType:'json',
                success:function (data) {
                <!--data.result获取result的值-->
                    if(data.result > 0 ){
                        alert("删除成功")
                    }

                },
                error:function () {
                    alert("删除失败")
                    document.execCommand('Refresh')
                }
            })
            window.location.reload(true)
        }

以上是选择1个或者多个删除,全选和全不选前端代码已实现,无需改动。

3.总结

  • 在ssm项目中,oracle数据库插入数据需要提交才能在页面上获取数据
  • @RequestMapping("/findAll.do")${pageContext.request.contextPath}/product/findAll.do有了更深层次的理解:
    ${pageContext.request.contextPath}取出部署的应用程序名或者是当前的项目名称,如下图箭头所指,即/xlh_ssm_web,而"/"代表的含义就是http://localhost:8888,这个端口是配置tomcat时定义的,也就是说${pageContext.request.contextPath}取出了http://localhost:8888/xlh_ssm_web,特别注意的是:webapp下的直接文件或目录都属于xlh_ssm_web下的直接下属目录或文件,例子:${pageContext.request.contextPath}/pages/product-add.jsp
    在这里插入图片描述
    至于在controller类中的@RequestMapping("/findAll.do")意为只要请求路径最后为/findAll.do都会被该类中带有该注解的方法拦截请求并处理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fire king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值