Что такое синтаксис для получения 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="@{/}"/>