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

当未设置模板变量时,我是否可以使用Thymeleaf引发可捕获异常?

邵伟
2023-03-14

我在spring boot中实现了一个模板解析器,它使用thymeleafs TemplateEngine。其思想是用户将模板名称、区域设置和模板中使用的任何变量发送给控制器。变量存储在名为ReplaceToken的对象中,该对象由一个键和一个值组成。然后将它们添加到上下文中,键作为变量名,值作为值。

当变量未设置时,是否有方法抛出/捕获错误?

目前,如果在处理模板时缺少变量,Thymeleaf将简单地使用占位符文本。例如。

<span th:text="${thisVariableDoesntExist}>
Placeholder Text //This will be displayed
</span>

我曾考虑过对整个模板后处理进行解析,以获取我可以预先设置的值,这些值指示占位符值仍在使用,但我更喜欢一种不需要解析已处理模板的解决方案。我也研究过如何使用空值,但我无法找到一个合适的实现,因为我不知道应该设置哪些变量。

共有1个答案

楮乐邦
2023-03-14

我肯定会在控制器上这样做,可能是为每个模板绘制所需变量的静态映射,如果不满足这些条件,则重定向失败。大致如下:

public class RedirectController {

    private static final Map<String, List<String>> REQUIRED_VARIABLES;
    static {
        REQUIRED_VARIABLES = new HashMap<>();
        REQUIRED_VARIABLES.put("template1", new ArrayList<>());
        REQUIRED_VARIABLES.get("template1").add("name");
        REQUIRED_VARIABLES.get("template1").add("surname");
        // ...
    }

    // ...
    public void redirect(String template, List<ReplaceToken> tokens) {
       for (String requiredVariable : REQUIRED_VARIABLES.get(template)) {
         // maybe overriding ReplaceToken.equals() or something
         if (!tokens.contains(requiredVariable)) { 
           throw new WhateverException("!");
         }
       }

       // ...
    }
}

您必须维护REQUIRED_VARIABLES映射,但至少您可以在Controller上执行验证,并避免解析会导致错误的模板。

 类似资料:
  • 问题内容: 试一试无用的东西只是看看此代码是否引发了特定的异常,这是一个好方法吗? 我想在引发异常时做点什么,否则就什么也不做。 有太多的先决条件要测试,构造函数BigDecimal()始终检查所有条件,因此这似乎是最简单的方法。 问题答案: 通常,应避免这种做法。但是,由于没有实用程序方法,所以这是要走的路。 正如Peter Tillemans在评论中指出的那样,将此代码放在称为的实用程序方法中

  • 问题内容: 我一直在阅读JLS,并且遇到了11.1.3节。我引用的异步异常是: 大多数异常是由于它们所发生的线程的操作而同步发生的,并且在程序中被指定为可能导致此类异常的某个点处发生。相反,异步异常是在程序执行的任何时候都可能发生的异常。 和 异步异常仅由于以下原因而发生: […] * Java虚拟机中的内部错误或资源限制,阻止其实现Java编程语言的语义。在这种情况下,引发的异步异常是Virtu

  • 这个问题不是关于Rollbar tho:)

  • 问题内容: 我正在为项目编写自定义日志记录系统。如果一个函数抛出异常,我想记录它的局部变量。是否可以从捕获异常的except块中访问提升函数的局部变量?例如: 问题答案: 如果您知道异常处理代码将需要使用该值,那么通常将其传递给异常是一种更干净的设计。但是,如果要编写调试器或类似的东西,则需要在不事先知道变量的情况下访问变量,则 可以 在引发异常的上下文中访问任意变量: 模块文档中介绍了该功能的功

  • 问题内容: 此问题与跨域资源共享(CORS)有关。 如果在发出CORS请求时出现错误,Chrome(以及AFAIK其他浏览器)会将错误记录到错误控制台。消息示例可能如下所示: XMLHttpRequest无法加载。原产地不被访问控制允许来源允许的。 我想知道是否有办法以编程方式获取此错误消息?我尝试将调用包装在try/catch中,也尝试添加事件处理程序。两者均未收到错误消息。 问题答案: 看到:

  • 问题内容: 加载Angular应用后,我需要一些模板可以脱机使用。 这样的事情将是理想的: 问题答案: 有一个 模板缓存服务 :$ templateCache ,可用于在javascript模块中预加载模板。 例如,取自文档: 甚至还有一个艰巨的任务,可以从html文件中预先生成一个javascript模块:grunt-angular- templates 另一种可能不太灵活的方法是使用 内联模板