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

列出 Thymeleaf 中所有可用的模型属性

庞元青
2023-03-14

出于调试目的,我想列出我的thymeleaf模板渲染时可用的所有模型属性。

像这样:

<table>
    <tr th:each="model : ${*}">
        <td th:text="${model}"></td>
    </tr>
</table>

但显然这是无稽之谈,我得到了一个当之无愧的错误。(org.springframework.expression.spel.SpelParseException: EL1070E:(pos 0): problem analysising left operand

有没有办法输出这样的调试信息?我甚至会满足于一些日志记录输出。

或者,Thymeleaf是否提供了类似于Struts 2的<code>Struts的功能。devMode在页面底部添加了一个调试部分,列出了所有可用的属性?

共有3个答案

曹波鸿
2023-03-14

这些是所有日志记录可用配置:

log4j.logger.org.thymeleaf=DEBUG
log4j.logger.org.thymeleaf.TemplateEngine.CONFIG=DEBUG
log4j.logger.org.thymeleaf.TemplateEngine.TIMER=DEBUG
log4j.logger.org.thymeleaf.TemplateEngine.cache.TEMPLATE_CACHE=DEBUG
log4j.logger.org.thymeleaf.TemplateEngine.cache.FRAGMENT_CACHE=DEBUG
log4j.logger.org.thymeleaf.TemplateEngine.cache.MESSAGE_CACHE=DEBUG
log4j.logger.org.thymeleaf.TemplateEngine.cache.EXPRESSION_CACHE=DEBUG

这些将记录所有thymeleaf操作。我希望这是有帮助的。

邓鸿雪
2023-03-14

公认的答案似乎不适用于Thymeleaf 3;这里有一个更新。请注意,我使用的是Spring;这可能不适用于非Spring应用程序。

<table>
    <tr th:each="var : ${#vars.getVariableNames()}">
        <td th:text="${var}"></td>
        <td th:text="${#vars.getVariable(var)}"></td>
    </tr>
    <!-- 
        Adding these manually because they are considered special.
        see https://github.com/thymeleaf/thymeleaf/blob/thymeleaf-3.0.3.RELEASE/src/main/java/org/thymeleaf/context/WebEngineContext.java#L199
    -->
    <tr>
        <td>param</td>
        <td th:text="${#vars.getVariable('param')}"></td>
    </tr>
    <tr>
        <td>session</td>
        <td th:text="${#vars.getVariable('session')}"></td>
    </tr>
    <tr>
        <td>application</td>
        <td th:text="${#vars.getVariable('application')}"></td>
    </tr>
</table>

也就是说,我所做的是创建一个独立的Bean,它使事情变得更漂亮,并转储到日志而不是超文本标记语言:

@Component
public class ThymeleafDumper {

    private Logger log = LoggerFactory.getLogger(ThymeleafDumper.class);

    public void dumpToLog(WebEngineContext ctx) {
        log.debug("Thymeleaf context: {}", formatThisUpNicely(ctx));
    }

    // ... etc
}

其中< code > formathisupnicely 可以使用< code > CTX . getvariablenames(),将结果放入< code>SortedMap,导出到< code>json,等等。不要忘记这三个“特殊”变量!

然后将其实例公开为ControllerControlller建议中的@ModelAtoun

@ControllerAdvice
public class SomeControllerAdvice {

    @Autowired
    private ThymeleafDumper thymeleafDumper;

    @ModelAttribute("dumper")
    public ThymeleafDumper dumper() {
        return this.thymeleafDumper;
    }
}

然后在我的模板中运行:

<div th:text="${dumper.dumpToLog(#vars)}"/>
丌官嘉福
2023-03-14

试试这个:

<table>
    <tr th:each="var : ${#vars}">
        <td th:text="${var.key}"></td>
        <td th:text="${var.value}"></td>
    </tr>
</table>
 类似资料:
  • 问题内容: 为了进行调试,我想列出百里香模板渲染时可用的 所有 模型属性。 就像是: 但这显然是胡说八道,而且我得到了当之无愧的错误。() 有没有一种输出这种调试信息的方法?我什至愿意为一些日志输出。 或者,Thymeleaf是否提供与Struts 2类似的功能,即它在页面底部添加了列出所有可用属性的调试部分? 问题答案: 试试这个:

  • 问题内容: 我以这种格式定义了一个.py文件: foo.py 我从另一个文件导入它: main.py 是否可以列出所有功能名称,例如? 感谢您的帮助,我为我想要的课程做了一堂课,如果有建议请发表评论 问题答案: 做这些事情的最干净的方法是使用检查模块。它具有将谓词作为第二个参数的函数。您可以用作谓词。 现在,将是一个元组列表,其中第一个元素是函数的名称,第二个元素是函数本身。

  • 我犯了一个让我发疯的奇怪错误。我有一个控制器,它有两个不同的Get方法,用于两个不同的url映射。URL1工作得非常好,我明白URL2的作用 [THYMELEAF][http-nio-8080-exec-3]异常处理模板“QuestionnaReform”:处理器组织执行期间出错。百里香。标准加工机attr。java导致的StandardEachAttrProcessor(问题:10)。lang.

  • 问题内容: 我正在使用ResourceBundle,我想给用户一个选择GUI语言的选项。 我想获取特定程序包下所有资源文件的列表。 我不知道我将拥有什么资源,因为此应用程序基于插件。 是否有一个选项可以要求Java搜索程序包下的所有可用资源? (如果没有,我猜该插件应该为它提供所有可用的本地文件) 谢谢你们 问题答案: 这些文件可以驻留在Web服务器上。没有标准的方式列出Web服务器上的文件(页面

  • 有没有一种方法可以在Laravel中检索具有所有属性的模型,即使这些属性为空?它似乎只返回属性不为null的模型。 原因是我有一个函数,如果模型中存在属性,它将从数组中更新模型属性。在设置模型之前,我使用property_exists()函数检查模型是否具有特定属性。数组键和模型属性应该匹配,所以它就是这样工作的。 如果模型已经设置了属性,它可以正常工作,因为属性存在并从数组中获取值。但是,如果属

  • 我正在用Spring MVC和Thymeleaf在视图层开发一个完整的Spring应用程序。过去,我在视图层中使用过JSP和Spring MVC,但我想它们现在是恐龙了 所以我的问题是,使用JSP,通过在模型中添加值,我可以很容易地在视图中显示模型属性。在控制器中添加属性,并在JSP anywhere中显示相同的属性,占位符求值为springex${value}。所以,如果我想在页面中放置标题,我