无法多次更新ControllerAdvice属性

时间:2017-02-13 19:09:52

标签: java html spring spring-boot

我设置了以下ControllerAdvice来检查在任何给定时间属于某个用户的“Request”对象的当前数量。

@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”:

<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 个答案:

答案 0 :(得分:1)

您在循环内部初始化$NF,因此每次迭代都会创建一个新的空$6对象,并向其添加一个some_command对象。在循环中也有requestsList语句,因此函数在第一次迭代后结束。这就是为什么在数据库中有请求时总是收到1而在没有请求时总是收到0的原因。

基本上循环是不必要的。如果迭代请求中没有其他逻辑,则可以丢弃整个 for 循环:

ArrayList