获取Thymelaf${pageContext.request.contextPath}的语法是什么

What is the Syntax to get Thymeleaf ${pageContext.request.contextPath}

本文关键字:语法 是什么 contextPath request Thymelaf pageContext 获取      更新时间:2023-09-26

我已经努力寻找类似JSTL的语法之一${pageContext.request.contextPath}

我确实做了一个javascript代码来更改表单上的action属性,以调用spring控制器上的edit方法,所以问题是,如果不像${pageContext.request.contextPath}/edit.html 那样先调用Context,下面的代码就无法工作

<script th:inline="javascript">
    function edit() {
        document.getElementById("user_form").action = "/edit.html";
    }
</script>

那么,调用Thymelaf上下文路径的语法是什么?

在Thymelaf中,JSP的${pageContext.request.contextPath}/edit.html等效于@{/edit.html}

查看Thymelaf文档的这一部分,了解更多详细信息

在你的情况下,你会写:

<script th:inline="javascript">
    function edit() {
        var link = /*[[@{/edit.html}]]*/ 'test';
        document.getElementById("user_form").action = link;
    }
</script>

Thymelaf使用/*[[-]]*/语法来评估Javascript使用的变量,如果要静态加载,则不会破坏脚本。查看文档的这一部分以了解更多详细信息

Thymelaf和jQuery的解决方案如下。

使用Thymelaf中的${#httpServletRequest.getContextPath((}在元元素中写入上下文路径:

<meta name="_ctx" th:content="${#httpServletRequest.getContextPath()}" />

在jQuery中,使用$.ajaxPrefilter((为所有jQuery AJAX请求准备上下文路径:

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;
    }
});

为了防止其他人在寻找我最初的样子时偶然发现这个问题。。。为Thymelaf页面内的页面根设置上下文路径变量,以结转到外部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,我将脚本设置为两行以上,而不是代码号的同一行。(

试试这个:

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="@{/}"/>