Thymeleaf提交抽象类型的集合

时间:2018-08-17 11:34:05

标签: java spring thymeleaf abstract-class

上课:

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。

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

2 个答案:

答案 0 :(得分:1)

您需要以某种方式将类型鉴别符从表单传递给控制器​​。使用此信息,“ 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;
  }
}

答案 1 :(得分:0)

根据定义,无法实例化abstract类,这意味着它甚至不能是bean。

  

抽象类是被声明为抽象的类-它可能包含也可能不包含抽象方法。抽象类不能被实例化,但是可以被子类化。

唯一的解决方案是从类定义标头中删除abstract