生成动态表单

如何生成动态表单

需求: 如何通过后台配置字段的改变,来动态生成新的表单,动态生成不同的表单
实现思路:生成两个实体类,一个是存表单字段的的表的实体。一个是存表单字段值的表的一个实体,因为表单有子项,有上下级,所以 需要建立二级结构,进行编写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…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值