最近做了一个web项目,记录一下以后可能需要用到的技术点,加深印象!有全选与反选、下拉框的值不重复、模糊查询与多条件查询

最近做了一个web项目,记录一下以后可能需要用到的技术点,加深印象!有全选与反选、下拉框的值不重复、模糊查询与多条件查询

一、jsp页面实现全选和反选功能

在对数据进行操作时,不可避免的会,用到对多条数据进行操作,这就可以用到全选和反选功能

1.原理是,设置一个点击事件,从而在javascript中,获取所有name值相同 的复选框,然后进行循环设置按钮是否选中

2.首先是body页面的代码

<span class="newfont07">选择:
	<a href="javascript:void(0);" onclick="selectAll();">全选</a>-
	<a href="javascript:void(0);" onclick="unselectAll();">反选</a>
</span> 
<c:forEach items="${tasklist}" var="task">
	<tr bgcolor="#FFFFFF" align="center">
		<td height="20">
			<input type="checkbox" name="delid" value="${task.id}"/>${task.id}
		</td>
		<td></a>${task.title}</td>
		<td>${task.beginTime}</td>
		<td>${task.TEmployeeByTaskSenderId.name }</td>
		<td>${task.TEmployeeByTaskReceiverId.name }</td>
		<td>${task.priority }</td>
		<td><a href="QueryEditTaskServlet?id=${task.id }">编辑|</a>
		<a href="QueryTaskMXServlet?id=${task.id }">查看|</a> 
		<a href="DeletetaskServlet?id=${task.id }&falg=_id" onclick="return confirm('确认删除?')">删除</a>
		</td>
	</tr>
</c:forEach>

这里a标签中href=“javascript:void(0);”,是为了防止页面跳转
防止页面跳转还如下方法:

<a href="#" >test</a>   //点击链接,页面默认上滚到页的顶部,
                        //但可以加上 οnclick="return false",防止上滚到页的顶部

<a href="####" >test</a> //使用2个到4个#,见的大多是"####",也有使用"#all"等其他的。默认不上滚到页的顶部

<a href="javascript:void(0);" >test</a> //其中,javascript:void(0) 仅仅表示一个死链接,执行空事件
                                        //新浪微博写法

<a href="javascript:;" >test</a> //QQ空间写法
--------------------- 
作者:xsj_blog 
来源:CSDN 
原文:https://blog.csdn.net/xsj_blog/article/details/53453167 
版权声明:本文为博主原创文章,转载请附上博文链接!

3.然后在js中,获取name值为delid的复选框,并进行循环判断选中状态

<script type="text/JavaScript">
	function selectAll(){
		/*实现全选操作  */
		var delid = document.getElementsByName("delid");
		for ( var i = 0; i < delid.length; i++) {
			delid[i].checked = "checked";
		}
	}
	function unselectAll(){
		/*实现反选操作  */
		var delid = document.getElementsByName("delid");
		for ( var i = 0; i < delid.length; i++) {
			if (delid[i].checked) {
				delid[i].checked = "";
			}else{
				delid[i].checked = "checked";
			}
		}
	}
</script>

二、jsp页面下拉框里面的取值,不能重复

例如:在选择职位时,职位的总个数是通过数据库获取,并且是固定的~,但是当我们对一条数据进行编辑时,在页面中需要显示他原本的值,以及当点击下拉框时,列出其余值。
这里就要进行一下判断了,不然当点击下拉框时,就会出现重复值

效果如下如所示:
在这里插入图片描述
这是数据表里面的数据 ↓ ↓ ↓
在这里插入图片描述

  1. 在servlet界面,传入数据值
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		//1、设置字符集编码
		response.setContentType("text/html");
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		
		//2、调用业务逻辑层
		int id = Integer.parseInt(request.getParameter("id"));
		
		TTaskDAO dao = new TTaskDAO();
		TTask ttask = dao.findById(id);
		
		//获得员工的姓名
		TEmployeeDAO empdao = new TEmployeeDAO();
		List<TEmployee> emplist = empdao.findAll();
		
		//3、把查询到的信息,保存到作用域中
		request.setAttribute("ttask", ttask);
		request.setAttribute("emplist", emplist);
		
		//4、重定向至显示页面
		request.getRequestDispatcher("editrenwu.jsp").forward(request, response);
	}
  1. 在jsp页面中,用标签库,进行判断,是否已经存在,并把其余数据放到下拉框中
	<td>
	<select name="taskReceiver" >
      	<!-- 判断是否已经存在 -->
        <c:forEach var="e" items="${emplist}" varStatus="status">
	        <c:if test="${e.name==ttask.TEmployeeByTaskReceiverId.name }">
	        	<option value="${e.name }" selected="selected">${e.name }</option>
	        </c:if>
        
	        <c:if test="${e.name!=ttask.TEmployeeByTaskReceiverId.name }">
	        	<option value="${e.name }">${e.name }</option>
	        </c:if>
    	 </c:forEach>
    </select>
    </td>

三、实现模糊查询,多条件查询

关于至一点,我原本的想法是,直接在servlet里面进行加工,然后在去执行查询方法
但后来我找到了一位前辈写的代码,非常的厉害。在此分享出来,一遍以后查看。

1.首先servlet中,获得需要进行模糊查询的属性

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		//1、设置字符集编码
		response.setContentType("text/html");
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		
		//2、调用业务逻辑层
		//获得查询文本框的内容
		String textTitle = request.getParameter("textTitle");
		String TimeMin = request.getParameter("TimeMin");
		String TimeMax =request.getParameter("TimeMax");
		
		TTaskDAO dao = new TTaskDAO();
		System.out.println(textTitle != null && textTitle.length() > 0);
		List<TTask> titlelist = dao.findTime(TimeMin, TimeMax,textTitle);
		
		//3、把查询到的信息,保存到作用域中
		request.setAttribute("tasklist", titlelist);
//		request.setAttribute("emplist", emplist);
		
		//4、重定向至显示页面
		request.getRequestDispatcher("listrenwu.jsp").forward(request, response);
	}
  1. 在执行findTime(TimeMin, TimeMax,textTitle)时,在hql语句后面,添加判断语句
public List findTime(String minTime, String maxTime, String titles) {
   	log.debug("finding all TTask instances");
   	try {
   		String queryString = "from TTask ";
   		if (titles != null && titles.length() > 0) {
   			queryString += " and title like '%" + titles + "%'";
   		}
   		if (minTime != null && titles.length() > 0) {
   			queryString += " and beginTime > '" + Timestamp.valueOf(minTime) + "'";
   		}
   		if (maxTime != null && titles.length() > 0) {
   			queryString += " and beginTime < '" + Timestamp.valueOf(maxTime) + "'";
   		}
   		// 替换第一个and为where
   		Query queryObject = getSession().createQuery(
   				queryString.toString().replaceFirst("and", "where"));
   		return queryObject.list();
   	} catch (RuntimeException re) {
   		log.error("find all failed", re);
   		throw re;
   	}
}
其中最重要的便是这句,把hql语句,转化成字符串,然后在把第一个出现的and替换成where

queryString.toString().replaceFirst(“and”, “where”)

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值