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

SpringMVC项目中ArrayList遍历后仅最后一个值传递到Thymeleaf问题求助

问题原因

你的Controller中仅向Model传递了单个number变量,循环遍历推荐用户时每次都覆盖同一个Request对象的number属性,最终存入Model的只有最后一次循环的计算结果。前端遍历所有推荐用户时读取的都是同一个全局number值,自然全部显示为最后一次的结果。

修复方案(Map映射方案,改动最小)

1. 修改Controller逻辑

新增Map存储每个用户ID对应的number值,将Map传递到前端即可:

@Controller
public class Controller {
    @Autowired
    private Service service;
    // 补充HttpSession参数,原代码漏了该声明会报错
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Model mdl, Request request, HttpSession session) {
        int SessionId = Integer.parseInt(session.getAttribute("uid").toString());
        List<ProfileDto> Suggestion_list = service.getSuggestedList(SessionId);
        // 新增Map存储用户ID和对应number的映射关系
        Map<Integer, Integer> userNumberMap = new HashMap<>();
        for(ProfileDto Suggestion_id : Suggestion_list)
        {
            List<Request> Friend_request = this.service.getSuggestionButton(SessionId, Suggestion_id.getU_id());
            int number = Friend_request.size() > 0 ? Friend_request.size() : 0;
            userNumberMap.put(Suggestion_id.getU_id(), number);
        }
        // 传递映射Map到前端,原有单个number的传值可以删除
        mdl.addAttribute("userNumberMap", userNumberMap);
        mdl.addAttribute("suggestionList", Suggestion_list);
        return "post";
    }
}

2. 修改Thymeleaf取值逻辑

遍历推荐用户时,用当前用户的ID从Map中取出对应的number值即可:

<div class='follow-unfollow-btn' th:id="'follow-unfollow-button'+${suggetionFriend.u_id}">
    <div th:text="${userNumberMap[suggetionFriend.u_id]}">
    </div>
</div>

可选扩展方案

如果后续需要更多和推荐用户绑定的属性,可以将ProfileDto从接口改为普通Java类,新增number字段及对应的get/set方法,循环时直接给每个ProfileDto实例设置number值,前端直接通过${suggetionFriend.number}取值即可。

内容的提问来源于stack exchange,提问作者Faheem azaz Bhanej

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:57:03