MVC模式下的数据展示:EasyUI的datagrid

我的数据库设计是一张老师表teacher,一张学生表student,一个教师对应多个学生,在学生一方建立外键;

还有一点想清楚,需要展示的数据是根据什么来的,是成功登陆的用户的id?还是直接展示所有的学生?

student表

教师表:

我是习惯性的从后写到前,这里展示的是登录成功的老师下的学生信息

1 建立项目,建立好对应的包以及工具包

2建立好与数据库对应的实体类

package com.zr.model;
public class Student {
        private int sid;
        private  String  sname;
        private  String sage;
        //自行get  set
        public Student() {
            super();
        }
        public Student(int sid, String sname, String sage) {
            super();
            this.sid = sid;
            this.sname = sname;
            this.sage = sage;
        }

}
package com.zr.model;

public class Teacher {
            private  int  tid;
            private  String tname;
            private  String tpsw;
            //自行get set
            public Teacher(String tname, String tpsw) {
                super();
                this.tname = tname;
                this.tpsw = tpsw;
            }
            public Teacher(int tid, String tname, String tpsw) {
                super();
                this.tid = tid;
                this.tname = tname;
                this.tpsw = tpsw;
            }
            public Teacher() {
                super();
            }
}

3 StudentDao.java,因为使用的是easyUI,所以传入参数多了起始页码start和页面容量pageSize,这两个参数都是从页面的datagrid获取的,是datagrid自带的参数,方便后面的分页

package com.zr.dao;
import java.util.List;
import com.zr.model.Student;
public interface StudentDao {
    /**
     *
     * @param tid
     * @return 学生对象
     * 根据老师id返回学生对象
     */
    public  List<Student> getStudentBytid(int tid,int start,int pageSize);

    /**
     * 根据学生id删除学生
     * @param s
     * @return
     */
    public  boolean  deleteStudentsBysid(String  s[]);
    /**
     * 根据学生id更新学生信息
     * @param student
     * @return
     */
    public  boolean  updateStudentBysid(int sid, String sname,String sage);
    /**
     * 根据当前老师id添加学生
     */
    public  boolean  addStudent(String sname,String sage,int tid);
/**
     * @param tid传入老师ID
     * @return 返回学生总数
     */
    public  int  getScountStudentByTid(int tid);
}

4 StudentDaoImpl.java实现studentDao.java

