2017-02-13 45 views
0

我設置了以下ControllerAdvice以檢查在任何給定時間屬於某個用戶的「Request」對象的當前數量。不止一次更新ControllerAdvice屬性

@ControllerAdvice 
public class ApplicationAdvice { 

    private static final Logger log = LoggerFactory.getLogger(ApplicationAdvice.class); 

    @Autowired 
    UsersRepository usersRepository; 

    @Autowired 
    RequestRepository requestRepository; 

    @ModelAttribute("numRequests") 
    public int numRequests(Principal principal, Model model) { 
     Users user = usersRepository.findOneByInitialName(principal.getName()); 
     if (user != null) { 
      log.info(user.getId().toString()); 

      // TODO Find all APPROVED requests if user is EMPLOYEE and all PENDING requests is user is MANAGER 
      // TODO Reset to 0 once we hit /requests page 
      // TODO Update this value on page refresh if not on /requests page 
      for (RequestDO requestDO : requestRepository.findByUsersAndStatus(user, RequestStatus.PENDING)) { 

       ArrayList<RequestDO> requestsList = new ArrayList<>(); 
       requestsList.add(requestDO); 

       int numRequests = requestsList.size(); 
       log.info(String.valueOf(numRequests)); 
       model.addAttribute("numRequests", numRequests); 
       return numRequests; 
      } 
     } 
     return 0; 
    } 
} 

我通過屬性「numRequests」的片段,「標題」,在我的索引的模板:

<body> 

<div class="container" style="width: 100% !important;"> 

    <div th:replace="fragments/header :: header"></div> 

    <div th:replace="fragments/null :: null"></div> 

    <div th:replace="fragments/footer :: footer"></div> 

</div> 

</body> 

裏面了header.html片段,我有一個短if statement顯示的值此屬性:

<th:block th:if="${numRequests} != '0'"> 
    <div style="float: left; margin-right: 10px;">My Requests</div> 
    <div style="overflow: hidden" class="circle"> 
     <th:block th:text="${numRequests}"></th:block> 
    </div> 
</th:block> 

所以這一切工作正常。如果數據庫中有0個請求對象,則不顯示任何內容。但是,如果超過0,則會顯示一個循環通知標誌並正確顯示數字1.問題是無論創建了多少個請求對象,我仍然始終看到數字1.我確信,正確地查詢它們。我在邏輯上錯過了一些基本的東西嗎?也許屬性值只是出於某種原因更新一次?

回答

1

你初始化內部循環requestsList所以每創建一個新的空ArrayList對象並添加一個RequestDO對象。循環內部還有return聲明,所以函數在第一次迭代後結束。這就是爲什麼當數據庫中有請求時總是收到1,而當沒有請求時總是收到0。

基本上循環是不必要的。如果在迭代請求中沒有進一步的邏輯,則可以丟棄整個for loop:

@ModelAttribute("numRequests") 
public int numRequests(Principal principal, Model model) { 
    Users user = usersRepository.findOneByInitialName(principal.getName()); 
    if (user != null) { 
     log.info(user.getId().toString()); 

     // TODO Find all APPROVED requests if user is EMPLOYEE and all PENDING requests is user is MANAGER 
     // TODO Reset to 0 once we hit /requests page 
     // TODO Update this value on page refresh if not on /requests page 

     List<RequestDO> requestsList = requestRepository.findByUsersAndStatus(user, RequestStatus.PENDING); 

     int numRequests = requestsList.size(); 
     log.info(String.valueOf(numRequests)); 
     model.addAttribute("numRequests", numRequests); 
     return numRequests; 
    } 
    return 0; 
}