【问题标题】:Create a fragment for a form in Thymeleaf (and spring)在 Thymeleaf(和 spring)中为表单创建一个片段
【发布时间】:2020-07-02 10:47:11
【问题描述】:

首先,我用 Thymeleaf 创建了一个简单的 HTML 表单,一切都很好。然后转到第 2 步,我将表单重新定位到一个片段。我这样称呼片段:

<div th:insert="~{address::form($(address)}"></div>

片段(在address.html中)是这样的:

<form th:fragment="form(address)" action="#" th:action="@{/address}" th:object="${address}" method="post">
   
<label>Street<label><span><input type="text" th:field="*{street}"></span>
<label>County:</label>
  <span>
    <select  th:field="*{county}">
            <option th:each="s : ${countyList}" th:value="${s.value}" th:text="${s.text}"></option>
    </select>
  </span>
...

但这不起作用,它正在抛出: java.lang.IllegalStateException: Bean 名称“street”的 BindingResult 和普通目标对象都不能用作请求属性

请帮助如何将整个表单移动到 Thymeleaf 片段中?还请添加组合的想法,以便我可以从模型 bean 中获取它们的列表。谢谢!

PS 控制器现在看起来像这样(添加和编辑),但可以改为使其成为 1 个功能:

    @GetMapping(value="/address")
    public String newAddress(AddressModel address, Model model) {
        model.addAttribute("address", address);
        model.addAttribute("countyList", countyService.listCombo());      
        ...
        return "index";
    }

    @GetMapping(value="/address/{id}")
    public String editAddress(Model model, @PathVariable("id") Long id) {
        AddressModel address = addressService.load(id);
        model.addAttribute("address", address);
        model.addAttribute("countyList", countyService.listCombo());
        ...
        return "index";
    }

【问题讨论】:

  • 能否也请添加控制器?看起来您没有满足片段所具有的所有依赖项。

标签: spring spring-boot thymeleaf


【解决方案1】:

在我的情况下,问题来自一个意想不到的方向。我已将 2 个片段 address::form (用于创建表单)和 address::list (用于显示地址列表)放在同一个文件中,不知何故,由于某些未知的原因,这两个片段在同一个文件。并且该错误不是很有帮助。但是只要我把它们放在像这样的 2 个单独的文件中:addressForm::form 和 addressList::list 一切都很好。有趣的是,如果我将片段保存在同一个文件中但交换它们的定义顺序,我可以正确呈现页面,但我仍然在日志中收到错误。奇怪的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-02
    • 2018-07-24
    • 2015-10-08
    • 1970-01-01
    • 2014-01-25
    • 2016-04-22
    • 2019-09-02
    • 2017-09-03
    相关资源
    最近更新 更多