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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (172)

我努力地寻找像JSTLOne这样的语法。${pageContext.request.contextPath}

我确实做了一个javascript代码来更改表单上的action属性,以调用Spring控制器上的编辑方法,因此,问题是下面的代码在不首先调用上下文的情况下不工作,如下所示${pageContext.request.contextPath}/edit.html

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

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

提问于
用户回答回答于

在Thymeleaf中,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使用的变量,而不会破坏脚本如果要静态加载的地方。查看部分文档以获取更多详细信息

用户回答回答于

我的解决方案蒂梅莱夫(Thymeleaf)jQuery在下面。

使用${#httpServletRequest.getContextPath()}在Thymeleaf中,在meta元素中写入上下文路径:

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

在jQuery中,使用$.ajaxPrefilter()要为所有jQueryAjax请求提供上下文路径,请执行以下操作:

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

扫码关注云+社区