最近做了一个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页面下拉框里面的取值,不能重复
例如:在选择职位时,职位的总个数是通过数据库获取,并且是固定的~,但是当我们对一条数据进行编辑时,在页面中需要显示他原本的值,以及当点击下拉框时,列出其余值。
这里就要进行一下判断了,不然当点击下拉框时,就会出现重复值
效果如下如所示:
这是数据表里面的数据 ↓ ↓ ↓
- 在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);
}
- 在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);
}
- 在执行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”)