首页 > 解决方案 > Thymeleaf 提交抽象类型的集合

问题描述

给定一个类:

public class Foo {
    private List<Bar> bars = new ArrayList<>();

    //getter and setter
}

Bar像这样的抽象类型在哪里:

abstract class Bar {
    private TypeEnum type;

    // getters and setters
}

并且给定一个应该提交具体实例的 Thymeleaf 模板(来自包含的自定义片段,具体取决于type枚举值),提交时会收到以下异常

无法实例化[com.example.Bar]:是抽象类吗?嵌套异常是 java.lang.InstantiationException。

有没有办法指定实例所属的具体类,以便可以创建正确的实例?

标签: javaspringthymeleafabstract-class

解决方案


您需要以某种方式将类型鉴别器从表单传递给控制器​​。“disc0=enum&...” 有了这些信息,您可以在“@ModelAttribute”函数的帮助下实例化 Foo 对象,该函数使用参数准备“bars”列表并返回“foo”实例。这将在请求处理程序方法中使用的“@ModelAttribute”参数的实际合并之前发生。

public class MyCtrl {
  @ModelAttribute(„foo“)
  public Foo initFoo(Request or params) {
     return builtFoo;
  }

  @RequestMapping(...)
  public String submit(@ModelAttribute(„foo“) Foo foo) {
    // use the inited and merged foo parameter
    return templateName;
  }
}

推荐阅读