逻辑删除设备:(数据表中还有这条记录,不显示出来)
思路:
数据表加个字段display,值为Y/N,只显示display为Y的,
删除时,把display的值改为N,就不会显示出来
jsp页面如下图,要获取选中的复选框,把选中的id传给SpringMVC的Controller
完整流程如下:
1、sbgl_list.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %> <!doctype html> <c:set var="ctx" value="${pageContext.request.contextPath}" scope="session"/> <html> <head> <title>设备管理</title> <script type="text/javascript"> function console(consoleTag, sbbm, stateTag) { //table表中选中的复选框赋值给checkedSubject var checkedSubject = $('#showSbgl input[name=checkIds]:checkbox:checked'); var checkedIds=""; //循环获取选中的复选框的value,这个value是数据表中每条记录的主键${sbgl.sbbm},传给后台,后台就能根据主键查找到数据表的相应记录
//将其value用逗号隔开拼接成一个字符串 checkedSubject.each(function() { checkedIds=checkedIds+","+$(this).val(); });
//上面的字符串赋值给隐藏域表单 $('#checkedIds').val(checkedIds); // 添加。 if("add" == consoleTag) { $('#formid').prop("action", "${ctx}/sbgl/sbgl_add_list"); } // 更新。 if("update" == consoleTag) { $('#formid').prop("action", "${ctx}/sbgl/sbgl_update_list"); } //删除 if("delete" == consoleTag) { $('#formid').prop("action", "${ctx}/sbgl/sbgl_delete_list"); }
//提交隐藏域表单,后台才能获取隐藏域表单的值 $('#formid').submit(); } /** * 搜索。 */ function search() { $('#searchForm').submit(); } </script> </head> <body> <div class="clear"> <div class="panel panel-default yogurt_route" id="yogurt_route"> <a href="${ctx }/home/home_list">首页</a> > <a href="javascript:void(0);" onclick="navigate();">设备管理</a> > 设备列表 </div> </div> <!-- 新增、删除 --> <div class="panel panel-default" style="margin-top:10px"> <div class="yogurt_panel_title_core"> <span class="state_bold">共查询出数据结果:<span class="state_red">${resultMap.totalNum}</span>条</span> </div> <div class="more_core3"> <button type="button" class="btn btn-success yogurt_search_button2" onclick="console('add','');">新增设备</button> <button type="button" class="btn btn-success yogurt_search_button2" onclick="console('delete','');">删除设备</button> </div> </div> <!-- 列表 --> <div class="yogurt_elementsbox_core clear"> <div class="yogurt_elementsbox_table_article" id="yogurt_elementsbox_table_article"> <table id="showSbgl" border="0" cellspacing="0" cellpadding="0" class="table yogurt_elementsbox_table"> <thead> <tr class="yogurt_tab_back" onmouseover="this.className='yogurt_tab_trhover'" onmouseout="this.className='yogurt_tab_back'"> <th width="3%"><input type="checkbox" name="sbglId" onClick="allchecked(this)"></th> <th width="10%">设备名称</th> <th width="10%">设备类型</th> <th width="10%">所属市县</th> </tr> </thead> <tbody id="sbglTb"> <c:forEach var="sbgl" items="${resultMap.resultList}" varStatus="status"> <tr> <td><input type="checkbox" id="checkIds" name="checkIds" value=${sbgl.sbbm }></td> <td>${sbgl.sbmc }</td> <td>${sbgl.sblx }</td> <td>${sbgl.sssx }</td> </tr> </c:forEach> </tbody> </table> </div> </div> <%-- 隐藏域表单 --%> <form action="" method="post" id="formid"> <input type="hidden" name="sbbm" id="sbbm" /> <input type="hidden" name="checkedIds" id="checkedIds" /> </form> </body> </html>
2、SbglController.java
Spring Data JPA数据访问操作框架
package com.jinhetech.yogurt.sbgl.controller; @Controller("sbglController") @RequestMapping("/sbgl") public class SbglController extends BaseController { @Resource(name = "sbglService") private SbglService sbglService; /** * 查询设备信息列表(支持分页和多条件查询)。 * * @author YangZhenghua 2014-5-28 * @throws Exception */ @RequestMapping("sbgl_list") @RequiresRoles("sbgl/sbgl_list") public String getSbglList(Model model) throws Exception { Map<String, Object> resultMap = null; //serArgs里存着前台传来的查询时的where条件字段(根据条件搜索) Map<String, String> serArgs = new HashMap<String, String>(); serArgs = SbglUtil.getSelArgsToMap(request); resultMap = sbglService.getSbglBySearch(serArgs, "azsj"); model.addAttribute("resultMap", resultMap); return "sbgl/sbgl_list"; } /** * 逻辑删除设备,就是把数据表对应要删除的记录的display字段设为N, * 查询时,加个where条件,只查询display为"Y"的即可 */ @RequestMapping("sbgl_delete_list") @RequiresRoles("sbgl/sbgl_delete_list") public String getDeleteList(Model model) throws Exception { String id=request.getParameter("checkedIds"); //获取前台隐藏域存着的选中的复选框的value String checkedIds[]=id.split(","); //进行分割存到数组 String temp=""; Sbgl sbgl; for(int i =0;i<checkedIds.length;i++){ if(!checkedIds[i].equals("")){ System.out.println(checkedIds[i]); temp=checkedIds[i]; sbgl=sbglService.getById(temp); //根据ID获取数据表中这条ID的整条记录 sbgl.setDisplay("N"); //更改这个ID的display字段的值 sbglService.save(sbgl); //保存更改 } } return getSbglList(model);//返回sbgl_list页面的处理方法 } }
3、SbglService.java
package com.jinhetech.yogurt.sbgl.service; public interface SbglService { public Sbgl save(Sbgl sbgl) throws Exception; public Map<String, Object> getSbglBySearch(Map<String, String> serArgs, final String sortType) throws Exception; //根据id查询所有设备信息 public Sbgl getById(String id) throws Exception; }
4、SbglServiceImpl.java
package com.jinhetech.yogurt.sbgl.service.impl; @Service("sbglService") @Transactional public class SbglServiceImpl implements SbglService{ @Resource(name = "sbglDao") private SbglDao sbglDao; public Sbgl save(Sbgl sbgl) throws Exception { return sbglDao.save(sbgl); } /** * 查询用户信息列表(支持分页和多条件查询)。 * * Spring Data JPA知识 */ public Map<String, Object> getSbglBySearch(final Map<String, String> serArgs, final String sortType) throws Exception { // 获得分页对象pageable,并且在pageable中页码是从0开始,设定按照sortType升序排列 Pageable pageable = PageUtils.buildPageRequest(Integer.valueOf(serArgs.get("pageNum")), Integer.valueOf(serArgs.get("pageSize")), sortType); Page<Sbgl> objPage = sbglDao.findAll(new Specification<Sbgl>() { public Predicate toPredicate(Root<Sbgl> root, CriteriaQuery<?> query, CriteriaBuilder cb) { List<Predicate> lstPredicates = new ArrayList<Predicate>(); if (TextUtils.isNotBlank(serArgs.get("serSbmc"))) { lstPredicates.add(cb.like(root.get("sbmc").as(String.class), "%" + serArgs.get("serSbmc") + "%")); } if (TextUtils.isNotBlank(serArgs.get("serSblx"))) { lstPredicates.add(cb.like(root.get("sblx").as(String.class), "%" + serArgs.get("serSblx") + "%")); } if (TextUtils.isNotBlank(serArgs.get("serSssx"))) { lstPredicates.add(cb.like(root.get("sssx").as(String.class), "%" + serArgs.get("serSssx") + "%")); } if (TextUtils.isNotBlank(serArgs.get("serJdmc"))) { lstPredicates.add(cb.like(root.get("ssjd").as(String.class), "%" + serArgs.get("serJdmc") + "%")); } if (TextUtils.isNotBlank(serArgs.get("serSbzt"))) { lstPredicates.add(cb.equal(root.get("sbzt"), serArgs.get("serSbzt"))); } //只显示display等于'Y'的记录 lstPredicates.add(cb.equal(root.get("display"), serArgs.get("display"))); Predicate[] arrayPredicates = new Predicate[lstPredicates.size()]; return cb.and(lstPredicates.toArray(arrayPredicates)); } }, pageable); return PageUtils.getPageMap(objPage); } public Sbgl getById(String id) throws Exception { return sbglDao.findOne(id); } }
5、DAO:
package com.jinhetech.yogurt.sbgl.dao; @Repository("sbglDao") public interface SbglDao extends PagingAndSortingRepository<Sbgl, String>, JpaSpecificationExecutor<Sbgl> { }
6、SbglUtil.java
package com.jinhetech.yogurt.sbgl.util; /** * 用户功能模块工具类。 * */ public class SbglUtil { /** * 封装从前台传递过来的查询参数。 * * @author YangZhenghua * @date 2014-6-26 */ public static Map<String, String> getSelArgsToMap(HttpServletRequest request) throws Exception { Map<String, String> serArgs = new HashMap<String, String>(); String serSbmc = request.getParameter("serSbmc"); String serSblx = request.getParameter("serSblx"); String serSssx = request.getParameter("serSssx"); String serJdmc = request.getParameter("serJdmc"); String serSbzt = request.getParameter("serSbzt"); String display="Y"; String pageNum = request.getParameter("pageNum") == null ? "1" : request.getParameter("pageNum"); String pageSize = request.getParameter("pageSize") == null ? "10" : request.getParameter("pageSize"); serArgs.put("serSbmc", serSbmc); serArgs.put("serSblx", serSblx); serArgs.put("serSssx", serSssx); serArgs.put("serJdmc", serJdmc); serArgs.put("serSbzt", serSbzt); serArgs.put("display", display); serArgs.put("pageNum", pageNum); serArgs.put("pageSize", pageSize); return serArgs; } }