package org.springside.bookstore.admin.web; import org.extremecomponents.table.limit.Limit; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.validation.BindingResult; import org.springframework.web.bind.ServletRequestDataBinder; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.util.WebUtils; import org.springside.bookstore.admin.manager.BookManager; import org.springside.bookstore.commons.domain.Book; import org.springside.core.commons.BaseManageController; import org.springside.core.commons.support.page.Page; import org.springside.plugins.extremeTable.ExtremeTablePage; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Map; /** * 图书管理的CRUD Controller. * 继承于对CRUD流程作了一定封装的{@link BaseManageController}, * 更灵活的MultiActionController请见继承于{@link org.springside.core.commons.BaseController}的BookStoreController和CustomerController * * @author Water Ye * @author Calvin * @author Kevin * @see BaseManageController * @see org.springside.core.commons.BaseController */ public class BookManageController extends BaseManageController { private BookManager bookManager; private static final int defaultPageSize = 3; protected static final String UPLOAD_DIR = "/images/book"; //view 定义 { listView = "/admin/book/listBook.jsp"; editView = "/admin/book/editBook.jsp"; successView = "redirect:/admin/book.do"; } public void setBookManager(BookManager bookManager) { this.bookManager = bookManager; } /** * 回调函数,列出所有图书. * 采用extable的limit分页功能 * * @see BaseManageController#list(HttpServletRequest, HttpServletResponse) */ protected void onList(HttpServletRequest request, HttpServletResponse response, ModelAndView mav) throws Exception { Limit limit = ExtremeTablePage.getLimit(request, defaultPageSize); Page page = bookManager.findBy(null, ExtremeTablePage.getSort(limit), limit.getPage(), limit.getCurrentRowsDisplayed()); mav.addObject("books", page.getResult()); mav.addObject("totalRows", page.getTotalCount()); } /** * 回调函数,显示编辑图书界面. * * @see BaseManageController#edit(HttpServletRequest, HttpServletResponse) */ protected void onEdit(HttpServletRequest request, HttpServletResponse response, ModelAndView mav) throws Exception { Integer id = new Integer(request.getParameter("id")); mav.addObject(bookManager.get(id)); } /** * 回调函数,保存图书. * * @param isNew 是否新增图书 * @see BaseManageController#save(HttpServletRequest, HttpServletResponse) */ protected void onSave(HttpServletRequest request, HttpServletResponse response, ModelAndView mav, boolean isNew) throws Exception { Book book = null; if (isNew) book = new Book(); else { Integer id = new Integer(request.getParameter("id")); book = bookManager.get(id); } BindingResult result = bindObject(request, book); if (bookManager.isNotUnique(book, "name")) result.reject(null, "书名不允许存在相同,请重新输入!"); if (result.hasErrors()) { onBindError(request, result, mav, editView + "?method=" + (isNew ? "create" : "update")); return; } bookManager.save(book); saveMessage(request, "数据" + (isNew ? "新增" : "保存") + "成功!"); } /** * 回调函数,查询图书. * * @see BaseManageController#query(HttpServletRequest, HttpServletResponse) */ protected void onQuery(HttpServletRequest request, HttpServletResponse response, ModelAndView mav) throws Exception { Limit limit = ExtremeTablePage.getLimit(request, defaultPageSize); Map filterMap = WebUtils.getParametersStartingWith(request, "search_"); Page page = bookManager.findBy(filterMap, ExtremeTablePage.getSort(limit), limit.getPage(), limit.getCurrentRowsDisplayed()); mav.addObject("books", page.getResult()); mav.addObject("totalRows", page.getTotalCount()); } /** * 回调函数,删除被选择的图书. * * @see BaseManageController#removeSelected(HttpServletRequest, HttpServletResponse) */ protected void onRemoveSelected(HttpServletRequest request, HttpServletResponse response, ModelAndView mav) throws Exception { String[] ids = request.getParameterValues("itemlist"); int success = 0; if (ids != null) { for (String id : ids) { try { bookManager.removeById(new Integer(id)); success++; } catch (DataIntegrityViolationException e) { saveMessage(request, "〈" + bookManager.get(new Integer(id)).getName() + "〉与其他数据关联,删除失败"); } } saveMessage(request, "成功删除" + success + "条纪录!"); } } /** * @see BaseManageController#referenceData(HttpServletRequest) */ protected void referenceData(HttpServletRequest request, Map model) { model.put("categorys", bookManager.getAllCategorys()); } /** * 预绑定,绑定Binder不能自动绑定的类别和图片信息. * * @see BaseManageController#preBind(HttpServletRequest, Object, ServletRequestDataBinder) */ protected void preBind(HttpServletRequest request, Object object, ServletRequestDataBinder binder) throws IOException { binder.setDisallowedFields(new String[]{"image", "category"}); Book book = (Book) object; //封面图片 String fileName = uploadImageToFile(request, UPLOAD_DIR, "image"); if (fileName != null) book.setImage(fileName); //图书分类 Integer category_id = new Integer(request.getParameter("category.id")); book.setCategory(bookManager.getCategory(category_id)); } }