简介:WeaTable 为前台表格信息实体类,其中存储了展示表格所需要的各种标签信息,信息以全局变量作为映射,并提供了拼组html语句,获取返回信息的公共方法,本文将会讲解WeaTable的运行原理、内部参数、方法、关联类及其常见的问题
@Author : Jaylan Zhou
@RefTitleAuthor : Andy Zhang
@Date : 2019.11
@Version 1.0
引用类
-
下属子类(待完善)
- WeaTableColumn:列信息类
- WeaTableOperate:表格操作菜单类
- WeaTablePopedom:操作菜单权限控制类
- WeaTableCheckboxpopedom: Check框权限控制类
-
枚举类(待完善)
- WeaTableType:WeaTable结构体枚举类
- WeaBoolAttr:True,False枚举类
- WeaMobileShowType:移动端属性判断组件类型枚举类
-
其他
- WeaResultMsg:返回消息结构体类
内部参数
字段名 | 数据类型 | 描述 |
---|---|---|
pageUID | String | 用户定制相关id,其值为pageID+user.getUID(); |
pageID | String | 页面id(其默认值为多少不清楚) |
tableType | WeaTableType(枚举类) | WeaTableType结构体枚举类,其有五种类型的值:CHECKBOX 多选 RADIO 单选 NONE 无 THUMBNAIL 缩略图显示 OFFICALDOC 文档模版 |
pagesize | String | 每页大小获取pagesize的方法: 此值可通过PageIdConst.getPageSize(pageId,userId)或其重载方法PageIdConst.getPageSize(pageId,userId,mould)方法进行获取 此值的获取原理为,根据传入的pageId和userId查询用户设置的默认分页值,若查询不到,则进行以下操作: 1.若传入了mould,根据mould判断其是否为文档列表或表单建模列表,并查询分页信息 2.若未传入mould,或第一步操作查询不到,则赋予默认值10 |
instanceid | String | 实体id(暂不知如何使用) |
datasource | String | 需要获取数据的数据源(用于非数据库查询分页的数据源)应为java类的全路径限制+方法名如:weaver.docs.docs.DocDataSource.getNoReadLog方法getNoReadLog传递的参数为4个:User user,Map<String,String> sourceparams,HttpServletRequest request,HttpServletResponse response |
sourceparams | String | 配合datasource使用,用于传递数据源必要的参数,以+分隔多参数,以:分隔key和value。如:id:79+userid:1+usertype:0,方法中使用:params.get("id") params.get("userid") params.get("usertype")获取值 |
pageBySelf | String | 配合datasource使用,用于控制是否由开发人员来控制分页,默认由系统组件分页。设置为true时由开发人员控制分页处理。 此值为String类型的"true","false" |
backfields | String | 字段名:从数据库中返回的字段名称 示例:SELECT id,name FROM table1 那么此值应为"id,name" |
sqlform | String | from后面至where前面的子句 示例:SELECT ... FROM table1 AS t1 LEFT JOIN table2 AS t2 ON t2.t1id = t1.id,那么此值为"table1 AS t1 LEFT JOIN table2 AS t2 ON t2.t1id = t1.id" |
sqlwhere | String | where后面至group by前面的子句 示例:SELECT ... WHERE id = '1',那么此值为"id = '1'" |
sqlorderby | String | order by 子句 示例:SELECT ... ORDER BY id,name,那么此值为"id,name" |
sqlprimarykey | String | 此表中的主键,若此表主键为id,则此值为"id" |
sqlsortway | String | 表格的排序方式(不清楚如何具体使用) |
sqlisdistinct | String | 是否去重,此值为String类型的"true","false" |
poolname | String | 数据源名称(如何具体使用) |
sqlgroupby | String | group by后面至order by前面的子句 示例:SELECT ... GROUP BY id,name,那么此值为"id,name" |
rowstylefield | String | 行样式 |
openPrimaryKeyOrder | WeaBoolAttr(枚举类) | 是否打开主键排序 此值为WeaBoolAttr.TRUE,WeaBoolAttr.FALSE |
mergeOrder | WeaBoolAttr(枚举类) | (?) 此值为WeaBoolAttr.TRUE,WeaBoolAttr.FALSE |
fastpage | String | 是否启快速排序 此值为String类型的"true","false" |
sumColumns | String | 多列做和,必须与col列中的列名一致,有多个需要统计的列的话以,分隔 若要合计money1,money2,money3的值,则此值应为"money1,money2,money3" 该属性用于报表支持 |
sumValues | String | 将合计数据直接送入 逗号分隔 |
decimalFormat | String | 格式化参数逗号分隔 (String.format的风格) |
columns | List<WeaTableColumn> | 列属性 此值为列信息类WeaTableColumn的集合 |
operates | WeaTableOperates | 操作菜单相关 operate的权限控制 |
checkboxpopedom | WeaTableCheckboxpopedom | 主要用于checkbox 权限控制 |
countColumnsDbType | String | 千分位合计处理字段 字段名逗号分隔(具体如何使用?) |
mobileshowtype | WeaMobileShowType(枚举类) | 移动端属性判断组件类型,此类有两个值: ListView Table |
mobileshowtemplate | String | 移动端模版属性,此值为SplitMobileTemplateBean类序列化后的Base64加密值 调用createMobileTemplate(SplitMobileTemplateBean bean)公共方法后,此值将自动注入 |
构造方法
WeaTable 除了第一种无参的构造方法外,其他构造方法均是将形参传入全局变量,形同set方法,因此方法体不再赘述
/**
* 构造方法1
* 方法作用:实例化化columns,operates,checkboxpopedom,checkboxList 四个全局变量
*/
public WeaTable() {
columns=new ArrayList<WeaTableColumn>();
operates=new WeaTableOperates();
checkboxpopedom=new WeaTableCheckboxpopedom();
checkboxList=new ArrayList<WeaTableCheckboxpopedom>();
}
/**
* 构造方法2
* 方法作用:将形式参数传入全局变量,等同于set方法
*/
public WeaTable(String backfields, String sqlform, String sqlwhere, String sqlorderby, String sqlprimarykey, List<WeaTableColumn> cols)
/**
* 构造方法3
* 方法作用:将形式参数传入全局变量,等同于set方法
*/
public WeaTable(String backfields, String sqlform, String sqlwhere, String sqlorderby, String sqlprimarykey, String sqlsortway, List<WeaTableColumn> cols)
/**
* 构造方法4
* 方法作用:将形式参数传入全局变量,等同于set方法
*/
public WeaTable(String pageUID, WeaTableType tableType, String pagesize, String instanceid, String backfields, String sqlform, String sqlwhere, String sqlorderby, String sqlprimarykey,
String sqlsortway, List<WeaTableColumn> cols)
/**
* 构造方法5
* 方法作用:将形式参数传入全局变量,等同于set方法
*/
public WeaTable(String pageUID, WeaTableType tableType, String pagesize, String instanceid, String backfields, String sqlform, String sqlwhere, String sqlorderby,String sqlgroupby, String sqlprimarykey,String sqlsortway, List<WeaTableColumn> cols)
/**
* 构造方法6
* 方法作用:将形式参数传入全局变量,等同于set方法
*/
public WeaTable(String pageUID, String backfields, String sqlform, String sqlwhere, String sqlorderby, String sqlprimarykey, String sqlsortway, List<WeaTableColumn> cols)
/**
* 构造方法7
* 方法作用:将形式参数传入全局变量,等同于set方法
*/
public WeaTable(String pageUID, WeaTableType tableType, String backfields, String sqlform, String sqlwhere, String sqlorderby, String sqlprimarykey, String sqlsortway, List<WeaTableColumn> cols)
公共方法
WeaTable 共有三个公共方法
/**
* 创建移动端模板属性
* 传入参数:SplitMobileTemplateBean
* 方法作用:将SplitMobileTemplateBean类进行序列化,并将序列化后的值进行Base64加密,存入全局变量mobileshowtemplate中
*/
public void createMobileTemplate(SplitMobileTemplateBean bean)
/**
* 将WeaTable的参数拼组成前端对应的分页html语句并作为字符串返回
* 返回值:拼组后的分页html字符串
* 方法作用:根据WeaTable内部存储的全局变量值拼组成前端对应的分页html语句并作为字符串返回
*/
public String getTableString()
/**
* 将创建后的html语句存入缓存
* 返回值:结果Map
* 方法作用:此方法在调用getTableString()后执行,获取到拼组后的html字符串,并生成一个UUID作为sessionkey,将二者存入缓存,并返回一个Map,其中存储了返回类型字段和sessionkey
*/
public Map<String,Object> makeDataResult()
调用原理
WeaTable 其实是一个分页信息实体类,底层会根据其全局变量中存储的参数值,拼接对应的分页html,并存入缓存,其执行过程大致如下:
- 1.实例化一个WeaTable实体类
- 2.按照业务需求,用set方法或构造方法给WeaTable中的全局变量赋值
- 3.赋值完成后,调用其makeDataResult()方法,获取到其返回的Map
- 4.新建WeaResultMsg实体类,调用其putAll()方法,将第3步返回的Map存入
- 5.调用WeaResultMsg的success()方法
- 6.调用WeaResultMsg的getResultMap()方法,获取其返回的Map<String,Object>
WeaTable 拼组后的html语句,并不存在于Map中,而是存在于Ecology底层内置的缓存Ehcache中,Map中存储了WeaTable的返回类型,及html语句所对应的sessionkey,key为系统自动生成,为一个UUID
在系统设置了Redis的情况下,Redis中也会存储返回的语句
调用示例
-
1.demo 示例
/* * @Author :wyl * @Date :2019/4/9 17:25 * @Version 1.0 : * @Description : **/ public class WeaTableDemoCmd extends AbstractCommonCommand<Map<String,Object>> { public WeaTableDemoCmd(User user, Map<String,Object> params) { this.user = user; this.params = params; } @Override public BizLogContext getLogContext() { return null; } @Override public Map<String, Object> execute(CommandContext commandContext) { Map<String, Object> apidatas = new HashMap<String, Object>(); //角色判断参考代码 // if(!HrmUserVarify.checkUserRight("LogView:View", user)){ // apidatas.put("hasRight", false); // return apidatas; // } if (null == user){ apidatas.put("hasRight", false); return apidatas; } try { //返回消息结构体 WeaResultMsg result = new WeaResultMsg(false); String pageID = "17ecc14c-9d64-4a43-81a4-7b7c6f792857"; String pageUid = pageID + "_" + user.getUID(); String pageSize = PageIdConst.getPageSize(pageID, user.getUID()); String sqlwhere = " 1=1 "; //新建一个weatable WeaTable table = new WeaTable(); table.setPageUID(pageUid); table.setPageID(pageID); table.setPagesize(pageSize); String fileds = " w.id,w.requestname,w.state,w.creatertime,w.creater,w.type,h.lastname "; table.setBackfields(fileds); //搜索条件,这里可以放高级搜索的的条件 String requestname = Util.null2String(params.get("requestname")); if (StringUtils.isNotBlank(requestname)) { sqlwhere += " and w.requestname like '%" + requestname + "%' "; } //创建人 String creater = Util.null2String(params.get("creater")); if (StringUtils.isNotBlank(creater)) { sqlwhere += " and w.creater in '(" + creater + ")' "; } //状态 String state = Util.null2String(params.get("state")); if (StringUtils.isNotBlank(state) && !StringUtils.equals("0",state)) { sqlwhere += " and w.state = '" + state + "' "; } //类型 String type = Util.null2String(params.get("type")); if (StringUtils.isNotBlank(type) && !StringUtils.equals("0",type)) { sqlwhere += " and w.type = '" + type + "' "; } String creatertime = Util.null2String(params.get("creatertime")); if(StringUtils.isNotBlank(creatertime)){ } //创建时间 startDate endDate // String startDate = Util.null2String(params.get("startDate")); // String endDate = Util.null2String(params.get("endDate")); // if(StringUtils.isNotBlank(startDate) && StringUtils.isNotBlank(endDate)){ // sqlwhere += " and creatertime>='" + startDate + "' and creatertime<='" + endDate + "' "; // } table.setSqlform(" ECOLOGY_PC_DEMO_WORKFOLW w LEFT JOIN HrmResource h on w.creater = h.id "); table.setSqlwhere(sqlwhere); table.setSqlorderby("id"); table.setSqlprimarykey("id"); table.setSqlisdistinct("false"); table.getColumns().add(new WeaTableColumn("id").setDisplay(WeaBoolAttr.FALSE)); //设置为不显示 table.getColumns().add(new WeaTableColumn("20%", "请求标题", "requestname","requestname")); table.getColumns().add(new WeaTableColumn("20%", "创建人", "lastname","lastname")); table.getColumns().add(new WeaTableColumn("20%", "状态", "state","state","com.engine.demo.demo05.cmd.WeaTableTransMethod.testTransMethod")); table.getColumns().add(new WeaTableColumn("20%", "类型", "type","type","com.engine.demo.demo05.cmd.WeaTableTransMethod.getType")); table.getColumns().add(new WeaTableColumn("20%", "创建日期", "creatertime","creatertime")); //设置左侧check默认不存在 table.setCheckboxList(null); table.setCheckboxpopedom(null); result.putAll(table.makeDataResult()); result.put("hasRight", true); result.success(); apidatas = result.getResultMap(); } catch (Exception e) { e.printStackTrace(); } return apidatas; } }