1public abstract class AbstractController<T extends AbstractEntity> {
2
3 @Resource
4 private Validator validator;
5
6 protected static final Logger logger = LoggerFactory.getLogger(AbstractController.class);
7
8 protected String className;
9
10 protected String entityName;
11
12 public AbstractController() {
13 className = ReflectionUtils.getSuperClassGenricType(getClass()).getName();
14 entityName = StringUtils.substringAfterLast(className, ".").toLowerCase();
15 }
16
17 21
22 protected abstract Manager<T, String> getEntityService();
23
24 28
29 protected abstract String getBasePagePath();
30
31 35
36 protected abstract String getDeleteMode();
37
38 @InitBinder
39 public void initBinder(WebDataBinder binder) {
40 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
41 binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
42 binder.registerCustomEditor(Integer.class, new CustomNumberEditor(Integer.class, true));
43 binder.registerCustomEditor(Double.class, new CustomNumberEditor(Double.class, true));
44 binder.registerCustomEditor(MultipartFile.class, new ByteArrayMultipartFileEditor());
45 }
46
47 50525558
59 @RequestMapping(value = "list", method = { RequestMethod.POST, RequestMethod.GET })
60 public ModelAndView list(HttpServletRequest request) {
61
62
63 // 提取客户端可能传送的过滤条件和排序条件
64 Map<String, Object> filterMap = WebUtils.getParametersStartingWith(request, "search_");
65 Map<String, Boolean> sortMap = HcUtils.getOrderFromPage(request, "sort_");
66
67 // 自定义查询、排序条件
68 beforeList(request, filterMap, sortMap);
69
70 HibernateCriteria hc = HcUtils.creat(filterMap, sortMap);
71
72 ModelAndView mav = new ModelAndView();
73
74 doList(mav, request, hc);
75
76 afterList(mav, request);
77
78 // 向叶面发送查询和排序条件
79 for(String key:filterMap.keySet()){
80 mav.addObject(StringUtils.substringBefore(key, "_"), filterMap.get(key));
81 }
82
83 for(String key:sortMap.keySet()){
84 mav.addObject(StringUtils.substringBefore(key, "_"), sortMap.get(key));
85 }
86
87 mav.setViewName(getBasePagePath() + "list");
88
89 return mav;
90 }
91
92 95969798
99 protected void beforeList(HttpServletRequest request, Map<String, Object> filterMap, Map<String, Boolean> sortMap) {
100 };
101
102 protected void doList(ModelAndView model, HttpServletRequest request, HibernateCriteria hc) {
103 int pageNumber = com.gbhk.core.util.WebUtils.getPageNumber(request);
104 int pageSize = com.gbhk.core.util.WebUtils.getPageSize(request);
105
106 Page<T> datas = null;
107 if (hc.criterion.isEmpty()) {
108 datas = getEntityService().getPage(pageNumber, pageSize, "id", true);
109 } else {
110 datas = getEntityService().getPageByCriteria(pageNumber, pageSize, hc);
111 }
112 model.addObject("datas", datas);
113 model.addObject("pageNumber", pageNumber);
114 }
115
116 119120121122
123 protected void afterList(ModelAndView model, HttpServletRequest request) {
124 };
125
126 @SuppressWarnings("unchecked")
127 @RequestMapping(value = "preCreate", method = { RequestMethod.POST, RequestMethod.GET })
128 public ModelAndView preCreate(int page, HttpServletRequest request) throws Exception {
129 T bean = (T) ReflectionUtils.getSuperClassGenricType(getClass()).newInstance();
130 ModelAndView mav = new ModelAndView();
131 beforePreCreate(mav, bean, request);
132
133 mav.addObject("bean", bean);
134 mav.addObject("page", page);
135
136 afterPreCreate(mav, bean, request);
137
138 mav.setViewName(getBasePagePath() + "create");
139
140 return mav;
141 }
142
143 protected void beforePreCreate(ModelAndView model, T bean, HttpServletRequest request) {
144 };
145
146 protected void afterPreCreate(ModelAndView model, T bean, HttpServletRequest request) {
147 };
148
149 153154157
158 @RequestMapping(value = "create", method = RequestMethod.POST)
159 public ModelAndView create(int page, T bean, HttpServletRequest request, RedirectAttributes redirectAttributes)
160 throws Exception {
161
162 beforeCreate(request);
163
164 getEntityService().save(bean);
165
166 afterCreate(redirectAttributes);
167
168 ModelAndView mav = new ModelAndView("redirect:edit/" + bean.getId() + "/" + page + "/");
169 redirectAttributes.addFlashAttribute("msg", "添加成功!");
170
171 // 重定向到Edit
172 return mav;
173 }
174
175 protected void beforeCreate(HttpServletRequest request) {
176 };
177
178 protected void afterCreate(RedirectAttributes redirectAttributes) {
179 };
180
181 183
184 @RequestMapping(value = "edit/{id}/{page}", method = RequestMethod.GET)
185 public ModelAndView edit(@PathVariable("id") String id, @PathVariable("page") int page, HttpServletRequest request)
186 throws Exception {
187
188 ModelAndView mav = new ModelAndView();
189 T bean = getEntityService().get(id);
190 beforeEdit(mav, bean, request);
191
192 mav.addObject("bean", bean);
193 mav.addObject("id", id);
194 mav.addObject("page", page);
195
196 afterEdit(mav, bean, request);
197
198 mav.setViewName(getBasePagePath() + "edit");
199
200 return mav;
201 }
202
203 protected void beforeEdit(ModelAndView model, T bean, HttpServletRequest request) {
204 };
205
206 protected void afterEdit(ModelAndView model, T bean, HttpServletRequest request) {
207 };
208
209 @RequestMapping(value = "save", method = RequestMethod.POST)
210 public ModelAndView save(@RequestParam String id, @RequestParam int page, HttpServletRequest request,
211 @ModelAttribute("bean") T bean, RedirectAttributes redirectAttributes) throws Exception {
212 ModelAndView mav = new ModelAndView();
213 try {
214
215 BindException errors = bindRequestEntity(request, bean);
216
217 beforeSave(mav, bean, request);
218
219 if (errors.hasErrors()) {
220 logger.error(errors.getMessage());
221 redirectAttributes.addFlashAttribute("msg", getMessageFromErrors(errors));
222 mav.addObject("msg", "11");
223 mav.setViewName("redirect:" + "edit/" + id + "/" + page + "/");
224 return mav;
225 }
226
227 getEntityService().save(bean);
228
229 } catch (Exception e) {
230 e.printStackTrace();
231 }
232
233 mav.addObject("bean", bean);
234 mav.addObject("id", id);
235 mav.addObject("page", page);
236 mav.addObject("msg", "保存成功");
237
238 afterSave(mav, bean, request);
239
240 mav.setViewName(getBasePagePath() + "edit");
241
242 return mav;
243 }
244
245 protected void beforeSave(ModelAndView model, T bean, HttpServletRequest request) {
246 };
247
248 protected void afterSave(ModelAndView model, T bean, HttpServletRequest request) {
249 };
250
251 255
256 @ModelAttribute
257 public void getEntity(@RequestParam(value = "id", defaultValue = "") String id, Model model) {
258 if (!"".equals(id)) {
259 model.addAttribute("bean", getEntityService().get(id));
260 }
261 }
262
263 265
266 protected BindException bindRequestEntity(HttpServletRequest request, T bean) throws Exception {
267 ServletRequestDataBinder binder = new ServletRequestDataBinder(bean);
268 initBinder(binder);
269 binder.bind(request);
270 BindException errors = new BindException(binder.getBindingResult());
271
272 // validator.validate(entity, errors);
273 return errors;
274 }
275
276 280281282284
285 protected boolean beforeBindRequestEntity(HttpServletRequest request, T entity) {
286 return false;
287 };
288
289 @RequestMapping(value = "delete/{id}/{page}",method = RequestMethod.GET)
290 public String delete(@PathVariable("id") String id, @PathVariable("page") int page, RedirectAttributes ra,
291 HttpServletRequest request) throws Exception {
292
293 T bean = getEntityService().get(id);
294 beforeDelete(request, bean, ra);
295
296 if (StringUtils.isBlank(getDeleteMode()) || "logic".equals(getDeleteMode())) {
297 // 物理删除
298 getEntityService().delete(bean);
299 } else {
300 // 逻辑删除
301 bean.setEnabled(false);
302 getEntityService().update(bean);
303 }
304
305 ra.addAttribute("page", page);
306 ra.addFlashAttribute("msg", "删除成功");
307
308 afterDelete(request, bean, ra);
309
310 //截取uri动态拼接返回list路径
311 //示例:uri:uri:/gbhk-web/admin/property/delete/8a8a89be5114b516015114bea7c30002/1/
312 // 返回字符串:/admin/property/list
313 String uri = request.getRequestURI();
314 String[] array = uri.split("/");
315 String retStr="";
316 for(int i=2;i<array.length-3;i++){
317 retStr+="/"+array[i];
318 }
319 return "redirect:"+retStr+"/list";
320 }
321
322 326327330
331 @RequestMapping(value = "delete", method = RequestMethod.POST)
332 public ModelAndView deleteBatch(@RequestParam("ids") String ids, @RequestParam("page") int page,
333 RedirectAttributes ra, HttpServletRequest request) throws Exception {
334
335 beforeDelete(request, null, ra);
336
337 if (StringUtils.isBlank(ids)) {
338 ra.addFlashAttribute("msg", "请选择要删除的信息!");
339 } else {
340 String[] id_s = StringUtils.split(ids, ",");
341 if (StringUtils.isBlank(getDeleteMode()) || "logic".equals(getDeleteMode())) {
342 // 物理删除
343 for (String id : id_s) {
344 getEntityService().deleteById(id.trim());
345 }
346 } else {
347 // 逻辑删除
348 for (String id : id_s) {
349 T bean = getEntityService().get(id.trim());
350 bean.setEnabled(false);
351 getEntityService().update(bean);
352 }
353 }
354
355 ra.addFlashAttribute("msg", "删除成功");
356 }
357
358 ra.addAttribute("page", page);
359
360 afterDelete(request, null, ra);
361
362 return new ModelAndView(getBasePagePath() + "list");
363 }
364
365 protected void beforeDelete(HttpServletRequest request, T entity, RedirectAttributes ra) {
366 };
367
368 protected void afterDelete(HttpServletRequest request, T entity, RedirectAttributes ra) {
369 };
370
371 375376379
380 @RequestMapping(value = "view/{id}/{page}", method = RequestMethod.GET)
381 public ModelAndView view(@PathVariable("id") String id, @PathVariable("page") int page, HttpServletRequest request)
382 throws Exception {
383 ModelAndView mav = new ModelAndView();
384
385 T bean = getEntityService().get(id);
386 beforeView(mav, bean, request);
387
388 mav.addObject("bean", bean);
389 mav.addObject("id", id);
390 mav.addObject("page", page);
391
392 afterView(mav, bean, request);
393
394 mav.setViewName(getBasePagePath() + "view");
395
396 return mav;
397 }
398
399 protected void beforeView(ModelAndView model, T bean, HttpServletRequest request) {
400 };
401
402 protected void afterView(ModelAndView model, T bean, HttpServletRequest request) {
403 };
404
405 private String getMessageFromErrors(BindException errors) {
406 StringBuilder sb = new StringBuilder();
407 sb.append("错误信息:");
408 List<ObjectError> list = errors.getAllErrors();
409 for (ObjectError error : list) {
410 sb.append(error.getDefaultMessage()).append(";");
411 }
412 return sb.toString();
413 }
414
415
416}
1@Controller
2@RequestMapping(value = "/admin/user")
3public class UserController extends AbstractController<User>{
4
5 @Autowired
6 private UserManager userManager;
7
8 @Override
9 protected Manager<User, String> getEntityService() {
10 return userManager;
11 }
12
13 @Override
14 protected String getBasePagePath() {
15 return "ugr/user/";
16 }
17
18 @Override
19 protected String getDeleteMode() {
20 return null;
21 }
22
23
24}