java动态字段的万能表单系统的构建

背景:随着用户对对象属性的不断丰富,原来基于固定编码的类模型已经不能满足用户的需求,现在尝试编写一个动态字段的系统来实现模型属性的任意定制,并在此基础上不断扩展。

目标:用户可以用自定义的方式动态的为表单添加字段,并对字段进行查询,编辑,导入,导出等与普通固定类模型一致的操作。

实现:动态字段的实现方法很多,包括关联表,预定义字段,使用文档数据库等。本文就讨论一种基于关联表的实现方式。

预定义字段有字段上限和字段对应的缺点,文档型数据库需要我们学习新的思维模型。关联表模型是关系型数据库模式下

动态字段的一个合理有效的解决方案。

基本的思路是实现自己的

类(MyClass):类中包含定义的属性即字段

类的属性(MyProperty):属性包含字段的名称,类型,是否显示,排序等

实例化的对象(MyObject):对象包含具体是哪个类,通过类索引到具体有哪些字段,还包含他所关联的属性及值(Item)

属性的值:(Item):包含属性的名称及其对应的值

直接上代码:

@QClass(name = "自定义类")
@Entity
@Table(name = "b_my_class")
public class MyClass extends BaseEntity {
    @Column(name = "name", columnDefinition = "varchar(100) COMMENT '名称'")
    private String name;

    @OneToMany(mappedBy = "myClass", cascade = CascadeType.ALL)
    @JsonManagedReference
    private List properties;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List getProperties() {
        return properties;
    }

    public void setProperties(List properties) {
        this.properties = properties;
    }
}
@QClass(name = "自定义属性")
@Entity
@Table(name = "b_my_property")
public class MyProperty extends BaseEntity {
    @QField(name = "名称", actions = {Action.edit, Action.show}, queryType = QFieldQueryType.like, nullable = false)
    @Column(name = "name", columnDefinition = "varchar(100) COMMENT '名称'")
    private String name;//名称

    @QField(name = "字段", actions = {Action.edit, Action.show}, queryType = QFieldQueryType.like)
    @Column(name = "field", columnDefinition = "varchar(100) COMMENT '字段'")
    private String field;//字段

    @QField(name = "类型", actions = {Action.edit, Action.show}, queryType = QFieldQueryType.like)
    @Column(name = "field_type", columnDefinition = "varchar(50) COMMENT '类型'")
    @Enumerated(EnumType.STRING)
    private FieldType fieldType;//类型

    @QField(name = "是否显示", actions = {Action.show}, queryType = QFieldQueryType.like)
    @Column(name = "if_show")
    private Boolean ifShow;//是否显示

    @Column(name = "seq")
    private Integer seq;

    @ManyToOne
    @JoinColumn(name = "my_class_id")
    @JsonBackReference
    private MyClass myClass;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getField() {
        return field;
    }

    public void setField(String field) {
        this.field = field;
    }

    public FieldType getFieldType() {
        return fieldType;
    }

    public void setFieldType(FieldType fieldType) {
        this.fieldType = fieldType;
    }

    public Boolean getIfShow() {
        return ifShow;
    }

    public void setIfShow(Boolean ifShow) {
        this.ifShow = ifShow;
    }

    public Integer getSeq() {
        return seq;
    }

    public void setSeq(Integer seq) {
        this.seq = seq;
    }

    public MyClass getMyClass() {
        return myClass;
    }

    public void setMyClass(MyClass myClass) {
        this.myClass = myClass;
    }
}
@QClass(name = "动态实体")
@Entity
@Table(name = "b_my_object")
public class MyObject extends BaseEntity {
    @ManyToOne
    @JoinColumn(name = "my_class_id")
    private MyClass myClass;

    @OneToMany(mappedBy = "myObject", cascade = CascadeType.ALL)
    @JsonManagedReference
    private List items;

    public MyClass getMyClass() {
        return myClass;
    }

    public void setMyClass(MyClass myClass) {
        this.myClass = myClass;
    }

    public List getItems() {
        return items;
    }

    public void setItems(List items) {
        this.items = items;
    }
}

最终实现的效果图:

这是基本的实现,后续将增加查询,编辑,导入,导出等所有固定字段模型实现的所有功能,即这是一个万能表单,用户能够

动态的定制字段,然后动态的将他转化为菜单,然后动态的使用。

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
万能表单系统是一种基于PHP源码开发的高度灵活和可定制的表单生成工具。它提供了一种简单且强大的方式来创建各种类型的表单,包括联系表单、问卷调查、注册表单等。 该系统具有以下特点: 1. 高度可定制:万能表单系统允许用户根据自己的需求定制表单字段类型、数量和布局。用户可以选择添加文本输入框、单选框、多选框、下拉菜单等不同的字段类型,并设定字段的验证规则和默认值。 2. 简易操作:系统采用简洁直观的界面设计,用户可以通过拖放方式轻松地添加和排列表单字段。同时,用户可以实时预览表单的外观和功能,方便调试和修改。 3. 数据管理:系统提供了数据库管理功能,用户可以方便地管理表单提交的数据。用户可以浏览已提交的表单数据、导出数据为Excel或CSV格式,并可以设定数据的自动备份和定期清理。 4. 安全性保障:系统具有强大的安全机制,使用了PHP中的安全防御措施,如数据过滤、输入验证、防止跨站脚本攻击等。同时,系统提供了验证码功能,有效防止恶意的自动提交行为。 5. 多平台支持:万能表单系统可以在各种操作系统上运行,包括Windows、Linux和Mac等。它也支持主流的Web服务器,如Apache、Nginx等。 总之,万能表单系统是一款功能强大、易于使用和高度定制的PHP源码。它可以帮助用户快速创建各种类型的表单,简化数据管理工作,并有效提高数据的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值