给定一个类:
public class Foo {
private List<Bar> bars = new ArrayList<>();
//getter and setter
}
其中 Bar
是一个抽象类型,如下所示:
abstract class Bar {
private TypeEnum type;
// getters and setters
}
给定一个 Thymeleaf 模板,该模板应该提交具体实例(根据 type
枚举值包含自定义片段),提交时会收到以下异常
Failed to instantiate [com.example.Bar]: Is it an abstract class?; nested exception is java.lang.InstantiationException.
有没有办法指定实例所属的具体类,以便创建正确的实例?
最佳答案
您需要以某种方式将类型鉴别器从表单传递到 Controller 。 “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;
}
}
关于java - Thymeleaf 提交抽象类型的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51894544/