package com.zr.daoIm;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import JDBCUtil.JDBCUtil;
import com.zr.dao.StudentDao;
import com.zr.model.Student;
public class StudentDaoImpl  implements StudentDao{
    /**
     * 根据传入的老师id获取学生
     */
    public List<Student> getStudentBytid(int tid,int start,int pageSize) {
        //定义学生对象集合students接收数据库返回
        List<Student>  students =  new ArrayList<Student>();
        //获取数据库连接
        Connection con=JDBCUtil.getConnection();
        //编写SQL语句
        StringBuffer sql=new StringBuffer("select sid,sname,sage from student where tid=? limit ?,?");
        try {
            PreparedStatement pst=con.prepareStatement(sql.toString());
            pst.setInt(1, tid);
            pst.setInt(2, start);
            pst.setInt(3, pageSize);
            //返回一个结果集
            ResultSet rs=pst.executeQuery();
            while (rs.next()) {
                //学生对象接收结果集的结果
                Student s=new Student();
                s.setSid(rs.getInt("sid"));
                s.setSname(rs.getString("sname"));
                s.setSage(rs.getString("sage"));
                students.add(s);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return students;
    }
@Override
    public int getScountStudentByTid(int tid) {
        int scounts=0;

        StringBuffer sql=new StringBuffer("select count(sid) scount from student where tid=?");
        Connection con=JDBCUtil.getConnection();
        try {
            PreparedStatement pst=con.prepareStatement(sql.toString());
            pst.setInt(1, tid);
            ResultSet rs=pst.executeQuery();
            while(rs.next()){
                scounts=rs.getInt("scount");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return scounts;
    }
}

5 service层:searchService.java以及实现层searchServiceImpl.java

package com.zr.service;
import java.util.List;
import com.zr.model.Student;
public interface searchService {
    /**
     * 查询服务
     * @param tid 通过老师ID
     * @return 学生对象所有信息
     */
public List<Student> getStudents(int  tid,int start,int pageSize);
/**
 *
 * @param tid传入老师ID
 * @return 返回学生总数
 */
public  int  getScountStudentByTid(int tid);
}
package com.zr.serviceIm;

import java.util.ArrayList;
import java.util.List;
import com.zr.dao.StudentDao;
import com.zr.dao.TeacherDao;
import com.zr.daoIm.StudentDaoImpl;
import com.zr.daoIm.TeacherDaoImpl;
import com.zr.model.Student;
import com.zr.service.searchService;
public class searchServiceImpl implements searchService{

    public List<Student> getStudents(int tid,int start,int pageSize) {

        List<Student> students=new ArrayList<Student>();
        StudentDao studentDaoImpl =new StudentDaoImpl();
        students=    studentDaoImpl.getStudentBytid(tid,start,pageSize);
        return students;
    }
@Override
    public int getScountStudentByTid(int tid) {
        TeacherDao teacherDao =new TeacherDaoImpl();

        return teacherDao.getScountStudentByTid(tid);
    }
}

6 控制层com.zr.controller.SearchController.java

注:控制层涉及一个参数scount是当前老师下的学生总数

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.zr.model.Student;
import com.zr.model.Teacher;
import com.zr.service.searchService;
import com.zr.serviceIm.searchServiceImpl;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class SearchController extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        //设置字符编码
        req.setCharacterEncoding("utf8");
        resp.setCharacterEncoding("utf8");
        //实例化服务层,方便参数调用
        searchService s=new searchServiceImpl();
        //获取datagrid的分页参数page当前页码和页面容量rows,保持参数名一直
        int page=Integer.parseInt(req.getParameter("page"));
        int rows=Integer.parseInt(req.getParameter("rows"));
        //用学生集合接收返回的数据
        List<Student> students=new  ArrayList<Student>();
        //起始页码start=当前页码减1乘以页面容量
        int start= (page-1)*rows;
        //获取存放在session中的teacher对象,在登录的时候返回老师对象并存入session对象
        Teacher teacher=(Teacher) req.getSession().getAttribute("teacher");
        //获取老师ID
        int  tid=   teacher.getTid();
        int scount =s.getScountStudentByTid(tid);
        //根据老师id获取学生对象
        students= s.getStudents(tid, start, rows);
        //easy前台接收的是json对象JSONObject
        JSONObject jso=new JSONObject();
        //将数据返回给datagrid
        jso.put("total",scount);
        //rows后边的参数代表需要在前台显示的数据,格式为json的集合,再放入json的对象中
        jso.put("rows", JSONArray.fromObject(students));
        jso.put("page", start);
        resp.getWriter().write(jso.toString());
       
    }
    }

7 前台页面编写main.jsp

数据展示并不需要进行过多的配置,只需要配置好对应的列名以及请求参数,数据格式,本页面前台的配置包含整个数据的增加,删除,修改

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="${pageContext.request.contextPath}/themes/bootstrap/easyui.css" rel="stylesheet">
<link href="${pageContext.request.contextPath}/themes/icon.css" rel="stylesheet">
<script src="${pageContext.request.contextPath}/js/jquery.min.js"></script>
<script src="${pageContext.request.contextPath}/js/jquery.easyui.min.js"></script>
<script src="${pageContext.request.contextPath}/js/easyui-lang-zh_CN.js"></script>
<title>login</title>
<script type="text/javascript">
$(function(){
    //将增加框和修改框进行隐藏    $(‘#updateStu‘).dialog(‘close‘);
    $(‘#addStu‘).dialog(‘close‘);
    //配置学生信息表格
    $(‘#students‘).datagrid({
        url:‘${pageContext.request.contextPath}/selectStus‘,
        columns:[[
            {field:‘checked‘,checkbox:true,width:100},
            {field:‘sid‘,title:‘ID‘,width:100},
            {field:‘sname‘,title:‘姓名‘,width:100},
            {field:‘sage‘,title:‘年龄‘,width:100,align:‘right‘}
        ]],
        pagination : true, //显示分页
        pagePosition:‘bottom‘,//分页显示在底部
        toolbar: [{ iconCls: ‘icon-edit‘,
            text:‘添加‘,
            handler: function(){
                $(‘#addStu‘).dialog(‘open‘);//点击添加按钮显示添加框

                }
        },‘-‘,{
            iconCls: ‘icon-delete‘,
            text:‘删除‘,
            handler: function(){

                var sids=‘‘;
                var ss=$("#students").datagrid(‘getSelections‘);//接收选中的对象结果集
                                 if(ss.length==0){//对选中的大小判断
                    $.messager.alert(‘这是一个提示信息!‘,‘请至少选择一条数据进行删除!‘);
                }else{                 //对选中数据的id以逗号进行拼接,结果会多一个逗号,后台再进行处理:截取字符串
                $.messager.confirm(‘提示‘, ‘确认删除?‘, function(r) {
                    $.each(ss,function(n,v){
                         sids=sids+v.sid+‘,‘
                });
                    $.ajax({
                        type:‘post‘,
                        url:‘${pageContext.request.contextPath}/deleteStus‘,
                        data:{‘sids‘:sids},
                        dataType:"text",
                        success:function(data){
                            if(data=="1"){
                                $.messager.alert(‘提示‘,‘删除成功!‘);
                               $("#students").datagrid(‘reload‘); 

                           }else{
                               $.messager.confirm(‘删除失败!‘,"删除数据失败!");
                           }
                        }
                    })
                });
            }
                }
        },‘-‘,{
            iconCls: ‘icon-update‘,
            text:‘修改‘,
            handler: function(){
                var stus = $("#students").datagrid(‘getSelections‘);

                if (stus.length != 1) {
                    $.messager.confirm(‘提示‘, ‘请选择一条数据‘, function(r){

                            $("#students").datagrid(‘unselectAll‘);

                    })
                } else {
                    //显示修改框
                    $(‘#updateStu‘).dialog(‘open‘);
                  //将选中的数据加载到修改面板上
                   var stu = stus[0];
                    $(‘#upStu‘).form(‘load‘,stu);

                }

            }
        }]

    }); 

    /* 配置添加框 */
    $("#addStuf").form({
        type:‘post‘,
        url:‘${pageContext.request.contextPath}/AddStu‘,
        dataType:"text",
        success : function(data) {
            if(data=="1"){

                $(‘#addStu‘).dialog(‘close‘);
                $(‘#addStuf‘).form(‘clear‘);
                $.messager.alert(‘我的消息‘,‘添加商品信息成功‘,‘info‘,function(){
                    $(‘#students‘).datagrid(‘reload‘);
                });
            }else{
                $.messager.alert(‘我的消息‘,‘添加商品信息失败,重新添加‘,‘info‘,function(){
                    $("#addStuf").form(‘clear‘);
                });
            }
        }
    });

    /* 配置修改框 */
    $("#upStu").form({
        type:‘post‘,
        url:‘${pageContext.request.contextPath}/updataStu‘,
        dataType:"text",
        success : function(data) {

            if(data=="1"){

               $("#students").datagrid(‘reload‘);
               $.messager.alert(‘提示!‘,‘修改成功‘);
               $(‘#updateStu‘).dialog(‘close‘);

           }else{
               $.messager.alert(‘我的消息‘,‘修改学生信息失败!‘,‘修改失败!‘,function(){
                   $(‘#upStu‘).form(‘clear‘);
                });  

           }
        }
    });

    <!--配置搜索框,该功能尚未实现-->
    $(‘#searchStu‘).searchbox({
        searcher : function(value, name) {
            var sname = value;
            $(‘#goods‘).datagrid(‘reload‘, {
                searchname : sname,
            });
        }
    });

});

//配置修改学生信息表单提交
function updataForm() {
    $("#upStu").form(‘submit‘);
}
function addForm() {
    $("#addStuf").form(‘submit‘);

}
</script>
</head>
<body>
<input id="searchStu" class="easyui-searchbox"
        data-options="prompt:‘输入学生查询信息‘,width:150">

    <table id="students"></table>

    <!-- 配置修改框面板 -->
    <div id="updateStu" class="easyui-dialog" title="更新学生信息信息"
        style="width: 400px; height: 450px;" data-options="modal:true">

        <form id="upStu" method="post">
        //id默认隐藏,这样就不允许修改
        <div style="margin-bottom: 20px;">
                <span>id</span>
                <input class="easyui-textbox" name="sid" id="sid" style="width: 200px;display: none;">
            </div>
            <div style="margin-bottom: 20px">
                <span>学生姓名</span>
                <input class="easyui-textbox" name="sname" style="width: 200px">
            </div>
            <div style="margin-bottom: 20px">
                <span>学生年龄</span>
                <input class="easyui-textbox" name="sage" style="width: 200px">
            </div>
        </form>
        <div style="text-align: center; padding: 5px 0;">
            <a href="javascript:void(0)" class="easyui-linkbutton"
                onclick="updataForm()" style="width: 80px" id="tt">提交</a>
        </div>
    </div>

        <!-- 配置增加框 -->
    <div id="addStu" class="easyui-dialog" title="添加学生信息信息"
        style="width: 400px; height: 450px;" data-options="modal:true">

        <form id="addStuf" method="post">
            <!-- <div style="margin-bottom: 20px;display: none;">
                <span>学生ID</span>
                <input class="easyui-textbox" name="sid" style="width: 200px;">
            </div> -->
            <div style="margin-bottom: 20px">
                <span>学生姓名</span>
                <input class="easyui-textbox" name="sname" style="width: 200px">
            </div>

            <div style="margin-bottom: 20px">
                <span>&nbsp;&nbsp;&nbsp;&nbsp;学生年龄</span>
                <input class="easyui-textbox" name="sage">
            </div>
        </form>

        <div style="text-align: center; padding: 5px 0;">
            <a href="javascript:void(0)" class="easyui-linkbutton"
                onclick="addForm()" style="width: 80px" id="tt">提交</a>
        </div>
    </div>
</body>
</html>

最后配置请求文件

  <!-- 查询当前下面的学生信息 -->
          <servlet>
              <servlet-name>selectStus</servlet-name>
              <servlet-class>com.zr.controller.SearchController</servlet-class>
          </servlet>
          <servlet-mapping>
                  <servlet-name>selectStus</servlet-name>
                  <url-pattern>/selectStus</url-pattern>
          </servlet-mapping>

最后数据展示:

总结:利用easyUI进行数据展示的时候,自带的参数page,rows是需要获取的,并以此来实现分页功能;

后台返回到前台的时候,需要返回三个参数:

page: int page=Integer.parseInt(req.getParameter("page"));   int start= (page-1)*rows;   jso.put("page", start);

rows是需要展示的数据json集合 jso.put("rows", JSONArray.fromObject(students));

第三个需要返回的是数据总数total:jso.put("total",scount);

时间: 2024-10-04 18:33:09

MVC模式下的数据展示:EasyUI的datagrid的相关文章

.net MVC模式下easyui datagrid控件分页

此参照一位仁兄代码,稍作修改 视图代码: <div id="tab" class="easyui-tabs" data-options="tools:'#tab-tools'" style="width:800px;height:400px"> <div title="****" style="padding:0px;"> <div class="

MVC模式下基于SSH三大框架的java web项目excel表格的导出(不依赖另外的jar包)

最近工作中碰到了需要将web页面的表格内容导出到excel表格并下载到本地的需求.以下是在利用网上资源.与同事探讨下,完成的代码. 首先我们需要有定义好的实体类.以下是截取了项目中用到的部分代码. 1 public class QyggDocuments implements java.io.Serializable { 2 3 private static final long serialVersionUID = -2543382529255041149L; 4 5 private Stri

【案例分享】使用ActiveReports报表工具,在.NET MVC模式下动态创建报表

提起报表,大家会觉得即熟悉又陌生,好像常常在工作中使用,又似乎无法准确描述报表.今天我们来一起了解一下什么是报表,报表的结构.构成元素,以及为什么需要报表. 什么是报表 简单的说:报表就是通过表格.图表等形式来动态显示数据,并为使用者提供浏览.打印.导出和分析的功能,可以用公式表示为: 报表 = 多样的布局 + 动态的数据 + 丰富的输出 报表通常包含以下组成部分: 报表首页:在报表的开始处,用来显示报表的标题.图形或说明性文字,每份报表只有一个报表首页. 页眉:用来显示报表中的字段名或对记录的

mvc模式下的数据库连接操作

mvc模式下数据库操作分为三部分,举一个容易理解的例子,mvc就是一种设计模式, 分为模型(Model),控制器(Controller ),视图(View),各自分工明确,连接数据库操作也遵从于这种模式 一部分是用来设置数据库的的用户名和密码的文件,可同时设置多个数据库的信息,实现可扩展性, 一部分是连接数据库,实例化类的操作, 一部分是用来调用实例化后的对象中的方法,写sql语句部分,分为了三个文件 在config.php文件中,设置常量define关于数据库信息,此处可以设置为二维数组,实现

Angularjs在360兼容模式下取数据缓存问题解决办法

测试提了一个bug,在360浏览器兼容模式下,删除页面数据需要手动刷新浏览器才能看到最新的数据.首先要复现当时的问题,很容易就复现了,但是发现在360浏览器兼容模式下无法打开开发者工具.好在经过反复重装之后,终于打开了开发者工具,经过跟踪发现,第一次删除数据时可以正常刷新,第二次或以后的删除将无法刷新,跟踪代码,发现通过异步请求的数据正常的返回并且绑定了.点击搜索按钮,也无法实现刷新,但是点击分页,发现可以翻页.初步推断是浏览器缓存了异步请求数据,跟踪比较返回的数据发现,推断是正确的.于是从网上

Android:MVC模式(下)

在上一篇文章中,我们将 View 类单独出来并完成了设计和编写.这次我们将完成 Model 类,并通过 Controller 将两者连接起来,完成这个计算器程序. 模型(Model)就是程序中封装了数据,并定义了操作和处理这些数据的逻辑的对象.在计算器的例子中,就是处理输入的操作数和运算符,并计算返回结果.Let's Go (注意:示例中直接使用 double 类型来处理数据,但严格来说很多语言的浮点数计算都是不精确的) 一,设计模型的接口 在程序构建之初,我们首先考虑的应该是各模块间的封装和扩

前端之Android入门(5) – MVC模式(下)

我们将 View 类单独出来并完成了设计和编写.这次我们将完成 Model 类,并通过 Controller 将两者连接起来,完成这个计算器程序. 模型(Model)就是程序中封装了数据,并定义了操作和处理这些数据的逻辑的对象.在计算器的例子中,就是处理输入的操作数和运算符,并计算返回结果.Let’s Go(注意:示例中直接使用 double 类型来处理数据,但严格来说很多语言的浮点数计算都是不精确的) 一,设计模型的接口 在程序构建之初,我们首先考虑的应该是各模块间的封装和扩展,设计好模块的接

利用 BBED 恢复非归档模式下 OFFLINE 数据文件

今天来模拟一个非归档模式下恢复OFFLINE数据文件的场景,主要有2种情况: 一种是在线日志没有被覆盖,另一种是在线日志被覆盖. 第一种情况比较简单,数据库自身就能处理,而第二种情况稍显复杂,但也并不难,下面开始整个实验过程: 一.在线日志没有被覆盖的场景 --切换数据库到非归档模式 SQL> archive log list Database log mode       Archive Mode Automatic archival       Enabled Archive destina

MVC模式下如何对多选框数据进行增删改查

一.业务情景:      做的是一个项目管理的增删改查模块,一个项目里面有项目成员属性,而且一个项目可以有多个成员,一个成员可以参加多个项目,多对多关系,数据库表里自然要建立一个关系表. 视图 二.视图显示: 因为新增项目和修改项目的时候用的是同一个视图,所以项目成员多选框那里不仅要显示所有用户,而且要把在项目成立里的数据要选上显示,这里我先把所有用户从用户表里查出来,然后显示在页面上,然后再判断每个用户是否在用户成员表里面,在的话就给勾选上. 1 <tr> 2 <td class=&q