生成动态表单
如何生成动态表单
需求: 如何通过后台配置字段的改变,来动态生成新的表单,动态生成不同的表单
实现思路:生成两个实体类,一个是存表单字段的的表的实体。一个是存表单字段值的表的一个实体,因为表单有子项,有上下级,所以 需要建立二级结构,进行编写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();//赋值//idformDetailedEntity1.setId(recordList.get(i).getStr("id"));//字段idformDetailedEntity1.setField_id(recordList.get(i).getStr("field_id"));//字段名formDetailedEntity1.setField_name(recordList.get(i).getStr("field_name"));//类型idformDetailedEntity1.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"));//通过idSqlPara sql_type = Db.getSqlPara("xydq_form.detailed_option.query", param);List<Record> list = Db.find(sql_type);//创建这个这些值 实体的listList<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"));//表单对应详情iddetailedOptionEntity.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();//idformDetailedEntity2.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"));//字段idformDetailedEntity2.setField_id(listType.get(type).getStr("field_id"));//类型idformDetailedEntity2.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"));//表单对应详情iddetailedOptionEntity.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…
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
