好久没有写过代码了,手有些痒了,正好底下小弟们某些功能的实现着实影响工程进度,便自己动手给写了一段。
功能:js前台分页显示 + 后台数据响应(java servlet即可)
框架:jquery1.8.7
此文目的:给那些刚入行软件开发,喜欢这也看看,那也看看,这儿copy一下,那儿copy一下初级小菜鸟们做一个表帅;
1 为程序者需认真踏实坐下来;
2 程序需要有投入才有收获;
3 有收获才有鼓舞,才有动力一步一步往下走!
下面上代码,具体会有小注释
1、web页面的逻辑处理(js代码写到页面里时,有个好处,调试时不会受js文件缓存的影响)
复制代码 代码如下:
订单结算
采购单状态:
-search all!-
未结
部分
已结
2 后台页面响应的java代码(即一个标准的servlet)
复制代码 代码如下:
package com.ljb.ttt.servlet;
import java.io.ioexception;
import java.io.printwriter;
import javax.servlet.servletexception;
import javax.servlet.http.httpservlet;
import javax.servlet.http.httpservletrequest;
import javax.servlet.http.httpservletresponse;
import com.ljb.ttt.impl.basicdao;
public class allcheckaction extends httpservlet {
protected void doget(httpservletrequest req, httpservletresponse resp)
throws servletexception, ioexception {
dopost(req, resp);
}
protected void dopost(httpservletrequest req, httpservletresponse resp)
throws servletexception, ioexception {
try {
int executetype = -1;
string types = req.getparameter(executetype);
if(types == null)
return;
else
executetype = integer.valueof(types);
printwriter out = resp.getwriter();
basicdao bd = new basicdao();
switch(executetype){
case 5:
string orderstatus = req.getparameter(orderstatus);
integer page = integer.valueof(req.getparameter(page));
integer pagesize = integer.valueof(req.getparameter(pagerows));
string condition = ;
string content = ;
integer wholepages = 0;
if(orderstatus != null && (!orderstatus.equals())){
condition = string.format( and orderstatus='%s',orderstatus);
}
int wholesize = bd.count(`order` t1,worker t2, pagesize, and t1.wid=t2.wid +
condition+ and t1.orid in (select orid from orderdetail));
if(0 == wholesize%pagesize)
wholepages = wholesize/pagesize;
else
wholepages = wholesize/pagesize + 1;
//对于不正确页的判断处理
if (page >= wholepages)
page = wholepages;
if(pagepage = 1;
condition += string.format( limit %d,%d,pagesize*(page-1),pagesize);
content = string.format({\contentbody\:[{\page\:\%d\,\wholepage\:\%d\,\searchtext\:\+condition+\}]},
page,wholepages);
out.print(content);
system.out.println(content);
break;
//for orderclose.jsp in get order data
case 6:
string sconditon = (string)req.getparameter(scondition);
if(sconditon != null){
if(sconditon.equals())
out.print(getjsondata(6, , orders,bd));
else
out.print(getjsondata(6, sconditon, orders,bd));
}
break;
default:
break;
}
out.flush();
out.close();
} catch (ioexception e) {
e.printstacktrace();
}
}
//generate data from a search sql
private string getjsondata(int type,string searchcontent,string jsonname,basicdao bd){
string sql = ;
switch(type){
//获取
case 6:
sql = string.format(select t1.orid,t2.wname,t1.date,t1.remark,t1.orderstatus from `order` t1,worker t2 where t1.wid=t2.wid +
and t1.orid in (select orid from orderdetail)%s,searchcontent);
break;
default:
break;
}
string temp = bd.getjsonstr(sql,jsonname);
// system.out.println(temp);
return temp;
}
}
3 让servlet在web.xml中的配置参考
复制代码 代码如下:
checksaveservlet
com.ljb.ttt.servlet.checksaveservlet
checksaveservlet
/checksaveservlet
4 付上本次后台调用的一个关键方法,将查询转化为json数据格式的方法
复制代码 代码如下:
//return datatype {tittle:[{colname:val,..},{},{}]}
public string getjsonstr(string sql,string jsonname){
string jsonstr = ;
string tjson = ;
connection con = null;
resultset rs = null;
preparedstatement pst = null;
con = sh.getconnection();
hashmap hm = sh.select(con, pst, rs, sql, null);
rs = (resultset)hm.get(resultset);
int colnum;
try {
colnum = rs.getmetadata().getcolumncount();
string colname[] = new string[colnum];
for(int i= 0;icolname[i] = rs.getmetadata().getcolumnname(i+1);
while(rs.next()){
jsonstr += {;
string temp = ;
for(int i= 0;itemp += \;
temp += colname[i];
temp += \:\;
temp += rs.getstring(i+1);
temp += \,;
}
jsonstr += temp.substring(0, temp.length()-1);
jsonstr += },;
}
tjson += {\+jsonname + \:[;
if(jsonstr!=)
tjson += jsonstr.substring(0, jsonstr.length()-1);
tjson += ]};
} catch (sqlexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
pst = (preparedstatement)hm.get(preparedstatement);
sh.closeall(rs, pst, con);
return tjson;
}
注:
1 里面没有见到过的方法调用,不用担心,搞过java连接数据库的都没有问题;
2 这个里面有一个比较不足的地方,将页数信息与页面数据分两次ajax请求得到,这个是非常影响性能的,如果能做到将一次ajax请求,一次解析获取全部需要数据,那就比较出彩了(嵌套json就是不错的选择)。
3 由于并非专职搞web开发,发现这个css样式搭配起来还是非常费劲的。
最后贴个效果图上来:
