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

时间:2014-06-16 11:22:33

标签: javascript spring-mvc thymeleaf

我一直在努力寻找类似JSTL ${pageContext.request.contextPath}的语法
我做了一个javascript代码来改变窗体上的action属性来调用spring控制器上的edit方法,所以问题是下面的代码不能在不调用Context的情况下工作,如${pageContext.request.contextPath}/edit.html

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

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

4 个答案:

答案 0 :(得分:39)

在Thymeleaf中,相当于JSP ${pageContext.request.contextPath}/edit.html @{/edit.html}

查看Thymeleaf文档的this部分了解更多详情

在你的情况下,你会写:

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

Thymeleaf使用/*[[ - ]]*/语法来评估Javascript使用的变量,而不会破坏脚本(如果要静态加载)。有关详细信息,请查看文档的this部分

答案 1 :(得分:8)

我的ThymeleafjQuery解决方案如下。

在Thymeleaf中使用${#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;
    }
});

答案 2 :(得分:5)

以防万一其他人偶然发现这个问题,寻找我原来的内容......为Thymeleaf页面内的页面根目录设置一个上下文路径变量,以便转移到外部JQuery页面。以下是它对我有用的方法......就像上面的空白一样...

使用JSP的旧方法

<script >var contextRoot = "${pageContext.request.contextPath}"; </script>

Thymeleaf的新方法

<script th:inline="javascript"> var contextRoot = /*[[@{/}]]*/ ''; </script>

以及包含更多信息的链接...... http://forum.thymeleaf.org/JSESSIONID-in-td3386826.html

(也取决于IDE,我将脚本设置为两行+而不是代码编号的相同行。)

答案 3 :(得分:1)

试试这个:

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