2017-02-21 11 views
1

Controller:модели Логическое значение атрибута не отображается в HTML (Spring MVC)

@RequestMapping("/approveRequestById") 
    public String approveRequestById(Principal principal, @RequestParam(value="id") String requestId, Model model) { 
     Users manager = usersRepository.findOneByInitialName(principal.getName()); 
     RequestDO request = requestRepository.findOne(Long.parseLong(requestId)); 
     requestRepository.updateRequestStatusByRequestId(RequestStatus.APPROVED, request.getId()); 
     Users employee = usersRepository.findOne(request.getUsers().getId()); 
     // Instead of getting the same RequestDO object from DB, I just updated it's status for using in mail correctly. 
     request.setStatus(RequestStatus.APPROVED); 

     model.addAttribute("requestFlag", true); 
     log.info("Model: " + String.valueOf(model)); 

     /*** 
     Send Notification Mail to Employee 
     ***/ 
     mailUtil.sendNotificationEmailWithTemplating(employee, manager, request); 

     return "redirect:/requests"; 
    } 

HTML:

<th:block th:switch="${requestFlag}"> 
        <th:block th:case="true"> 
         <div style="width: 100%; height: 30px; color: #fff; background: #C00000; text-align: center; padding: 10px;"><span 
           style="font-weight: bold; padding-bottom: 10px; ">The request from your mailbox has been approved!</span></div><br> 
        </th:block> 
       </th:block> 

выход Войти при посадке на странице после электронной ссылке:

Model: {currentRole=EMPLOYEE, numRequests=0, requestFlag=true} 

Пользователь обращается к странице с чернилами электронной почты, то есть http://localhost:8181/request/approveRequestById?id=2. Как только на этой странице контроллер вставляет атрибут модели requestFlag и устанавливает его на true. В режиме журнала и отладки я могу видеть, что модель действительно добавляет этот атрибут к модели при вызове отображения запроса, то есть /request/approveRequestById.

Моя проблема заключается в том, что логика не работает на интерфейсе. Div не отображается. Если есть requestFlag, равный true, он должен показывать div. Я могу напечатать значение с помощью <th:block th:text="@{requestFlag}">Request Flag</th:block>, но это не дает мне логическое значение, которое я хочу. Может ли Booleans не отображаться через Тимелеаф? Остальные строки в прилагаемой модели печатаются очень хорошо. Я пропустил что-то фундаментальное с точки зрения порядка обработки шаблонов? Вся помощь очень ценится.

+1

Попробуйте использовать 'RedirectAttributes' вместо' Model'. – SachinSarawgi

+0

Объем модели не относится к модели. Вы можете сравнить это будет httprequest.forward VS httprequest.sendRedirect в сервлет. – Nimesh

ответ

1

Так как вы используете ваш redirect:model будут потеряны при перенаправлении (новый запрос будет создан), поэтому вы должны хранить данные в redirectAttributes.

@RequestMapping("/approveRequestById") 
public String approveRequestById(Principal principal, @RequestParam(value="id") String requestId, Model model, RedirectAttributes redirectAttributes) { 

     //use this 
     redirectAttributes.addFlashAttribute("requestFlag", true); 

     //instead of 
     model.addAttribute("requestFlag", true); 

     return "redirect:/requests"; 
    } 
+0

Это сработало спасибо! Похоже, что у меня есть дополнительные возможности для активности в Android ... – santafebound

+0

Да, если вы так говорите .. –

Смежные вопросы