逻辑删除设备:(数据表中还有这条记录,不显示出来)

思路:

数据表加个字段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="" cellspacing="" cellpadding="" 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 =;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 ? "" : request.getParameter("pageNum");
String pageSize = request.getParameter("pageSize") == null ? "" : 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;
} }

获取jsp选中复选框的id传到后台controller,进行逻辑删除等操作的更多相关文章

  1. jQuery实现获取选中复选框的值

    <!DOCTYPE html><html><head> <meta charset="UTF-8"> <title>Jq ...

  2. jQuery - 选中复选框则弹出提示框

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  3. 自动化测试selenium(四)check,选中复选框,操作一组元素

    定位复选框位置 打开浏览器,按F12,审查元素 接下来,我们要实现选中复选框 List<WebElement> inputs = driver.findElements(By.tagNam ...

  4. JS实现页面table鼠标移动改变tr行颜色,单击tr选中复选框功能

    JS源代码: //需要设置tr背景颜色 var highlightcolor='#bfecfc'; //设置背景颜色 function changeto(index){ var tr1 = docum ...

  5. 【jquery】 选中复选框 和 return false 的影响

    $('id').attr('checked',true); return false;   如果后面接上return false 的话,复选框的钩钩不会改变,但是.is(':checked')仍然能检 ...

  6. HTML 使用jQuery选中复选框 简易版

    <html><head>   <meta charset="utf-8">   <script src="jquery-1.7. ...

  7. EasyUI设置选中复选框

    //设置选中 $('#isBind').prop('checked', true); //获取是否选中 var isChecked = $('#isBind').prop('checked'); if ...

  8. 选中复选框,才能在文本框中输东西。button按钮已启用,

  9. listview禁止双击一条之后选中复选框按钮的方法

    this.listViewUsers.SelectedItems[0].Checked = !this.listViewUsers.SelectedItems[0].Checked;

随机推荐

  1. Python3基础 os mkdirs 创建多层文件夹

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  2. Python3基础 父,子类普通方法重名 子类方法覆盖父类方法

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  3. 全网最详细Apache Kylin1.5安装(单节点)和测试案例

    转:http://blog.itpub.net/30089851/viewspace-2121221/ 微视频链接: Apache Kylin初识      1.版本(当前实验版本组合,版本一定要兼容 ...

  4. 列举一些有所帮助的blog和文章

    w3school hdoj imooc CSDN Github myGithub CmdMarkdown 一直在路上--记我从初中到本科近十年的学习成长历程 作者:周见智 C++中队列的建立与操作详细 ...

  5. wc的使用

    统计文件个数 ls -l |grep "^-"|wc -l 统计目录的个数 ls -l|grep "^d"|wc -l 统计文件个数(包括子文件夹) ls -l ...

  6. Phpstorm配置scss不生成缓存

    --no-cache 加上这个,就不会生成 .sass-cache 文件夹了.

  7. MongoDB(课时8 模运算)

    3.4.2.3 求模 模运算使用“$mod”来完成,语法: {$mod : [除数,余数]} 范例:求模 db.students.find({"age" : {"$mod ...

  8. YOLO V1论文理解

    摘要 作者提出了一种新的物体检测方法YOLO.YOLO之前的物体检测方法主要是通过region proposal产生大量的可能包含待检测物体的 potential bounding box,再用分类器 ...

  9. c++ primer plus 第七章 课后题答案

    #include <iostream> using namespace std; double HAR_AVG(double, double); void TEST(bool); int ...

  10. Python 爬虫-Scrapy爬虫框架

    2017-07-29 17:50:29 Scrapy是一个快速功能强大的网络爬虫框架. Scrapy不是一个函数功能库,而是一个爬虫框架.爬虫框架是实现爬虫功能的一个软件结构和功能组件集合.爬虫框架是 ...