我一直在尝试通过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
}
括号。
提前致谢
答案 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>