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

Spring MVC下AJAX请求后无法通过Thymeleaf内联读取model中manager数据如何解决

问题根因

  1. Thymeleaf的[[${xxx}]]内联语法仅在服务端渲染页面时执行一次,页面加载完成后JS在浏览器端运行时,该语法已经被替换为页面首次加载时的固定值,不会动态读取后续接口更新的model数据。
  2. 你当前编写的/manager/{id}接口返回的是整个index视图页面,AJAX请求拿到的响应是完整的HTML文档,无法单独获取到manager字段的值。

解决方案

1. 改造后端接口

直接返回manager数据而非视图,新增@ResponseBody注解即可:

@GetMapping(path="/manager/{id}")
@ResponseBody // 标识直接返回数据,不解析为视图路径
public String getManagedEmployees(@PathVariable int id) {
    List<String> employeeNames = employeesServices.findManager(id);
    StringBuffer strBuf = new StringBuffer();
    
    for (String employeeName:employeeNames) {
        System.err.println("manager " +employeeName);
        String newEmployeeName = employeeName.replace(',',' ');
        strBuf.append(newEmployeeName );
    }
    System.err.println("strbuf " + strBuf);
    return strBuf.toString(); // 直接返回manager字符串,无需存入model
}

2. 改造前端AJAX逻辑

不要在success回调中使用[[${manager}]],直接读取接口返回的响应结果即可:

$.ajax({
    url: '/manager/'+ id ,
    type: 'GET',
    success: function(result) {
        console.log('manager retrieve correctly');
        console.log("manager1 " + result);
        // 直接赋值返回结果,原代码的[0]不需要,因为接口返回的是字符串不是数组
        document.getElementById("detailledManagerDataLabelId").value = result;
    },
    error: function() {
       console.log ("manager ajax failed ");
    }
});

3. 定时器逻辑调整

你现有定时器中的[[${manager}]]是页面首次加载的固定值,不会实时更新。如果需要定时拉取最新的manager数据,需要在定时器回调中发起AJAX请求拉取最新数据,不能直接使用Thymeleaf内联语法读取。

内容的提问来源于stack exchange,提问作者kim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:24:03