2015-11-25 2 views
0

Я пытался получить доступ к определенной переменной через javascript для объекта, хранящегося в сеансе. К сожалению, если объект отсутствует, очевидно, что я получаю исключение SpelEvaluation из неизвестного атрибута.Thymeleaf оценивает вложенный атрибут в Javascript

т.д .:

${session.foo} // works 
if(false){ 
    ${session.foo.bar} // does not work, foo is null. Will be evaluated anyway -> exception 
} 

Объект используется глобально в моем проекте, так что ловить исключение в действительности не является жизнеспособным вариантом для меня, так как я должен был бы сделать это на каждом отображении.

Так что я попытался поместить эту часть моего скрипта во внешний .js-файл и включить его через jquery $ .getScript. Но оценка любого кода Thymeleaf в этом файле не выполняется.

Если мой подход правильный/рекомендуется, может ли кто-нибудь дать мне какие-либо намеки на то, как включить выражения Thymeleaf в внешний файл javascript?

Примечание: [[${foo}]] скобки опущены для удобочитаемости.

Заранее спасибо

ответ

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> 
Смежные вопросы