编写SSH选课系统记录——Bootstrap table学习

本文详述了在SSH选课系统中使用Bootstrap Table进行数据前后端交互的方法,包括解决Hibernate懒加载问题、利用ajax实现数据交互以及动态控制模态框的注意事项。在批量删除条目方面也进行了探讨。
摘要由CSDN通过智能技术生成

一、关于数据前后端交互

1、后端传值至bootstrap表格
Bootstrap table的表格数据要求格式为json,我们一般从数据库查询得到的对象都会放在list中,运用struts的插件struts2-json-plugin.jar将数据转化为json格式。

这个过程中,可能会遇到failed to lazily initialize a collection of role 懒加载的问题,就是在查询时没有加载关联表的对象,你读取这个关联对象的时候,hibernate的session已经关闭,所以无法获取对象。
可以在配置文件里关闭懒加载 lazy=false。

接着可能又会出现这样的问题:There is a cycle in the hierarchy!
其实问题主要还是处在属性关联表上。

使用Hibernate manytoone属性关联主表的时候,如果使用JSONArray把pojo对象转换成json对象时,很容易出现循环的异常。
一个解决方法就是在转换json对象时忽略引起循环的对象。
比如student类中有course属性,忽略course属性,就不会再出错。

 JsonConfig cfg = new JsonConfig();
		cfg.setJsonPropertyFilter(new PropertyFilter()
				  {
				       public boolean apply(Object source, String name, Object value) {
				       if(name.equals("tcs")) {
				           return true;
				       } else {
				           return false;
				       }
				      }
			      });
  JSONArray jsonArray = JSONArray.fromObject(list,cfg);  //加载配置文件

但是总感觉只是解决燃眉之急而已,不是真正的标准解决方案。

2、用ajax实现前后端数据交互
2.1前端传给后端对象

前端代码

                     $("#btn_submit").on("click",function(){
                        var teacher={
                        'teacher.tid':$('#tid').val(),
                        'teacher.tname':$('#tname').val(),
                        'teacher.tsex':$('#tsex').val(),
                        'teacher.tintroduction':$('#tintroduction').val(),
                        //默认密码为123456
                        'teacher.tpassword':"123456"
                       };
                         addNewTeacher(teacher);
                     });
//添加新教师信息
function addNewTeacher(teacher){
      console.log(teacher);
      alert(teacher.toString());
      $.ajax({
                url:'addTeacher',
                type:'post',
                data:teacher,
                dataType:"json",
                success:function(data){
                    //验证一下后端传来的数据
                    alert(data);
                  //一些操作
                }
            });
}

action代码(包括添加教师信息和获取教师列表):

public class TeacherAction extends ActionSupport {     
	 
	//此变量用于传递所有教师列表数据
	private JSONArray teaJsonArr;
		
	private TeacherService teacherService;

	//在Action中,从客户端传来的数据可以只生成set方法,发送到客户端的数据可以只生成get方法
	private Teacher teacher;

	//添加教师后返回前端的信息
	private String returnData;
		
	public String getReturnData() {
		return returnData;
	}
	
	public Teacher getTeacher() {
		return teacher;
	}

	public void setReturnData(String returnData) {
		this.returnData = returnData;
	}

	public void setTeacher(Teacher teacher) {
		this.teacher = teacher;
	}

	public JSONArray getTeaJsonArr() {
		return teaJsonArr;
	}

	public void setTeaJsonArr(JSONArray teaJsonArr) {
		this.teaJsonArr = teaJsonArr;
	}

	public TeacherService getTeacherService() {
		return teacherService;
	}

	public void setTeacherService(TeacherService teacherService) {
		this.teacherService = teacherService;
	}

	public String showAllTeacher(){
		  try{
				 List<Teacher>list=teacherService.findAllTeacher();
				 JsonConfig cfg = new JsonConfig();
				    cfg.setJsonPropertyFilter(new PropertyFilter()
				    {
				         public boolean apply(Object source, String name, Object value) {
				           if(name.equals("tcs")) {
				             return true;
				           } else {
				             return false;
				          }
				        }
				       });
				 		 
				  JSONArray jsonArray = JSONArray.fromObject(list,cfg);  //加载配置文件
				  teaJsonArr=jsonArray;
			
				  System.out.println(teaJsonArr);
			
		   		 return SUCCESS;
				
			}catch (Exception e) {
				System.out.println(e);
				return ERROR;
			}
	 }
	
	public String addNewTeacher(){
		
		boolean success=teacherService.addNewTeacher(teacher);
		System.out.println(teacher.getTid());
		System.out.println(teacher.getTname());
		System.out.println(success);
		if(success){
			//这是要返回到前端页面的数据
			returnData="添加成功";
			return SUCCESS;
			
		}else{
		return ERROR;
		}
		
	}
}

struts.xml配置信息:

	  <package name="teacher" namespace="/" extends="json-default">
         <action name="allTeacher" class="TeacherAction" method="showAllTeacher">
            <result name="success" type="json">
            <!-- 这里指定将被struts2序列化的属性,该属性在action中必须有对应的getter方法 -->
               <param name="root">TeaJsonArr</param>
            </result>
            <result name="error">/error.jsp</result>
        </action>
        
        <action name="addTeacher" class="TeacherAction" method="addNewTeacher">
            <result name="success" type="json">
            <!-- 这里指定将被struts2序列化的属性,该属性在action中必须有对应的getter方法 -->
               <param name="root">returnData</param>      
            </result>
            <result name="error">/error.jsp</result>
        </action>
              
    </package>

二、动态控制模态框

1、需要注意的一点是,当模态框隐去的时候取消绑定的事件,下一次再动态绑定。
如果没有这一步!就会出现重复相应点击事件的结果!!!
一开始我就出现了Illegal attempt to associate a collection with two open sessions的错误,还以为是session出错,结果是前端重复提交事务了!

        $('#editModal').on('hidden.bs.modal', function (event) {
        $("#btn_submit").unbind();
        })

三、bootstrap-table 批量删除条目

四、

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值