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

时间:2015-07-13 15:33:09

标签: java thymeleaf

出于调试目的,我想列出我的百万美元模板在渲染时可用的所有模型属性。

类似的东西:

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

但显然这是胡说八道,我得到了一个当之无愧的错误。 (org.springframework.expression.spel.SpelParseException: EL1070E:(pos 0): Problem parsing left operand

有没有办法输出这样的调试信息?即使是一些记录输出,我也会满意。

或者,Thymeleaf是否提供类似于Struts 2 struts.devMode的内容,它在页面底部添加了一个列出所有可用属性的调试部分?

4 个答案:

答案 0 :(得分:34)

试试这个:

<table>
    <tr th:each="var : ${#vars}">
        <td th:text="${var.key}"></td>
        <td th:text="${var.value}"></td>
    </tr>
</table>

答案 1 :(得分:16)

接受的答案似乎对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're 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,它使事情变得更漂亮并转储到日志而不是HTML:

@Component
public class ThymeleafDumper {

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

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

    // ... etc
}

formatThisUpNicely可以使用ctx.getVariableNames(),将结果放入SortedMap,导出到json,无论如何。不要忘记那三个'特殊'变量!

然后在@ModelAttributeControllerControllerAdvice中将其实例公开为@ControllerAdvice public class SomeControllerAdvice { @Autowired private ThymeleafDumper thymeleafDumper; @ModelAttribute("dumper") public ThymeleafDumper dumper() { return this.thymeleafDumper; } }

<div th:text="${dumper.dumpToLog(#vars)}"/>

然后在我的模板中运行:

{{1}}

答案 2 :(得分:2)

这些都是可用的日志记录配置:

java -jar <jarname>

这些将记录所有百里香的行动。我希望它有所帮助。

答案 3 :(得分:1)

Thymeleaf 3.0: 简而言之,请尝试以下操作:

<table>
  <tr th:each="var : ${param.keySet()}">
    <td th:text="${var}"></td>
    <td th:text="${param.get(var)}"></td>
  </tr>
</table>

@Controller返回存储在Spring Model中的某个值时,这些值实际上存储为请求参数,可以使用以下命令进行访问: request.getParameter("paramName"); Thymeleaf提供了类似的功能:“用于请求/会话属性的Web上下文名称空间”,语法如上所述。

Thymeleaf内置的${param}关键字返回一个WebRequestParamsVariablesMap extends VariablesMap<String,String[]>对象, 其keySet()方法返回一个String[],其中包含httprequest中的那些变量名。