gpt4 book ai didi

java - Spring 中的嵌套 Thymeleaf 模板

转载 作者:行者123 更新时间:2023-11-30 08:07:57 24 4
gpt4 key购买 nike

简短版本

使用 Spring 时,如何在 Thymeleaf 中制作嵌套模板?出现asterisk notation is not supported ("*{mailingAddress}") 在 Spring 的 th:object 属性内。是否有解决方法/使用不同的标签?

长版

例如,假设我有这些类(class):

class Address { String street; }
class Person { Address mailingAddress; Address shippingAddress; }
class Order { int orderNo; Person customer; }

所以我制作了一个 address.html Thymeleaf 模板:

<span th:text="*{street}"></span>

我们使用示例地址对其进行测试。看起来不错。

我制作了一个 person.html Thymeleaf 模板来引用地址,如下所示:

<span th:text="*{firstName}"></span>
<span th:object="${person.shippingAddress}">
<span th:include="fragments/address :: address"></span>
</span>

我们用一个例子来测试它。我什至可以引用相同的模板并将上下文设置为 ${person.mailingAddress}。到目前为止一切顺利。

现在让我们制作 Order 模板。只是,嘿,等等。早些时候,在我们的 person.html 文件中,我们说过 ${person.shippingAddress}现在我们需要它说 ${order .customer.shippingAddress}If I were not using Spring我将以下内容放入 person.html 中:

<span th:text="*{firstName}"></span>
<span th:object="*{shippingAddress}">
<span th:include="fragments/address :: address"></span>
</span>

这样,无论我通过什么途径到达这里,我所需要关心的是我当前的上下文有一个 shippingAddress。然后,我可以直接使用 person.html 以及在我的 order.html 模板中使用。

不幸的是,我 Spring ,所以我得到以下异常:

org.thymeleaf.exceptions.TemplateProcessingException: 
The expression used for object selection is *{shippingAddress},
which is not valid: only variable expressions (${...}) are
allowed in 'th:object' attributes in Spring-enabled environments.
(include:510)
at org.thymeleaf.spring4.processor.attr.SpringObjectAttrProcessor.validateSelectionValue(SpringObjectAttrProcessor.java:73)
at org.thymeleaf.standard.processor.attr.AbstractStandardSelectionAttrProcessor.getNewSelectionTarget(AbstractStandardSelectionAttrProcessor.java:69)
at org.thymeleaf.processor.attr.AbstractSelectionTargetAttrProcessor.processAttribute(AbstractSelectionTargetAttrProcessor.java:61)

为了继续前进,我必须复制所有嵌套模板。在此示例中,我将有一个 person.html ,其中 th:object="${person.mailingAddress}" 调用 address.html ,以及名为 orderCustomer.htmlperson.html 副本,我们将行更改为 th:object="${order.customer.mailingAddress}",但其他方面相同。

有没有一种解决方法可以让我重复使用模板?

最佳答案

您可以在 github 中向 thymeleaf 开发人员报告错误,或者 fork 该项目以添加此功能并说服 Daniel Fernández 接受它。

https://github.com/thymeleaf/thymeleaf/issues

否则,他可以在 StackOverflow 中找到。您只需向他发送一条有关集成此功能的可能性的消息

https://stackoverflow.com/users/550664/daniel-fern%C3%A1ndez

除此之外,我们无能为力,只能坚持使用 th:object="${person.mailingAddress}"th:object="$ 的方法{order.customer.mailingAddress}" 在每次导入之外。

关于java - Spring 中的嵌套 Thymeleaf 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30825554/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com