java - 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。
有没有办法指定实例所属的具体类,以便可以创建正确的实例?
解决方案
您需要以某种方式将类型鉴别器从表单传递给控制器。“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;
}
}
推荐阅读
- android - 在打盹模式下在前台服务中重复任务
- windows-authentication - Bonobo GIT 中的 Windows 身份验证
- json - 如何从 Twig 访问 JSON 标识符?
- javascript - jQuery 从 ajax 函数返回。如何解决?
- haskell - 解释这个haskell函数“要列出的元组列表”
- jstree - 是否可以更改jstree中虚线的颜色
- javascript - 在 android 上安装 manifest.json
- c# - Unity 2D:如何与屏幕侧面碰撞
- coq - 非空有限集中的最小值
- javascript - tinymce 无法在工具栏上显示图标“插入文件”