You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thymeleaf模板中路径跳转丢失应用上下文的问题求助

解决Thymeleaf中JS跳转丢失应用上下文的问题

别担心,这个问题很常见,我帮你捋清楚怎么搞定它!

你遇到的核心问题是:直接写硬编码的路径/deviceDriver/updateauthorizeddriver/不会带上应用上下文(也就是你的driversApp),而你尝试用Thymeleaf的@{...}语法时,表达式写错了,导致没生效。

下面给你几种靠谱的解决方案:

方案一:先渲染基础路径,再拼接参数

先让Thymeleaf帮你生成带应用上下文的基础URL,之后再用JS拼接上选中的ID参数:

// 让Thymeleaf提前渲染出带上下文的基础路径
var baseUrl = /*[[@{/deviceDriver/updateauthorizeddriver/}]]*/ "";

$('#selectAuthorizedDriverId').change( function() { 
    var link = baseUrl + $(this).val(); 
    $(location).attr('href', link); 
});

Thymeleaf会把@{/deviceDriver/updateauthorizeddriver/}替换成完整的带上下文路径,比如/driversApp/deviceDriver/updateauthorizeddriver/,之后加上选中的ID,就能得到正确的跳转链接了。

方案二:在Thymeleaf表达式中直接拼接参数

如果你想一步到位生成完整URL,可以用Thymeleaf的占位符语法,同时把JS变量传入表达式:

$('#selectAuthorizedDriverId').change( function() { 
    var driverId = $(this).val();
    // 用双重包裹的方式把JS变量传给Thymeleaf表达式
    var link = /*[[@{/deviceDriver/updateauthorizeddriver/{id}(id=${__${driverId}__})}]]*/ "";
    $(location).attr('href', link); 
});

这里的${__${driverId}__}是Thymeleaf引用JS变量的特殊写法,它能把JS里的driverId值代入到URL的{id}占位符中,直接生成带上下文和参数的完整链接。

方案三:用HTML data属性分离逻辑

这种方式更清晰,把Thymeleaf的路径渲染放在HTML元素的data属性里,JS只负责读取和拼接:

<!-- 在select标签里添加data-url属性,让Thymeleaf渲染路径 -->
<select id="selectAuthorizedDriverId" data-url="[[@{/deviceDriver/updateauthorizeddriver/}]]">
    <!-- 你的下拉选项 -->
</select>

然后JS里这样写:

$('#selectAuthorizedDriverId').change( function() { 
    var baseUrl = $(this).data('url');
    var link = baseUrl + $(this).val(); 
    $(location).attr('href', link); 
});

这种方式把模板渲染和JS逻辑分开,代码可读性更高,也更容易维护。

你之前尝试的写法出错,主要是Thymeleaf表达式的语法写错了(少了开头的{),用上面任意一种方案都能解决404的问题~

内容的提问来源于stack exchange,提问作者Nunyet Calçada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:50:37