分页查询关键代码 多条件查询关键代码 删除选中商品关键代码 修改要先回显再修改 修改要先回显再修改 同一业务集中使用同一servlet的方法
分页查询关键代码:
通过servlet转发回来的各种信息进行分页的设计(转发回的信息有 分页查询的List集合 查询的页码 查询的条数 查询的数据库总条数 查询的总页码)
从开始时循环10次出现十个数字开始逐步细化
注意:jstl(java标砖标签库) 的判断条件 test="" 引号中的变量运算写在一个${ } EL表达式中,运算完再显示结果
<div align="center">
<c:if test="${pageNumber!=1 }">
<span style="font-size:x-large;"><a href="${pageContext.request.contextPath }/shangpin?md=findByPage&pageNumber=1">第一页</a></span>
<span style="font-size:x-large;"><a href="${pageContext.request.contextPath }/shangpin?md=findByPage&pageNumber=${pageNumber-1 }">上一页</a></span>
</c:if>
<!-- 分页查询的核心 -->
<c:forEach begin="1" end="${totalPages }" step="1" var="n">
<!-- n能显示出来的条件 -->
<c:if test="${(pageNumber-n)<=5&&(n-pageNumber)<=4 }">
<c:if test="${n!=pageNumber }">
<span style="font-size:x-large;"><a href="${pageContext.request.contextPath }/shangpin?md=findByPage&pageNumber=${n }">${n }</a></span>
</c:if>
<c:if test="${n==pageNumber }">
<span style="font-size:x-large;">${n }</span>
</c:if>
</c:if>
</c:forEach>
<c:if test="${pageNumber!=totalPages }">
<span style="font-size:x-large;"><a href="${pageContext.request.contextPath }/shangpin?md=findByPage&pageNumber=${pageNumber+1 }">下一页</a></span>
<span style="font-size:x-large;"><a href="${pageContext.request.contextPath }/shangpin?md=findByPage&pageNumber=${totalPages }">最后一页</a></span>
</c:if>
</div>
多条件查询关键代码:
拼串的时候注意如果带?的不用写单引号'
如果不带?的sql串,记得带单引号'
public List<Product> queryMore(String queryName, String queryDesc) throws SQLException {
String sql="SELECT * FROM product where 1=1 ";
if(queryName!=null && queryName.trim()!="") {
sql=sql+"and pname like '%"+queryName+"%'";
}
if(queryDesc!=null && queryDesc.trim()!="") {
sql=sql+" and pdesc like '%"+queryDesc+"%'";
}
System.out.println(sql);
List<Product> pros=qr.query(sql, new BeanListHandler<Product>(Product.class));
System.out.println(pros);
return pros;
}
删除选中商品关键代码:
public void deleteSelect(String[] checks) throws SQLException {
String sql="delete from product where pid in(";
for(String str:checks) {
sql=sql+"'"+str+"'"+",";
}
sql=sql.substring(0, sql.length()-1);
sql=sql+ ")";
qr.update(sql);
}
前端部分
function deleteSelect(){
if(confirm("确认删除这些商品吗?")){
var form1=document.getElementById("form1");
form1.submit();
}
}
<c:if test="${not empty shangpins }">
<form method="post" action="${pageContext.request.contextPath }/shangpin?md=deleteSelect" id="form1">
<c:forEach items="${shangpins }" var="s">
<tr>
<td width="6%" align="center"><input name="checks" type="checkbox" value="${s.pid }"></td>
<td width="8%"><img width="180px" alt="" src="${s.pimage }"></td>
<td width="6%">${s.pname }</td>
<td width="8%">${s.shop_price }</td>
<td width="8%">${s.market_price }</td>
<td>${s.pdesc }</td>
<td width="8%"><a href="${pageContext.request.contextPath }/shangpin?md=huixian&pid=${s.pid}">修改</a></td>
<td width="8%"><a href="javascript:void(0);" onclick="agree('${s.pid}')">删除</a></td>
</tr>
</c:forEach>
</form>
</c:if>
修改要先回显再修改
<td width="8%"><a href="${pageContext.request.contextPath }/shangpin?md=huixian&pid=${s.pid}">修改</a></td>
private void edit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
BeanUtils.populate(p, request.getParameterMap());
service.edit(p);
response.sendRedirect(request.getContextPath()+"/shangpin?md=findAll");
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("msg", "更新商品失败了");
request.getRequestDispatcher("/msg.jsp").forward(request, response);
}
}
private void huixian(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
String pid=request.getParameter("pid");
Product product=service.getProduct(pid);
request.setAttribute("product", product);
request.getRequestDispatcher("/xiugaishangpin.jsp").forward(request, response);
} catch (SQLException e) {
e.printStackTrace();
request.setAttribute("msg", "回显商品失败了");
request.getRequestDispatcher("/msg.jsp").forward(request, response);
}
}
同一业务集中使用同一servlet的方法
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String md=request.getParameter("md");
if("findAll".equals(md)) {
findAll(request,response);
}else if("add".equals(md)){
add(request,response);
}else if("huixian".equals(md)) {
huixian(request,response);
}else if("edit".equals(md)) {
edit(request,response);
}else if("delete".equals(md)) {
delete(request,response);
}else if("deleteSelect".equals(md)) {
deleteSelect(request,response);
}else if("queryMore".equals(md)){
queryMore(request,response);
}else if("findByPage".equals(md)) {
findByPage(request,response);
}
}
前端
<span style="font-size:x-large;"><a href="${pageContext.request.contextPath }/shangpin?md=findByPage&pageNumber=${pageNumber-1 }">上一页</a></span>
用?md=findAll的方法
servlet判断md的值调用相应方法
也可以使用反射的方法代替
分页查询关键代码 多条件查询关键代码 删除选中商品关键代码 修改要先回显再修改 修改要先回显再修改 同一业务集中使用同一servlet的方法的更多相关文章
- Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)
Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...
- mongodb_查询操作使用_条件查询、where子句等(转)
<?php /* mongodb_查询操作使用_条件查询.where子句等(转并学习) 1.find()/findOne() mongodb数据库的查询操作即使用find()或者findO ...
- util-C# 复杂条件查询(sql 复杂条件查询)查询解决方案
ylbtech-funcation-util: C# 复杂条件查询(sql 复杂条件查询)查询解决方案 C# 复杂条件查询(sql 复杂条件查询)查询解决方案 1.A,Ylbtech.Model返回 ...
- angularJS 条件查询 品优购条件查询品牌(条件查询和列表展示公用方法解决思路 及 post请求混合参数提交方式)
Brand.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...
- php学习之sqlite查询语句之多条件查询
一.PHP+Mysql多条件-多值查询示例代码: index.html代码:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitio ...
- c# MongoDB分页辅助类,支持多条件查询
创建一个获取MongoDB数据库实例的类 public class Db { private static IMongoDatabase db = null; private static reado ...
- sql根据一个表查询的数据作为条件查询另一个表
代码格式如下: ) 要注意的是:in后面的查询语句必须是查询一个字段跟前面的表相对应的.比如要根据订单号orderID,OpenBills 这个表就需要查询到orderID这个字段,BillConsu ...
- SpringDataJpa多条件查询代码封装
package com.pantech.cloud.mlogistics.util; import com.mysql.jdbc.StringUtils; import org.springframe ...
- 【Oracle】曾经的Oracle学习笔记(4-7)多表联合查询,子查询,动态条件查询
一.多表联合查询 二.子查询 三.动态条件查询 LESSON 4 Displaying Data from Multiple Tables------------------------------- ...
随机推荐
- [转]怎么样快速入门AngularJS?
本文转自:http://www.ngnice.com/posts/205af1ea1e13d2 怎么样快速学习AngularJS? 相信很多初学者都有过或者类似的疑问,其实这个问题没有标准的答案,每个 ...
- [一点一滴.NET]前台线程和后台线程
前台线程和后台线程就是通过线程实例的属性IsBackground=true or false来区分的. 新建一个线程是默认是后台线程. 前台线程全部执行完之后,才退出进程. 进程退出,所有的后台线程全 ...
- 【Ionic】---Using Local Notifications In Your Ionic Framework App
Using Local Notifications In Your Ionic Framework App 配置好ng-cordova先 <script src="lib/ngCord ...
- pop协议,邮件密码嗅探 使用说明
思路与源代码 可以查看 https://www.cnblogs.com/likehc/p/10140174.html 因为软件用的是Wincap,所以 第一步安装下 WinPcap 第二步,打开 sn ...
- 如何解读IL代码
如何解读IL代码 关于IL代码,我有将从三个方面去揭开它神秘的面纱.IL代码是什么?我们为什么要去读懂IL代码?我们如何去读懂IL代码?这三个问题的解答,将是我解读IL代码的整体思路. IL代码是什么 ...
- 使用ajax获取用户所在地的天气
1.要获取用户归属地的天气,首先得获取用户所在的市区, 这里先获取用户的IP,通过IP获取IP的归属地,从而得到用户 地址. 获取客户端ip: js: <scripttype="tex ...
- base标签
我们扒取到网站源码很多时候发现路径是采用相对路径,这时候我们就需要采用base标签了,用法非常简单, <base href="我们扒取网站的域名"/> 这时相对路径就相 ...
- QtWebkits如何向QtWebEngine过渡
QtWebkits如何向QtWebEngine过渡 1. 前言 很遗憾,QtWebkits在Qt5.6以上版本被淘汰了,对于这个接口良且和其他类例如QWebFrame完美结合的组件就这么没了,我只能表 ...
- C#设计模式--抽象工厂模式(创建型模式)
一.抽象工厂模式: 在工厂模式中具体的产品和具体的工厂是一一对应的,一个工厂只能生产一种产品,结构单一,例如小米公司刚开始是只生产小米手机,但是伴随着公司的发展,他们需要生产不同型号的手机,也会生产路 ...
- Servlet是线程安全的吗?
Servlet不是线程安全的. 要解释为什么Servlet为什么不是线程安全的,需要了解Servlet容器(即Tomcat)使如何响应HTTP请求的. 当Tomcat接收到Client的HTTP请求时 ...