Зачем повторять последние данные из ArrayList?

#spring-boot

Вопрос:

Я отлично получаю данные из базы данных и передаю их в Thymeleaf(шаблон), но проблема заключается mdl.addAttribute("number" ,request.getNumber()) в том, что контроллер обнаруживает последнее значение из foreach итерации цикла и отправляет по модели

Вот мой код:

Dto

 public interface ProfileDto {
    public Integer getU_id();
    public Integer getP_id();
    public String getEmail();
    public String getUsername();
    public String getPassword();
    public String getContact();
    public String getDate();
    public String getProfile();
    public String getWebsite();
    public String getBio();
    public String getGender();
    public String getPost();
}

 

Сущность

 @Entity
@Table(name = "request_master")
public class Request {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int req_id;
    private int sender_id;
    private int receiver_id;
    private String status;
    private String date;
    @Transient
    private int number;
    // getter setter

}
 

Хранилище

 public interface profileRepo extends JpaRepository<Request, Integer> {
    @Query(nativeQuery = true, value = "SELECT * FROM registration_master rm INNER JOIN profile_master pm ON rm.u_id = pm.user_id WHERE rm.u_id != ?")
    List<ProfileDto> findByIdUser(Integer Id);

public interface requestRepo extends JpaRepository<Request, Integer> {
    @Query(nativeQuery = true,  value="SELECT * FROM request_master WHERE sender_id = ? and receiver_id = ?")
    List<Request> getSuggetionButton(Integer Sender_id, Integer Receiver_id);
}
 

Обслуживание

 @Service
public class ServiceImpl implements Service {
    @Autowired
    private profileRepo profileRepo;

    @Autowired
    private requestRepo requestRepo;

    @Override
    public List<ProfileDto> getSuggestedList(Integer Id) {
        return this.profileRepo.findByIdUser(Id);
    }

    @Override
    public List<Request> getSuggestionButton(Integer Sender_id, Integer Receiver_id) {
        return this.requestRepo.getSuggetionButton(Sender_id, Receiver_id);
    }

}
 

Controller

 @Controller
public class Controller {
    @Autowired
    private Service service;
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Model mdl, Request request) {
        int SessionId = Integer.parseInt(session.getAttribute("uid").toString());
        List<ProfileDto> Suggestion_list = service.getSuggestedList(SessionId);
        for(ProfileDto Suggestion_id : Suggestion_list)
        {
            List<Request> Friend_request = this.service.getSuggestionButton(SessionId, Suggestion_id.getU_id());
            if(Friend_request.size() > 0)
            {
                request.setNumber(Friend_request.size());
            }
            else
            {
                request.setNumber(0);
            }
        }
        mdl.addAttribute("number" ,request.getNumber());
        mdl.addAttribute("suggestionList", Suggestion_list);
        return "post";
        
    }
}
 

Тимелиф

 <div class="follow-user-list" th:each="suggetionFriend : ${suggestionList}">
    <div class="follow-user clearfix" th:id="'follow-user' ${suggetionFriend.u_id}">
        <img th:src="${suggetionFriend.profile}" alt="" class="profile-photo-sm pull-left" />
        <div class="name clearfix">
            <h5>
                <a href="#" class="follow-name" th:text="${suggetionFriend.username}"></a>
            </h5>
            <div class='follow-unfollow-btn' th:id="'follow-unfollow-button' ${suggetionFriend.u_id}">
                <div th:text="${number}">
                                
                </div>
            </div>
        </div>
    </div>
</div>
 

на приведенном ниже изображении 1 указано условие совпадения и поиска данных, а 0 также условие не совпадения и не поиска данных

В моих выходных данных я могу получить только данные последней итерации в обоих пользователях

Выход:

введите описание изображения здесь

Ожидаемый результат:

введите описание изображения здесь

Я думаю, что проблема заключается в передаче данных с контроллера на thymeleaf

Если у вас есть хорошая идея перевести стоимость с Controller Template , скажите мне, пожалуйста

Комментарии:

1. В вашей модели у вас есть один атрибут под названием «число», который вы перезаписываете в цикле… вместо этого вы должны добавить его в свой profileJoinDto (или создать новый DTO, содержащий его).

2. Кстати: Я бы предложил вам ознакомиться с соглашениями о коде Java (например, типы всегда должны начинаться с прописной буквы). В настоящее время читать ваш код довольно громоздко…

Ответ №1:

Вы должны поддерживать request для каждого профиля/пользователя вместо одного request , я имею в виду , что у вас должно быть количество request для каждого profileId/userId , вы можете поддерживать карту profileId/userId и количество request для этого профиля/пользователя и использовать эту карту в своем template , попробуйте изменить свой код, как показано ниже

Контроллер

 @Controller
public class Controller {
    @Autowired
    private Service service;
    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String home(Model mdl, Request request) {
        Map<Integer, Integer> profileToNoOfRequestMap = new HashMap<>();
        int SessionId = Integer.parseInt(session.getAttribute("uid").toString());
        List<ProfileDto> Suggestion_list = service.getSuggestedList(SessionId);
        for(ProfileDto Suggestion_id : Suggestion_list)
        {
            List<Request> Friend_request = this.service.getSuggestionButton(SessionId, Suggestion_id.getU_id());

            profileToNoOfRequestMap.put(Suggestion_id.getU_id(), Friend_request.size());
        }
        mdl.addAttribute("profileToNoOfRequestMap", profileToNoOfRequestMap);
        mdl.addAttribute("suggestionList", Suggestion_list);
        return "post";
        
    }
}
 

Тимелиф

 <div class="follow-user-list" th:each="suggetionFriend : ${suggestionList}">
    <div class="follow-user clearfix" th:id="'follow-user' ${suggetionFriend.u_id}">
        <img th:src="${suggetionFriend.profile}" alt="" class="profile-photo-sm pull-left" />
        <div class="name clearfix">
            <h5>
                <a href="#" class="follow-name" th:text="${suggetionFriend.username}"></a>
            </h5>
            <div class='follow-unfollow-btn' th:id="'follow-unfollow-button' ${suggetionFriend.u_id}">
                <div th:text="${profileToNoOfRequestMap.get(suggetionFriend.u_id)}">
                                
                </div>
            </div>
        </div>
    </div>
</div>