当前位置: 首页 > 知识库问答 >
问题:

访问百里香模板中的变量,并将其原封不动地发送回控制器

邹弘
2023-03-14

我有Spring MVC Web应用程序,在前端使用Thymeleaf。我可以将数据从控制器(作为属性添加到模型中)发送到Thymeleaf并在此处显示它们。现在我想将这些数据保存到数据库中。但我的问题是:如何将相同的物体从百里香虫发送回控制器?

在这里,我将属性添加到控制器中的模型中:

@GetMapping("/find")
    public String company(@RequestParam("companyId") String companyID, Model model) {

        Company company = dataService.find(companyID);      

        model.addAttribute("company", company);


        return "company-find";
    }

在Thymeleaf中,我可以毫无问题地访问公司名称(th: text="${company.name}")等公司信息。但是我如何轻松地将同一家公司发送到控制器中?尝试一下,但它不起作用:

 <form action="#" th:action="@{/companyadd}"  method="POST" th:object="${company}">
        <button type="submit" class="btn btn-info btn-sm ">Add company to database</button>
    </form>

编辑

在我的控制器中,我有来自Thymeleaf公司的这个映射。但是在这种方法中,公司是空的:(

@PostMapping("/companyadd")
    public String companyAdd(@ModelAttribute("company") Company company) {
        
        dataService.add(company);

        return "company-add";
    }

编辑2

我需要用属性填充模型。我可以这样做,但是如果属性不是字符串,我就会遇到麻烦。这个集合的两个属性是List,但我不知道如何将它们插入到模型中:/。下面的代码有效(atributes是字符串),但我也需要在那里插入一个集合。

<form action="#" th:action="@{/addcompany}"  method="POST" th:object="${company}">
        <input type="hidden" th:field="*{name}">
        <input type="hidden" th:field="*{address}">
        <input type="hidden" th:field="*{capital}">
        <button type="submit" class="btn btn-info btn-sm ">Add company to database</button>
    </form>

共有3个答案

米浩穰
2023-03-14

您可以向控制器添加一个POSTendpoint,如下所示:

    @PostMapping("/companyadd")
    public ResponseEntity<?> addCompany(@RequestBody Company company) {
        dataService.save(company);
        return ResponseEntity.ok().build();
    }
山森
2023-03-14

对于只想复制到新对象的字段,可以使用隐藏字段。例如:

<form action="#" th:action="@{/companyadd}"  method="POST" th:object="${company}">
    <input type="hidden" th:field="*{id}" />
    <button type="submit" class="btn btn-info btn-sm ">Add company to database</button>
</form>

然后“company.id”将从GET处理程序中发送的公司对象复制到POST处理程序中接收的公司对象。这应该足以保存更改或查找其余字段。

但请注意:任何用户都可以通过编辑超文本标记语言轻松更改隐藏字段中的内容。因此,不要仅仅因为信息来自隐藏字段就认为信息是正确或值得信赖的。在本例中,您应该在保存之前仔细检查以确保用户确实可以访问该ID。

傅正阳
2023-03-14

在您的表单中,您必须添加与您的对象公司相对应的属性。< code > th:object = " $ { company } " 只是声明用于收集表单数据的模型对象。

在这里,您可以找到示例:https://spring.io/guides/gs/handling-form-submission/

 类似资料:
  • 简而言之:我想使用Thymeleaf模板索引。html,但url指向Thank.html。 深入地说:我试图让一个表单提交将我的用户带到一个页面http://localhost:8080/thanks . html。由于一些不同的原因,我不希望表单的动作成为thanks.html,但是我已经大大简化了下面的逻辑。当表单的所有验证都通过后,我想传入一个变量来指示使用哪个布局。我通过使用一个名为con

  • 我想在胸腺方言中使用胸腺方言,但不能。我尝试过这个,但效果不佳: of删除里面的所有内容。我想在渲染后得到这样的东西: 那么,我该如何实现我的目标呢?

  • 如何在百里叶中使用另一个变量来声明一个变量?这就是我想做的: 但是编译器不喜欢 : EL1041E:(pos 1):解析有效表达式后,表达式中还有更多数据:“lcurly({)” (组织.thymeleaf.exceptions.template处理异常: 异常计算 SpringEL 表达式: “${ccc} == null ? '' : ${ccc}” (自定义:24))

  • 问题内容: 我正在使用Flask 0.7版。我已经将静态内容的路径存储在配置文件中,并使用 我可以在不通过变量的情况下访问模板中的此配置变量吗? 问题答案: flask默认情况下会在模板上下文中传递一些全局变量(这是完整列表),其中之一是,允许你从模板访问应用程序配置。作为字典,可以使用或(该语法用于访问字典项的语法特定于Jinja)进行访问。

  • 问题内容: 如何在不进行迭代的情况下使用变量键来查找映射的值? 因此,可以使用来在变量映射$ x上查找常量键,但是可以这样做吗? 问题答案: 您可以使用以下功能: 从http://golang.org/pkg/text/template/:

  • 是否可以访问模板中的设置变量? 设置: 如何使用,而不在模板中重用,以避免重复的代码,尤其是在其层次结构较深的情况下?