Что такое синтаксис для получения Thymeleaf ${pageContext.request.contextPath}
Я сильно искал синтаксис, подобный JSTL one ${pageContext.request.contextPath}
,
Я сделал код javascript, чтобы изменить атрибут действия в форме, чтобы вызвать метод редактирования на контроллере spring, поэтому проблема заключается в том, что ниже код не работает, не вызывая контекст сначала, как ${pageContext.request.contextPath}/edit.html
<script th:inline="javascript">
function edit() {
document.getElementById("user_form").action = "/edit.html";
}
</script>
так что Синтаксис вызывает путь контекста Thymeleaf?
Ответы
Ответ 1
В тимелеафе эквивалент JSP ${pageContext.request.contextPath}/edit.html
был бы @{/edit.html}
Подробнее о этой части документации Thymeleaf для более подробной информации
В вашем случае вы должны написать:
<script th:inline="javascript">
function edit() {
var link = /*[[@{/edit.html}]]*/ 'test';
document.getElementById("user_form").action = link;
}
</script>
Синтаксис /*[[
- ]]*/
используется Thymeleaf для оценки переменных, используемых Javascript, без разбиения script, если он должен быть статически загружен. Подробнее о этой части документации
Ответ 2
Мое решение для Thymeleaf и jQuery ниже.
Используйте ${# httpServletRequest.getContextPath()} в Thymeleaf для записи пути контекста в метаэлементе:
<meta name="ctx" th:content="${#httpServletRequest.getContextPath()}" />
и в jQuery используйте $. ajaxPrefilter(), чтобы добавить путь контекста ко всем запросам AJAX jQuery:
var _ctx = $("meta[name='_ctx']").attr("content");
// Prepend context path to all jQuery AJAX requests
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
if (!options.crossDomain) {
options.url = _ctx + options.url;
}
});
Ответ 3
На всякий случай кто-то другой наткнется на этот вопрос, ища то, что я изначально был... установка переменной контекстного пути для корня страницы на странице Thymeleaf для переноса на внешнюю страницу JQuery. Вот как это сработало для меня... так же, как и выше, просто осталось пустым...
Старый способ с JSP
<script >var contextRoot = "${pageContext.request.contextPath}"; </script>
Новый способ с Тимелеафом
<script th:inline="javascript"> var contextRoot = /*[[@{/}]]*/ ''; </script>
и ссылку с дополнительной информацией...
http://forum.thymeleaf.org/JSESSIONID-in-td3386826.html
(также в зависимости от IDE, я устанавливаю script поверх двух + строк в отличие от той же строки номера кода.)
Ответ 4
Попробуйте следующее:
var BASE_CONTEXT_PATH = $('meta[name=context-path]').attr("content");
BASE_CONTEXT_PATH = BASE_CONTEXT_PATH.substr(0, BASE_CONTEXT_PATH.length - 1);
<meta name="context-path" th:content="@{/}"/>