我的Thymeleaf模板中有这段代码,效果很好
var ajaxUrl = /*[[@{/api/users/{user}/menus/vegan/datatableList(user=${#authentication.principal.id})}]]*/ ""
var table = $('#menuTable').DataTable( {
order: [[ 0, "desc" ]],
select: true,
bLengthChange: false,
stateSave: true,
pageLength: 20,
ajax: ajaxUrl,
"columns": [
{ data: 'id' },
{ data: 'desc' }
]
});
我进行了更改,现在我在控制器中定义URL如下:
model.addAttribute("ajaxUrl", "/api/users/{user}/menus/vegan/datatableList(user=${#authentication.principal.id})");
以及Thymeleaf模板中的此代码,但该页面无法正常工作
var ajaxUrl = /*[[@{ajaxUrl)}]]*/ ""
答案 0 :(得分:0)
当然,它不再起作用了。这个:
@{/api/users/{user}/menus/vegan/datatableList(user=${#authentication.principal.id})}
是百里香叶的表达,由百里香叶解析。
第二次尝试@{ajaxUrl}
甚至没有使用变量时,它只是解析为URL href="ajaxUrl"
。使用@{${ajaxUrl}}
可以使您更加接近,但是即使那样做也无法完全满足您的要求。您可以从控制器提供ajax变量的最接近方法是:
// Controller
model.addAttribute("ajaxUrl", "/api/users/{user}/menus/vegan/datatableList");
// JavaScript
var ajaxUrl = /*[[@{${ajaxUrl}(user=${#authentication.principal.id})}]]*/ "";
如果要传递整个URL,则必须自己计算用户ID。例如:
// Controller
String user = "1"; // You need to supply the user id here. (However you get that in java.)
model.addAttribute("ajaxUrl", "/api/users/" + user + "/menus/vegan/datatableList");
// JavaScript
var ajaxUrl = /*[[@{${ajaxUrl}}]]*/ "";