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
相关产品推荐
相关产品推荐

