关闭

EasyUi Hibernate 增加编辑book对象,里面又有book类型对象;添加编辑时在combobox动态加载book的类型

标签: field子属性EasyUIformmatercombobox
931人阅读 评论(0) 收藏 举报
分类:

最近弄book的增改花了不少时间,主要是在bookType上花的时间较多。

Book

@Entity
@Table(name="T_Book")
@DynamicInsert(true)
@DynamicUpdate(true)
public class Book implements java.io.Serializable  {
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="BookId")
	private int BookId;
	//虚拟属性,每次查询时,还要查询有多少本书,可借多少本,然后赋值,这样book就能添加这两个参数了
	@Transient
	private int totalNum;//馆藏数
	@Transient
	private int canBorrowNum;//可借数
	/**
	 * 用于业务逻辑的字段,注解@Transient代表不需要持久化到数据库中
	 */

	
	@ManyToOne
    <span style="white-space:pre">	</span>@JoinColumn(name="BookTypeId")    //重点!!!!!!!!!!!!!
	private BookType BookType;
	
	//抓取策略为EAGER,要不然bookService统计有多少本书时错误。
	@OneToMany(mappedBy="Book",cascade=(CascadeType.ALL), fetch=FetchType.EAGER)
	 private Set<BookSN> BookSNs;
	
	@Column(name="BookName")
	private String BookName;

    //省略部分属性和set,get函数
}
@Entity
@Table(name="T_BookType")
@DynamicInsert(true)
@DynamicUpdate(true)
public class BookType implements java.io.Serializable  {
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="BookTypeId")
	private int BookTypeId;
	
	@Column(name="BookTypeName")
	private String BookTypeName;
	@Column(name="BookTypeCode")
	private String BookTypeCode;
	 @OneToMany(mappedBy="BookType")
	  private Set<Book> Books;

//省略get和set函数
}
jsp(用html创建而不是jquery):

<%@ 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>
	<%@ include file="/common/base.jsp"%> <%--前面加了/就是代表绝对路径,即包含了localhost+端口号+项目名 --%>
	<script type="text/javascript">
		var url;
		function newBook(){
			$('#dlg').dialog('open').dialog('setTitle','添加书籍');
			$('#fm').form('clear');
			document.getElementById("fieldBookID").style.visibility="hidden"; //这里书籍id是自增长,所以不用显示id字段
			url = 'book/addBook';
		}
		function editBook(){
			var row = $('#dg').datagrid('getSelected');
			// alert(row.userId);
			if (row){
				$('#dlg').dialog('open').dialog('setTitle','编辑书籍');
				$('#fm').form('load',row);
				//解决编辑是不能显示书类型问题 这里要注意的是设置combox的值是bookTypeId而不是bookTypeName,因为传到后台是要bookTypeId的而//不是bookTypeName!!!!!!!!!!!!!!!	
				if(row.bookType.bookTypeName!=null){
					$('#formBookType').combobox('setValue',row.bookType.bookTypeId);
					}
				url ='book/updateBook';
			}
		}
		function saveBook(){
			$.post(url, sy.serializeObject($('#fm')), function(result) {
				if (result.success) {
						$.messager.show({
						title:'Info',
						msg:result.msg,
						showType:'fade',
						style:{
							right:'',
							bottom:''
							}
						});
						$('#dlg').dialog('close');		// close the dialog
						$('#dg').datagrid('reload');	// reload the user data
				} else {
					$.messager.show({
						title: 'Error',
						msg: result.msg
					});
				}
			}, 'json');
		}
		function doSearch(){
			$('#dg').datagrid('load',{
			queryBookName: $('#searchBox').val()
		});
}
	function clearSearch(){
		$('#searchBox').val('');
		$('#dg').datagrid('load',{});
	}
	//这里因为不能再field里面直接用bookType.bookTypeName,所以要用formatter!!!!!!!
	function formatBookType(val,row,index){
		//alert(row.bookType);
		if(row.bookType==null){
			return "";
		}else
			return row.bookType.bookTypeName;
	} 
	</script>
