package com.github.qinyou.common.web; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.jfinal.core.Controller; import com.jfinal.core.Injector; import com.jfinal.kit.Ret; import com.jfinal.plugin.activerecord.Model; import com.jfinal.plugin.activerecord.Page; import com.jfinal.plugin.activerecord.Record; import com.jfinal.render.JsonRender; import java.util.*; /** * controller 基类,封装一些Controller 中使用的公共方法 * * @author zhangchuang */ public abstract class BaseController extends Controller { // 通用操作提示信息 public final static String ADD_SUCCESS = "添加成功"; public final static String ADD_FAIL = "添加失败"; public final static String DELETE_SUCCESS = "删除成功"; public final static String UPDATE_SUCCESS = "修改成功"; public final static String UPDATE_FAIL = "修改失败"; public final static String IMPORT_SUCCESS = "导入成功"; /** * 返回datagrid json 数据 * * @param pageData */ protected void renderDatagrid(Page<?> pageData) { Map<String, Object> datagrid = new HashMap<>(); datagrid.put("rows", pageData.getList()); datagrid.put("total", pageData.getTotalRow()); render(new JsonRender(datagrid).forIE()); } /** * 返回datagrid json 数据 * * @param list * @param total */ protected void renderDatagrid(List<?> list, int total) { renderDatagrid(list, total, null); } /** * 返回datagrid json 数据 * * @param list * @param total * @param footer */ @SuppressWarnings({"SameParameterValue", "WeakerAccess"}) protected void renderDatagrid(List<?> list, int total, List<Map<String, Object>> footer) { Map<String, Object> datagrid = new HashMap<>(); datagrid.put("rows", list); datagrid.put("total", total); if (footer != null && footer.size() > 0) { datagrid.put("footer", footer); } render(new JsonRender(datagrid).forIE()); } /** * 返回datagrid json 数据, 无分页 * * @param list */ protected void renderDatagrid(List<Record> list) { Map<String, Object> datagrid = new HashMap<>(); datagrid.put("rows", list); renderJson(datagrid); } public void renderDatagrid(Collection collection, int total) { Map<String, Object> datagrid = new HashMap<>(); datagrid.put("rows", collection); datagrid.put("total", total); render(new JsonRender(datagrid).forIE()); } /** * 成功操作 */ protected void renderSuccess() { Ret ret = Ret.create().setOk(); render(new JsonRender(ret).forIE()); } /** * 成功操作 * * @param msg */ protected void renderSuccess(String msg) { Ret ret = Ret.create().setOk().setIfNotNull("msg", msg); render(new JsonRender(ret).forIE()); } /** * 成功操作 * * @param data */ protected void renderSuccess(List<Object> data) { Ret ret = Ret.create().setOk().setIfNotNull("data", data); render(new JsonRender(ret).forIE()); } /** * 成功操作 * * @param msg * @param data */ protected void renderSuccess(String msg, List<Object> data) { Ret ret = Ret.create().setOk().setIfNotNull("msg", msg).setIfNotNull("data", data); render(new JsonRender(ret).forIE()); } /** * 失败操作 */ protected void renderFail() { Ret ret = Ret.create().setFail(); render(new JsonRender(ret).forIE()); } /** * 失败操作 * * @param msg */ protected void renderFail(String msg) { Ret ret = Ret.create().setFail().setIfNotNull("msg", msg); render(new JsonRender(ret).forIE()); } /** * 失败操作 * * @param data */ protected void renderFail(List<Object> data) { Ret ret = Ret.create().setFail().setIfNotNull("data", data); render(new JsonRender(ret).forIE()); } /** * 失败操作 * * @param msg * @param data */ protected void renderFail(String msg, List<Object> data) { Ret ret = Ret.create().setFail().setIfNotNull("msg", msg).setIfNotNull("data", data); render(new JsonRender(ret).forIE()); } /** * 获取 http 请求 body json 数据 */ protected JSONObject readRawDataAsJson() { String rawData = getRawData(); return JSON.parseObject(rawData); } /** * 接收 bean list * * @param modelClass * @param prefix * @param <T> * @return */ @SuppressWarnings("unchecked") protected <T> List<T> getBeans(Class<? extends Model> modelClass, String prefix) { List<T> beanList = new ArrayList<>(); int size = getArrayKeys(prefix).size(); for (int i = 0; i < size; i++) { beanList.add((T) Injector.injectBean(modelClass, prefix + "[" + i + "]", getRequest(), false)); } return beanList; } /** * 获得 bean[index] 的 所有 key * * @param prefix * @return */ private Set<String> getArrayKeys(String prefix) { Set<String> keys = new HashSet<>(); String arrayPrefix = prefix + "["; String key; Enumeration<String> names = getRequest().getParameterNames(); while (names.hasMoreElements()) { key = names.nextElement(); if (!key.startsWith(arrayPrefix)) { continue; } if (!key.contains("]")) { continue; } keys.add(key.substring(0, key.indexOf("]") + 1)); } return keys; } }