Thymeleaf在Javascript中评估嵌套属性

时间:2015-11-25 20:28:32

标签: javascript jquery spring thymeleaf

我一直在尝试通过javascript访问存储在会话中的对象的某个变量。不幸的是,如果对象不存在,显然我会在未知属性上获得SpelEvaluation异常。

例如:

T

该对象在我的项目中全局使用,因此捕获Exception对我来说并不是一个可行的选择,因为我必须在每个映射上执行此操作。

所以我尝试将我的脚本部分放在外部.js文件中并通过jquery $ .getScript包含它。但是对此文件中任何Thymeleaf代码的评估都失败了。

如果我的方法是正确的/推荐的,有人可以给我任何关于如何在外部javascript文件中包含Thymeleaf表达式的提示吗?

注意:为了便于阅读,省略了${session.foo} // works if(false){ ${session.foo.bar} // does not work, foo is null. Will be evaluated anyway -> exception } 括号。

提前致谢

1 个答案:

答案 0 :(得分:1)

在这个特定问题上没有找到任何内容,所以我改为做了。

我的布局装饰器现在包含一个片段,如果基本变量(例如$ {foo})存在则执行条件检查,然后相应地包含子页面。

示例代码:

layoutDecorator.html:

<div layout:fragment="test" th:include="testIncluder:: testFragment">
        My Window here.
</div>

testIncluder.html:

<th:block th:switch="${foo}">
    <th:block th:case="null">
         <!-- safe include here -->
         <th:block th:include="safeInclude :: safeFragment"/>
    </th:block>
    <th:block th:case="!null">
         <!-- unsafe include here -->
         <th:block th:include="barInclude :: barFragment"/>
    </th:block>
</th:block>

barInclude.html:

<p th:text="${foo.bar}"></p>
<script th:inline="javascript">
/*<![CDATA[*/
    ...

    var bar = [[${foo.bar}]];

    ...
/*]]>*/
</script>