我一直在努力寻找类似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上下文路径的语法是什么?
答案 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)
在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="@{/}"/>