思路:
a.由于操作问题引发的表单重复提交问题。在页面上设置重复提交时οnsubmit="return false;"。或者如果是submit按钮的话可设置:οnclick="checkSubmit(); return false;" 。再活着点击提交之后直接用javaScript将按钮禁止: function checkSubmit(){
document.forms[0].submit();
document.forms[0].ok.disabled=true;
}
b.在后台采用uuid方法进行设置
c.高级分页查询。核心思想:为节省资源和时间根据条件查询数据而不是直接查询全部!!!需要获取数据库中的总条数。然后根据要进计算分页处理。根据处理方法在查询数据库,取出需要的数据。当然,上下翻页也需要进行详细处理。
表单重复提交解决方案:
* 采用UUID
* 当jsp页面运行时,生成一个唯一的UUID数,放置在session中一份,同时也放置到页面的一个隐藏域中
隐藏域:
<input type="hidden" name="uuid.html" value="<%=TokenUUID.getTokenUUID().getUUIDAsString(request)%>" >
session:
public String getUUIDAsString(HttpServletRequest request){
//如session存在使用存在,如sessioon不存在,创建一个新的
HttpSession session=request.getSession();
//生成uuid唯一标识
String uuid=UUID.randomUUID().toString();
if(uuid!=null){
//放置uuid到session中
session.setAttribute("uuid.action", uuid);
}
return uuid;
}
mysql的分页查询
格式:
select clolumn1,column2... from table_name order by id limit beginindex,length
limit beginindex,length
* limit 分页查询标志
* beginindex 开始查询的索引
* length 从该索引(beginindex)开始,查询的数量
select id,cname,jobid,sourceid,locationid,pcode,address from company order by id limit 3,3
总结分页:
* 点击 <a href="/itcast1130webDBUtil/company/searchConditionServlet"
target="mainFrame" title="客户信息高级分页查询">员工信息高级分页查询</a><br>
* 查询第一页
* cname 和address的值 为null
* String flag="search";
* 执行
//点击搜索按钮执行
if("search".equals(flag)){
cname = request.getParameter("cname");
address = request.getParameter("address");
}
但此时cname=null address=null
* // 封装查询条件
SearchCompany searchCompany = new SearchCompany();
searchCompany.setAddress(address);//null
searchCompany.setCname(cname); //null
在dao层组织sql语句时候,没有查询条件
* 点击 搜索 按钮 执行javaScript的search方法
* <td><input type="button" value="搜索" οnclick="search();"></td>
//点击搜索按钮
function search(){
<!--
执行查询条件的标志
该值为search时,servlet获取的是cname 和address文本框的值
该值为page时, servlet获取的是old_cname 和olod_address文本框的值
-->
//<input type="hidden" id="searchFlag" name="searchFlag" value="search">
var searchFlag=document.getElementById("searchFlag");
//更改标志
searchFlag.value="search";
//表单提交
document.forms[0].submit();
}
*执行Servlet中
//点击搜索按钮执行
if("search".equals(flag)){
cname = request.getParameter("cname");
address = request.getParameter("address");
}
点击 <a href="javaScript:toPage(${pageBean.prePage},${pageBean.maxSize})">上页</a>
* 调用
//点击上页 下页 首页 尾页 超链接
function toPage(curPage,maxSize){
//获取读取cname和old_cname的标志
var searchFlag=document.getElementById("searchFlag");
//更改标志位page servlet读取的是old_xxxx的值
searchFlag.value="page";
//先获取form 表单中的action 在action后面加上?curPage="+curPage+"&maxSize="+maxSize;
//传递当前页和每页显示的最大记录数
document.forms[0].action=document.forms[0].action+"?curPage="+curPage+"&maxSize="+maxSize;
//提交表单
document.forms[0].submit();
}
* 此时在Servlet中执行的是
//点击上页 下页 首页 尾页 超链接
if("page".equals(flag)){
cname = request.getParameter("old_cname");
address = request.getParameter("old_address");
}