一般动作
供稿人:杨帅军
新员工进入公司以后都会做一个流程来了解产品特性,对于表单上的东西最好奇的就属动态表啦!下面来看一下动态表是如何保存的!
1、使用动态表必须在页面上添加这样一句话
示例:
然后配合后台的控制器使用:
// 手动保存动态表
updateDynamicTable(employeeKPIPlanInstance, EmployeeKPIPlanInd, "inds", "plan", params, "ind", "sortorder");
// 或自动保存所有动态表
updateDynamicTables(employeeKPIPlanInstance, params);
2、下面的js代码除提供添加一行和删除一行功能外最主要的是自动生成三个隐藏字段。
js代码如下:
隐藏字段如下:
$j(dt.table).append("<input type='hidden' name='"+prefix+"DynamicTable' value='1'/>");
$j(dt.table).append("<input type='hidden' name='"+prefix+"DynamicTableChildClass' value='" + dt.options.childClass + "'/>");
$j(dt.table).append("<input type='hidden' name='"+prefix+"DynamicTableRequiredField' value='" + dt.options.requiredField + "'/>");
3、控制器中 updateDynamicTable 或 updateDynamicTables 主要负责根据类名实例化对象实例再进行初始化,这两个方法位于 bropen.toolkit.utils.grails.BeanUtils 中。
以手动保存动态表为例,updateDynamicTable 的主要逻辑如下:
1). 构造明细
2). 利用反射根据类名获取类的实例
3). 从数据库删除被删除的明细
4). 将剩余的明细赋给主类bean
注:自动保存动态表实际在调手动保存动态表
4、除此之外,动态表还提供前后台的事件机制、编辑部分数据(如张三编辑1、3、5行、李四同时编辑2、4、6行)等机制。
总结:
如果子表的数据在create时,已经创建,且不再需要添加或删除一行,而又需要用到动态表的自动保存功能,只需在页面上添加必要的隐藏域字段即可,其中 ind 为动态表前缀:
<input type="hidden" value="1" name="indDynamicTable">
<input type="hidden" value="EmployeeKPIPlanInd" name="indDynamicTableChildClass">
<input type="hidden" value="sortorder" name="indDynamicTableRequiredField">