如何生成动态表单
需求: 如何通过后台配置字段的改变,来动态生成新的表单,动态生成不同的表单
实现思路:生成两个实体类,一个是存表单字段的的表的实体。一个是存表单字段值的表的一个实体,因为表单有子项,有上下级,所以 需要建立二级结构,进行编写controller 和service,控制器中编写表结构的内容:先创建返回数据格式,之后查询最上级的字段,之后循环list 创建返回数据实体,为其填充数据,接下来循环有子项,把第二级的list 放到第一级的list 中 最后把这两级拼接起来放到一个最外层的list 返回给前端 代码如下:
表单字段结构实体
package com.hegao.pdos.xydq.entity;
import java.util.List;
public class formDetailedEntity {
// 获取字段对应值的设置
private List<DetailedOptionEntity> DetailedOptionEntity;
//获取表单详细对应类型及子项
//二级结构
private List<formDetailedEntity> formDetailedEntitie;
// @ExcelColum("id")
private String id;
// @ExcelColum("字段id")
private String field_id;
// @ExcelColum("字段名")
private String field_name;
// @ExcelColum("字段类型")
private String field_type_name;
// @ExcelColum("字段类型id")
private String field_type_id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getField_name() {
return field_name;
}
public void setField_name(String field_name) {
this.field_name = field_name;
}
public String getField_type_name() {
return field_type_name;
}
public void setField_type_name(String field_type_name) {
this.field_type_name = field_type_name;
}
public String getField_type_id() {
return field_type_id;
}
public void setField_type_id(String field_type_id) {
this.field_type_id = field_type_id;
}
public String getField_id() {
return field_id;
}
public void setField_id(String field_id) {
this.field_id = field_id;
}
public List<com.hegao.pdos.xydq.entity.DetailedOptionEntity> getDetailedOptionEntity() {
return DetailedOptionEntity;
}
public void setDetailedOptionEntity(List<com.hegao.pdos.xydq.entity.DetailedOptionEntity> detailedOptionEntity) {
DetailedOptionEntity = detailedOptionEntity;
}
public List<formDetailedEntity> getFormDetailedEntitie() {
return formDetailedEntitie;
}
public void setFormDetailedEntitie(List<formDetailedEntity> formDetailedEntitie) {
this.formDetailedEntitie = formDetailedEntitie;
}
}
表单对应值的实体
package com.hegao.pdos.xydq.entity;
import java.util.List;
public class DetailedOptionEntity {
// @ExcelColum("表单对应详情id")
private String form_detailed_id;
// @ExcelColum("对应值名")
private String option_name;
// @ExcelColum("对应值")
private String option_value;
// @ExcelColum("启用状态")
private String enable_type;
public String getOption_name() {
return option_name;
}
public void setOption_name(String option_name) {
this.option_name = option_name;
}
public String getOption_value() {
return option_value;
}
public void setOption_value(String option_value) {
this.option_value = option_value;
}
public String getEnable_type() {
return enable_type;
}
public void setEnable_type(String enable_type) {
this.enable_type = enable_type;
}
public String getForm_detailed_id() {
return form_detailed_id;
}
public void setForm_detailed_id(String form_detailed_id) {
this.form_detailed_id = form_detailed_id;
}
}
controller 控制器类的编写
/**
* 表单结构
*/
public void Structure() {
try {
Map<String, Object> param = getParaJsonMap();
List<formDetailedEntity> formDetailedEntity = service.Structure(param);
rendSuccessJson(formDetailedEntity);
} catch (Exception e) {
e.printStackTrace();
rendFailedJson(ErrorCode.get("9999"));
}
}
service 业务的编写
/**
* 获取 表单结构
*/
public List<formDetailedEntity> Structure(Map<String, Object> param){
//创建返回数据格式
List<formDetailedEntity> formDetailedEntity = new ArrayList<>();
//查询最上级字段
SqlPara sqlPara = Db.getSqlPara("xydq_form.detailed.query_out", param);
List<Record> recordList = Db.find(sqlPara);
//循环list 并创建返回数据实体 为其填充数据
for (int i = 0; i < recordList.size(); i++) {
recordList.get(i);
//创建外面的实体
formDetailedEntity formDetailedEntity1 = new formDetailedEntity();
//赋值
//id
formDetailedEntity1.setId(recordList.get(i).getStr("id"));
//字段id
formDetailedEntity1.setField_id(recordList.get(i).getStr("field_id"));
//字段名
formDetailedEntity1.setField_name(recordList.get(i).getStr("field_name"));
//类型id
formDetailedEntity1.setField_type_id(recordList.get(i).getStr("field_type_id"));
//字段类型
formDetailedEntity1.setField_type_name(recordList.get(i).getStr("field_type_name"));
//拼装完成
//根据实体类型 查询是否有对应值(单选、多线、下拉)
param.put("id", recordList.get(i).getInt("id"));
//通过id
SqlPara sql_type = Db.getSqlPara("xydq_form.detailed_option.query", param);
List<Record> list = Db.find(sql_type);
//创建这个这些值 实体的list
List<DetailedOptionEntity> detailedOptionEntityList = new ArrayList<>();
//如果这里面有值
if (list.size() > 0) {
//把想要的值 一个一个查出来
for (int j = 0; j < list.size(); j++) {
DetailedOptionEntity detailedOptionEntity = new DetailedOptionEntity();
//对应值名
detailedOptionEntity.setOption_name(list.get(j).getStr("option_name"));
//对应值
detailedOptionEntity.setOption_value(list.get(j).getStr("option_value"));
//启用状态
detailedOptionEntity.setEnable_type(list.get(j).getStr("enable_type"));
//表单对应详情id
detailedOptionEntity.setForm_detailed_id(list.get(j).getStr("form_detailed_id"));
detailedOptionEntityList.add(detailedOptionEntity);
}
//查询出来的值 放到外面的实体
formDetailedEntity1.setDetailedOptionEntity(detailedOptionEntityList);
}
// //{
//根据实体类型是子项时 查询子集
//获取有上级id的字段
//循环取出来 有子项的
List<formDetailedEntity> formDetailedEntityList = new ArrayList<>();
param.put("id", recordList.get(i).getInt("id"));
List<Record> listType = Db.find(Db.getSqlPara("xydq_form.detailed.query_type", param));
if (listType.size() > 0) {
for (int type = 0; type < listType.size(); type++) {
formDetailedEntity formDetailedEntity2 = new formDetailedEntity();
//id
formDetailedEntity2.setId(listType.get(type).getStr("id"));
//字段名
formDetailedEntity2.setField_name(listType.get(type).getStr("field_name"));
//字段类型
formDetailedEntity2.setField_type_name(listType.get(type).getStr("field_type_name"));
//字段id
formDetailedEntity2.setField_id(listType.get(type).getStr("field_id"));
//类型id
formDetailedEntity2.setField_type_id(listType.get(type).getStr("field_type_id"));
formDetailedEntityList.add(formDetailedEntity2);
//拼装完成
//根据实体类型 查询是否有对应值(单选、多线、下拉)
param.put("id", recordList.get(i).getInt("id"));
List<Record> list_second = Db.find(Db.getSqlPara("xydq_form.detailed_option.query", param));
if (list_second.size() > 0) {
for (int inner = 0; inner < list.size(); inner++) {
DetailedOptionEntity detailedOptionEntity = new DetailedOptionEntity();
//对应值名
detailedOptionEntity.setOption_name(list.get(inner).getStr("option_name"));
//对应值
detailedOptionEntity.setOption_value(list.get(inner).getStr("option_value"));
//启用状态
detailedOptionEntity.setEnable_type(list.get(inner).getStr("enable_type"));
//表单对应详情id
detailedOptionEntity.setForm_detailed_id(list.get(inner).getStr("form_detailed_id"));
detailedOptionEntityList.add(detailedOptionEntity);
}
//查询出来的值 放到外面的实体
formDetailedEntity1.setDetailedOptionEntity(detailedOptionEntityList);
}
//把填充好的数据 赋值到formDetailedEntity 实体中(最上级)
formDetailedEntity1.setFormDetailedEntitie(formDetailedEntityList);
}
}
//把最上级实体 赋值到返回数据结构中
formDetailedEntity.add(formDetailedEntity1);
}
return formDetailedEntity;
}
}
END…