java - Thymeleaf 提交抽象类型的集合

标签 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 枚举值包含自定义片段),提交时会收到以下异常

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/

相关文章:

java - Spring + thymeleaf : time in user's timezone

java - 如何使用 thymeleaf 格式化 HTML 中的数字字符串

java - 如何在 AsyncTask 中使用 Runnable.wait()?为什么 AsyncTask 不等待...?

java - 使用 Dropwizard 和 JDBI 查询具有多个模式的数据库?

java - 按下并释放按钮时播放和停止音乐

java - 在类上创建注释,以使用Kotlin/Java验证两个日期

java - Spring 启动: How to convert thymeleaf to jsp

java - 当我开始输入 JTextField 文本时必须清除它

spring - Spring Data Elasticsearch查询合并

java - Spring/Hibernate : spring.实体。下载无法转换为java.lang.Integer