【问题标题】:Trouble updating ControllerAdvice attribute more than one time多次更新 ControllerAdvice 属性时出现问题
【发布时间】:2017-02-14 03:58:06
【问题描述】:

我设置了以下 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”:

<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。我确定我' m 正确查询它们。就逻辑而言,我在这里遗漏了一些基本的东西吗?也许属性值由于某种原因只更新一次?

【问题讨论】:

    标签: java html spring spring-boot


    【解决方案1】:

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

    基本上循环是不必要的。如果在迭代请求中没有进一步的逻辑,您可以丢弃整个 for 循环:

    @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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      • 2011-06-08
      • 2019-06-01
      • 1970-01-01
      相关资源
      最近更新 更多