</head>
<body class="easyui-layout"  data-options="fit:true,border:false">
	<table id="dg" class="easyui-datagrid" data-options="fit:true,border:false"
			url="book/listBookForUser"
			toolbar="#toolbar" pagination="true"
			rownumbers="true" fitColumns="true" singleSelect="true">
		<thead>
			<tr>
				<th field="bookId" value= width="50">书ID</th>
				<th field="bookName" width="50">书名</th>
				<th field="bookType.bookTypeName" width="50" formatter="formatBookType">书类型</th>
				<th field="author" width="50">作者</th>
				<th field="callNumber" width="50">索书号</th>
				<th field="iSBN" width="50">ISBN</th>
				<th field="publisher" width="50">出版社</th>
				<th field="publishYear" width="50">出版年份</th>
				<th field="series" width="50">系列</th>
				<th field="language" width="50">语言</th>
				<th field="price" width="50">价格</th>
				<th field="page" width="50">页数</th>
			</tr>
		</thead>
	</table>
	<div id="toolbar">
		<br>
		<a href="javascript:void(0);" class="easyui-linkbutton" iconCls="icon-add" plain="true" onclick="newBook()">New Book</a>
		<a href="javascript:void(0);" class="easyui-linkbutton" iconCls="icon-edit" plain="true" onclick="editBook()">Edit Book</a>
		<div>
			<span>BookName:</span>
			<input id="searchBox" style="line-height:26px;border:1px solid #ccc">
			<a href="javascript:void(0);" class="easyui-linkbutton" iconCls="icon-search" plain="true" onclick="doSearch()">Search</a>
			<td><a href="javascript:void(0);" class="easyui-linkbutton" iconCls="ext-icon-zoom_out" plain="true" onclick="clearSearch()">清空查询</a></td>
		</div>
	</div>
	
	<div id="dlg" class="easyui-dialog" style="width:300px;height:350px;padding:10px 20px"
			closed="true" buttons="#dlg-buttons">
		<form id="fm" method="post" novalidate>
		<table cellpadding="5"> 
		<div class="fitem" id="fieldBookID">
				<label>书ID:</label>
				<input name="bookId" readonly="readonly">
			</div> 
			<div class="fitem">
				<label>书名:</label>
				<input name="bookName" class="easyui-validatebox" required="true" >
			</div>
			<label>书类型:</label> <!--这里极其注意每一个字段。select name为bookTypeId ->
				<select name="bookType.bookTypeId" id="formBookType" class="easyui-combobox" data-options="required:true,editable:false,valueField:'bookTypeId',textField:'bookTypeName',url:'bookType/getBookType',panelHeight:'auto'" style="width: 155px;"></select>
			
			<div class="fitem">
				<label>作者:</label>
				<input name="author">
			</div>
	       //省略部分属性!!!!!!!!!!!!!!!!
		</table>
		</form>
		
	</div>
	<div id="dlg-buttons">
		<a href="javascript:void(0);" class="easyui-linkbutton" iconCls="icon-ok" onclick="saveBook()">Save</a>
		<a href="javascript:void(0);" class="easyui-linkbutton" iconCls="icon-cancel" onclick="javascript:$('#dlg').dialog('close')">Cancel</a>
	</div>
</body>
</html>

