【问题标题】:Thymeleaf decimal formatting options at user generated content用户生成内容的 Thymeleaf 十进制格式选项
【发布时间】:2020-07-28 09:55:12
【问题描述】:

我正在尝试使用百里香叶在后端解析和处理用户生成的内容。 因此,我们做了以下工作:

@RestController
@RequestMapping(path = "/api/v1")
@Slf4j
public class MyController {

  @Autowired
  private TemplateEngine templateEngine;

  ... 
  
  @ApiResponse(code = 200, message = "OK", response = DeliveryDTO.class)
  @PostMapping(path = "/{myId}/serve")
  public DeliveryDTO serve(
        @PathVariable String myId

  ) {
      ... // get myObj;
      html = templateEngine.process(myObj.getHtml(), myObj.getContext());

这真的很好。但是现在我们有了 myObj 的某些部分,它们应该获得默认格式。例如

myObj.getHtml() 可以实现:

<table>
   <tr th:each="item: ${ko}">
       <td>
           <a th:href="@{${URLBuilder.build(item)}}"><span th:text="${item.isin}"></span></a>.     
      </td>
      <td>
           <span th:text="${item.value1}"></span>
      </td>
      <td>
           <span th:text="${item.value2}"></span>
      </td>
   </tr>
</table>

现在我希望将所有出现的“item.value1”格式化为两位小数,将“item.value2”格式化为三位小数。我可以将它添加到 html 模板中,但由于这是某种用户内容,我更愿意遍历所有出现并添加十进制格式选项。 关于如何实现这一点的任何想法?

干杯迈克

【问题讨论】:

  • 可以加控制器吗?
  • 我刚刚更新了问题
  • 目前还不清楚,但据我所知,这与 Thymeleaf 无关。您有两个选择 - 在将值传递给模板之前对其进行格式化,或者使用 JavaScript 对其进行格式化。
  • 数据是持久化在数据库中的,所以我没有可能用JavaScript来做某事。由于模板处理以某种方式查找模板变量的所有出现并对其本身进行格式化,因此必须有某种方法来获取所有变量,而无需手动解析 html。 TemplateEngine 实际上是一个注入的 Thymeleaf 类我应该能够以某种方式操纵这些变量格式
  • 是的,我知道。但是显示部分不是我们完全控制的:) 但与此同时我越来越近了。 Context 是一个 thymeLeaf 上下文。变量似乎在里面。我正在进一步调查。

标签: java spring-boot thymeleaf


【解决方案1】:

您可以在 DTO 中的字段上使用 @NumberFormat 注释。 https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#format-annotations-api

如果不可能,百里香也有一些formatting options

【讨论】:

  • 但是我这里没有 DTO。我只有一个名为“html”的字段,它是一个包含所有 thymeleaf 语法​​的字符串。
  • @EpicMartijn 在他的 Thymeleaf 格式化程序链接中提到的内容似乎与您的问题直接相关。但是当你说“显示部分不是我们完全控制的”时,这是什么意思?这是否意味着您无法编辑您在问题中显示的 Thymeleaf 模板?你不能用这样的东西吗:${#numbers.formatDecimal(item.value1, 3, 2)}?如果不是,那么为什么不在将数据发送到模板之前用 Java 格式化数据呢?这些有帮助吗?
  • 我们将拥有“商业”用户,他们将使用前端。我们可以以某种方式实现一个功能,将其直接添加到编辑器中的模板中,但更好的方法是从后端控制它。然后,业务仅使用简约的 thymeleaf 语法​​编辑模板,这对于业务人员来说不容易理解。所以我们只想跟上后端的变量名和控制。我现在设法使用 thymeleaf 上下文让它工作,并使用 java 代码格式准备那里的变量。不像我希望的那样,但现在还可以:)
  • 并用于JavaScript的控制。当我们输出渲染的模板时,这可能会发生在几个使用我们的 JS 从我们的服务器获取渲染的 html 的网页上。因此,如果一切正常,我们也许最终可以格式化它。但是做这个服务器端是更好的方法,因为我们不仅打算在网页上打印它,而且在应用程序中打印它,然后我们根本无法控制......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 2011-11-09
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多