页面布局:
html静态页面中:
<script text="javascript" src="../js/js.js"></script>
/*
- *省略...
- */
<div class="StudentList_div">
<ul class="StudentList_ul">
</ul>
</div>
相应的javascript中:
getdata(value);
function getdata(value){
$.ajax({
url:'/CXMF/StudentList.svt', //查找学生信息的servlet,CXMF为项目名称
type:'post',
data:value,
contentType:"application/x-www-form-urlencoded; charset=utf-8",
success:function(data){
var obj = eval("("+data+")"); //获取后台返回的所有数据
if(obj.length!=0){
$('.StudentList_ul').empty(); //先清空前台的ul标签
$(".page_nav").css("visibility","visible"); //让分页标签隐藏
if(value.test==1){//初始化请求
//total_num为数据查询中查到数据总条数、value.page_num为当前传的value的每页显示条数
//两者进行相应的运算,得到total_page,为分页的总页数
total_page=Math.ceil(obj[0].total_num/value.page_num);
$("#totalpage").html(total_page);//分页总数
$("#nowpage").html(1);//当前页数
}
//列表显示内容 获取每个参数,先放到变量cnt中,最后将cnt变量appqnd到ul标签内
var cnt="";
for(var i=0;i<obj.length;i++){
cnt+=
"<li class='student' data-id='"+obj[i].student_id+"'><span class='stname'>姓名:"+obj[i].student_name+"</span><span class='stnum'>学号:"+obj[i].student_id+
"</span><span class='readbtn'>查看考试</span></li>";
}
$('.StudentList_ul').append(cnt);
}else{
error();
}
}
});
}
当需要点击左侧的导航树刷新时,设置导航树span的点击事件,在事件中将value的id(或是其他筛选的字段)赋值,并重新调用ajax的函数。则可实现点击后刷新。
StudentListServlet:
package com.sunsheen.cxmf.web;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.hibernate.transform.Transformers;
import com.sunsheen.jfids.gson.Gson;
import com.sunsheen.jfids.system.database.DBSession;
import com.sunsheen.jfids.system.servlet.Servlet;
import com.sunsheen.jfids.util.DataBaseUtil;
@Servlet(value="/StudentList.svt", anonymous=true)
public class StudentListServlet extends HttpServlet{
private static final long serialVersionUID=-187416565L;
@Override
protected void doPost(HttpServletRequest req,HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
PrintWriter out = resp.getWriter();
//创建平台封装的hibernate
String page_num = req.getParameter("page_num");
String locat_num = req.getParameter("locat_num");
String id = req.getParameter("id");
String userid=req.getSession().getAttribute("id").toString(); //获取用户ID
DBSession session = DataBaseUtil.getHibernateSession();//获取平台封装的HibernateSession。
Map<String, String> map = new HashMap<>();
map.put("page_num", page_num);
map.put("locat_num", locat_num);
map.put("id", id);
map.put("userid", userid);
try {
//方法一:从数据查询中获取值(基于核格平台)
List<?> rs = session.createDySQLQuery("SelectStudentList.selectStudentList",map).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
//方法二:直接写查询语句,查询信息
String sql="select lesson_id,lesson,student_id,student_name,concat('./images/', img_url) as src,text_answer from cxmf_answer where lesson_id=:lesson_id and student_id=:student_id";
SQLQuery query = session.createSQLQuery(sql);
new QueryParameterImpl ().initParameter(query, map);
List<?> rs = null;
rs = query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
String data = new Gson().toJson(rs);//通过Gson转换数据为json格式字符串
out.print(data);//返回数据到前台
} catch (Exception e) {
session.rollback();
} finally{
session.close();
out.close();
}
}
}
注意:查询在查出所有数据的同时还要查出数据的总条数,并添加limit进行分页的限制。
采用左连接的方式,查询出表中的所有数据,及数据总条数。
举例子如下:
SELECT
*
FROM
(
SELECT
a.id,
a.lesson_id,
a.lesson,
a.student_id,
a.student_name
FROM
cxmf_course a,
cxmf_teaching b
where a.lesson_id="$P.id"
and b.teacher_id="$P.userid"
group by student_id
) a
LEFT JOIN (
SELECT
COUNT(*) AS total_num
FROM
cxmf_course
) b ON 1 = 1
LIMIT #if($P.locat_num and $P.page_num !="")
$P.locat_num,
$P.page_num;
#else
0,
8 #end