Skip to content

OnChange 字段联动 1.13.2+

根据用户在表单中的输入实时联动其他字段:既可以修改其他字段的值,也可以动态调整其他字段的 @Edit 注解配置(如标题、描述、必填等)。

基础用法

在字段的 @Edit 注解中通过 onchange 属性绑定处理类:

java
@Erupt(name = "DEMO")
@Table(name = "t_demo")
@Entity
@Getter
@Setter
public class Demo extends BaseModel {

    @EruptField(
        views = @View(title = "Text"),
        edit = @Edit(title = "Text", onchange = DemoInputChange.class)
    )
    private String input;

    @EruptField(
        views = @View(title = "Text 2"),
        edit = @Edit(title = "Text 2", readonly = @Readonly)
    )
    private String input2;

}
java
public class DemoInputChange implements OnChange<Demo> {

    // 通过表单 A 的变化,动态修改表单 B 的值
    @Override
    public Map<String, Object> populateForm(Demo demo, String[] params) {
        Map<String, Object> map = new HashedMap<>();
        map.put(LambdaSee.field(Demo::getInput2), demo.getInput());
        return map;
    }

    // 通过表单 A 的变化,动态修改表单 B 的注解配置
    @Override
    public Map<String, String> buildEditExpr(Demo demo, String[] params) {
        return Map.of(LambdaSee.field(Demo::getInput2),
                "edit.title = '" + demo.getInput() + "';" +
                    "edit.desc = '" + demo.getInput() + "';");
    }
}

OnChange 接口定义

java
public interface OnChange<MODEL> {

    // 根据用户输入联动其他表单,Key 表单字段名
    Map<String, Object> populateForm(MODEL model, String[] params);

    // 根据用户输入动态调整不同的字段的 @Edit 注解配置,可用变量:edit,语法 JS
    Map<String, String> buildEditExpr(MODEL model, String[] params);

}

相关能力

贡献者

The avatar of contributor named as YuePeng YuePeng
The avatar of contributor named as Claude Opus 5 (1M context) Claude Opus 5 (1M context)

页面历史

Released under the Apache-2.0 License.