Thymeleaf:在控制器中为数据表定义URL

时间:2018-06-23 08:03:51

标签: javascript html5 datatables thymeleaf

我的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)}]]*/ ""

1 个答案:

答案 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}}]]*/ "";