jsp要注意的地方很多。。。其中saveBook函数那里,提交的表单是序列化的:

	$.post(url, sy.serializeObject($('#fm')), function(result) {}
其中这个序列化函数是扩展的(用的是孙宇的):

/**
 * 将form表单元素的值序列化成对象
 * 
 * @example sy.serializeObject($('#formId'))
 * 
 * @author 孙宇
 * 
 * @requires jQuery
 * 
 * @returns object
 */
sy.serializeObject = function(form) {
	var o = {};
	$.each(form.serializeArray(), function(index) {
		if (this['value'] != undefined && this['value'].length > 0) {// 如果表单项的值非空,才进行序列化操作
			if (o[this['name']]) {
				o[this['name']] = o[this['name']] + "," + this['value'];
			} else {
				o[this['name']] = this['value'];
			}
		}
	});
	return o;
};
这样后台直接用 Book book就能自动的传参,而不用手动的接受book的属性:
  @RequestMapping("/addBook")
		 public String addBook(Book book,HttpServletRequest request,
					HttpServletResponse response) throws Exception{.............<span style="font-family: Arial, Helvetica, sans-serif;">}</span>



BookController:

@Controller
@RequestMapping("/book")
public class BookController extends BaseController {
	@Autowired
	private IBookService bookService;
	@RequestMapping("/borrow")
		/**
		 * 用于管理员查询和添加书籍
		 * @param request
		 * @param response
		 * @return  书籍基本信息列表
		 * @throws Exception
		 */
	  @RequestMapping("listBookForUser")
	   public String listBookForUser(HttpServletRequest request,
				HttpServletResponse response) throws Exception {
		page=ServletRequestUtils.getIntParameter(request, "page", 1);//默认值为1
		rows=ServletRequestUtils.getIntParameter(request, "rows", 0);
		String queryBookName=request.getParameter("queryBookName");//获取要查询的用户账号
	//	System.out.println(queryBookName);
		Grid grid = new Grid();
		String hql=null;
		long totalNum;
		List<Book>books;
		if(queryBookName!=null)
		{
			hql="from Book as book where book.BookName like  '%"+queryBookName+"%'";
		}else{
			hql="from Book";
		}
			books=(List<Book>)bookService.find(hql, page, rows);
			totalNum=bookService.count("select count(*)"+hql);
			grid.setTotal(totalNum);
			grid.setRows(books);
			writeJson(grid,response);
			return null;
	    }
	   @RequestMapping("/goAddBook")
	   public ModelAndView goAddBook(){
		  return new ModelAndView("book/addBook");
	    }
		/**
		 * 管理员添加书籍
		 * @param book
		 * @param request
		 * @param response
		 * @return 
		 * @throws Exception
		 */
	   @RequestMapping("/addBook")
		 public String addBook(Book book,HttpServletRequest request,
					HttpServletResponse response) throws Exception{
			Json json = new Json();//用于向前端发送消息
			//这里怎么判断一本书是否存在? ISBN不同版次可能一样么?
			//if(bookService.getById(book.getBookId())!=null){
		//		json.setMsg("添加书籍失败,用户已存在!");
			//}else{
			System.out.println("34657");
				bookService.save(book);
				json.setMsg("添加书籍成功!");
				json.setSuccess(true);
		//	}
			writeJson(json,response);
			return null;
			}
	   @RequestMapping("/updateBook")
		 public String updateBook(Book book,HttpServletResponse response) throws Exception{
			Json json = new Json();//用于向前端发送消息
			try{
					bookService.update(book);
					json.setMsg("更新成功!");
					json.setSuccess(true);
			}catch(Exception e){
				json.setMsg("更新失败!"+e.getMessage());
			
			}
			writeJson(json,response);
			return null;
		}

		
}
















0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

EasyUI--datagrid中编辑器(editor)的类型为combobox的值得绑定

1.绑定固定的值 $(function () { /**管道级别*/ var pipingLevel = [{"value":"1","text":"A级"},{...
  • muyeju
  • muyeju
  • 2015-08-26 13:39
  • 12025

Java类和对象 详解(二)

上一篇Java类和对象 详解(一)讲解了类和对象的基本概念,定义和使用,以及对象引用传递的初步分析,下面接着来讲其他内容。一、面向对象的封装性封装(encapsulation)又叫隐藏实现(Hidin...
  • wei_zhi
  • wei_zhi
  • 2016-10-07 17:52
  • 2276

easyui-combobox 动态添加选项

前言        小编今天没事看看笔记,突然看到了一个项目中很常用的知识点——动态给easyui-combobox添加option,现在分享出来给大家! 实例         本项目使用的是e...
  • u013031565
  • u013031565
  • 2016-08-21 17:29
  • 5836

UVa 11212 Editing a Book (编辑书稿)迭代加深

初看这道题,方法肯定用搜索。。不过想想,搜索的宽度和深度又是个问题。所以就用迭代加深 什么是迭代加深,从加深来看,就是一开始只搜第一层,深度超过1时强行退出,第二次只搜2层,就这样一直往下,直到找到最...
  • Where_tonight
  • Where_tonight
  • 2016-06-29 19:39
  • 254

《C++ Primer 4 Answer Book》 整理[2]——第2章 变量和基本类型

<!-- @font-face {font-family:SimSun} @font-face {font-family:SimSun} p.MsoNormal, li.MsoNorma...
  • peace_power
  • peace_power
  • 2011-12-10 11:54
  • 270

The Book of QT4 翻译:1.2 布局,对象层级和内存管理

The Book of QT4 翻译:1.2 布局,对象层级和内存管理 作者:mcxiaoke  来源:博客园  发布时间:2010-05-12 10:57  阅读:651 次  原文链接 ...
  • hqyhqyhq
  • hqyhqyhq
  • 2012-06-27 14:37
  • 745

Book 的基础面向对象。

好长啊。第一次感觉这么长,不过希望继续走下去。想进一步高级面向对象的学习。学完 我要赶紧去学习python的学习了。
  • Cherry_Yas
  • Cherry_Yas
  • 2018-01-01 16:36
  • 6

【慕课笔记】4-5 应用DOM4J及JDOM方式解析XML—在JDOM中存储Book对象

package com.imooc.xml; import java.io.FileInputStream; import java.io.FileNotFoundException; imp...
  • yxt_y
  • yxt_y
  • 2016-04-14 19:41
  • 116

Unreal Cook Book:创建对象的的几种姿势(C++)

在UE4中,使用C++代码创建常见类型的对象实例。
  • Neil3D
  • Neil3D
  • 2016-06-01 08:55
  • 8478

《C++ Primer 4 Answer Book》 整理[14]——第15章 面向对象编程

<!-- @font-face {font-family:SimSun} @font-face {font-family:SimSun} p.MsoNormal, li.MsoNorma...
  • peace_power
  • peace_power
  • 2011-12-10 12:04
  • 266
    个人资料
    • 访问:158978次
    • 积分:2271
    • 等级:
    • 排名:第19041名
    • 原创:74篇
    • 转载:31篇
    • 译文:4篇
    • 评论:13条
    文章分类
    最新评论