Java tutorial
/** * Copyright (c) 2005-2012 https://github.com/zhangkaitao * * Licensed under the Apache License, Version 2.0 (the "License"); */ package cn.guoyukun.spring.jpa.web.controller; import java.io.Serializable; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.ui.Model; import org.springframework.util.StringUtils; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.mvc.support.RedirectAttributes; import cn.guoyukun.spring.jpa.Constants; import cn.guoyukun.spring.jpa.entity.AbstractEntity; import cn.guoyukun.spring.jpa.entity.search.Searchable; import cn.guoyukun.spring.jpa.service.BaseService; import cn.guoyukun.spring.jpa.web.bind.annotation.PageableDefaults; import cn.guoyukun.spring.web.controller.BaseController; import cn.guoyukun.spring.web.controller.permission.PermissionList; /** * CRUD * <p>User: * <p>Date: 13-2-23 ?1:20 * <p>Version: 1.0 */ public abstract class BaseCRUDController<M extends AbstractEntity, ID extends Serializable> extends BaseController<M, ID> { protected BaseService<M, ID> baseService; private boolean listAlsoSetCommonData = false; protected PermissionList permissionList = null; /** * service * * @param baseService */ @Autowired public void setBaseService(BaseService<M, ID> baseService) { this.baseService = baseService; } /** * common data */ public void setListAlsoSetCommonData(boolean listAlsoSetCommonData) { this.listAlsoSetCommonData = listAlsoSetCommonData; } /** * ???sys:user * ??? sys:user:create */ public void setResourceIdentity(String resourceIdentity) { if (!StringUtils.isEmpty(resourceIdentity)) { permissionList = PermissionList.newPermissionList(resourceIdentity); } } @RequestMapping(method = RequestMethod.GET) @PageableDefaults(sort = "id=desc") public String list(Searchable searchable, Model model) { if (permissionList != null) { this.permissionList.assertHasViewPermission(); } model.addAttribute("page", baseService.findAll(searchable)); if (listAlsoSetCommonData) { setCommonData(model); } return viewName("list"); } /** * ? * * @param searchable * @param model * @return */ @RequestMapping(method = RequestMethod.GET, headers = "table=true") @PageableDefaults(sort = "id=desc") public String listTable(Searchable searchable, Model model) { list(searchable, model); return viewName("listTable"); } @RequestMapping(value = "/{id}", method = RequestMethod.GET) public String view(Model model, @PathVariable("id") M m) { if (permissionList != null) { this.permissionList.assertHasViewPermission(); } setCommonData(model); model.addAttribute("m", m); model.addAttribute(Constants.OP_NAME, ""); return viewName("editForm"); } @RequestMapping(value = "create", method = RequestMethod.GET) public String showCreateForm(Model model) { if (permissionList != null) { this.permissionList.assertHasCreatePermission(); } setCommonData(model); model.addAttribute(Constants.OP_NAME, ""); if (!model.containsAttribute("m")) { model.addAttribute("m", newModel()); } return viewName("editForm"); } @RequestMapping(value = "create", method = RequestMethod.POST) public String create(Model model, @Valid @ModelAttribute("m") M m, BindingResult result, RedirectAttributes redirectAttributes) { if (permissionList != null) { this.permissionList.assertHasCreatePermission(); } if (hasError(m, result)) { return showCreateForm(model); } baseService.save(m); redirectAttributes.addFlashAttribute(Constants.MESSAGE, "?"); return redirectToUrl(null); } @RequestMapping(value = "{id}/update", method = RequestMethod.GET) public String showUpdateForm(@PathVariable("id") M m, Model model) { if (permissionList != null) { this.permissionList.assertHasUpdatePermission(); } setCommonData(model); model.addAttribute(Constants.OP_NAME, ""); model.addAttribute("m", m); return viewName("editForm"); } @RequestMapping(value = "{id}/update", method = RequestMethod.POST) public String update(Model model, @Valid @ModelAttribute("m") M m, BindingResult result, @RequestParam(value = Constants.BACK_URL, required = false) String backURL, RedirectAttributes redirectAttributes) { if (permissionList != null) { this.permissionList.assertHasUpdatePermission(); } if (hasError(m, result)) { return showUpdateForm(m, model); } baseService.update(m); redirectAttributes.addFlashAttribute(Constants.MESSAGE, "?"); return redirectToUrl(backURL); } @RequestMapping(value = "{id}/delete", method = RequestMethod.GET) public String showDeleteForm(@PathVariable("id") M m, Model model) { if (permissionList != null) { this.permissionList.assertHasDeletePermission(); } setCommonData(model); model.addAttribute(Constants.OP_NAME, ""); model.addAttribute("m", m); return viewName("editForm"); } @RequestMapping(value = "{id}/delete", method = RequestMethod.POST) public String delete(@PathVariable("id") M m, @RequestParam(value = Constants.BACK_URL, required = false) String backURL, RedirectAttributes redirectAttributes) { if (permissionList != null) { this.permissionList.assertHasDeletePermission(); } baseService.delete(m); redirectAttributes.addFlashAttribute(Constants.MESSAGE, "?"); return redirectToUrl(backURL); } @RequestMapping(value = "batch/delete", method = { RequestMethod.GET, RequestMethod.POST }) public String deleteInBatch(@RequestParam(value = "ids", required = false) ID[] ids, @RequestParam(value = Constants.BACK_URL, required = false) String backURL, RedirectAttributes redirectAttributes) { if (permissionList != null) { this.permissionList.assertHasDeletePermission(); } baseService.delete(ids); redirectAttributes.addFlashAttribute(Constants.MESSAGE, "?"); return redirectToUrl(backURL); } }