次のControllerAdviceを設定して、特定のユーザーに所属する「要求」オブジェクトの現在の数を確認しました。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」を渡す:header.htmlフラグメント内
<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>
、私は短い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より大きい場合は、循環通知バッジが表示され、正しく番号1が表示されます。問題は、さらに多くの要求オブジェクトが作成されても、常に1が表示されることです。それらを正しく照会する必要があります。私は論理の点でここに何か根本的なものを見逃していますか?おそらく属性値は何らかの理由で一度だけ更新されるでしょうか?あなたはすべての反復ごとのように、ループ内requestsList
を初期化