2015-11-13 2 views
0

Я хочу добавить некоторые атрибуты в модель, но по какой-то причине один из атрибутов не добавляется в модель для конкретного обработчика запросов.Атрибут Spring не добавляется в модель

Два атрибута: numberDeleted и usersDeleted.

usersDeleted по какой-либо причине не добавляется к модели на третьем обработчике запросов.

Вот код: (Примечание: некоторые строки кода были удалены для краткости. Отображается только соответствующий код).

Сначала я удалить некоторые выбранных пользователей:

@RequestMapping(value = "/delete", method = RequestMethod.DELETE) 
    public String delete(
      @ModelAttribute("credentials") Credentials credentials, 
      @ModelAttribute("deleteUsersForm") DeleteUsersForm form, 
      @ModelAttribute("searchCriteria") SearchForm searchForm, 
      Model model, RedirectAttributes redirect) { 

     String[] usersDeleted = form.getCheckedUsers(); 
     if (usersDeleted != null) { 
      for (int i = 0; i < usersDeleted.length; i++) { 
       System.out.println("user (delete): " + usersDeleted[i]); 
      } 
     } 

     redirect.addFlashAttribute("usersDeleted", usersDeleted); 
     redirect.addFlashAttribute("numberDeleted", numberDeleted); 
     redirect.addFlashAttribute("searchForm", searchForm); 

     return "redirect:" + searchForm.getSelectedOption(); 
    } 

После того, как выбранные пользователи будут удалены из базы данных, я делаю вызов REST API, чтобы получить существующие в настоящее время пользователей и добавить их в модель, а также numberDeleted и usersDeleted из функции удаления выше:

@RequestMapping(value = "/getAllUsers", method = RequestMethod.GET) 
    public String getAllUsers(@ModelAttribute Credentials credentials, 
      RedirectAttributes redirect, Model model) { 

     SearchForm searchForm = new SearchForm("/getAllUsers", "allUsers"); 

     redirect.addFlashAttribute("users", users); 
     redirect.addFlashAttribute("searchCriteria", searchForm); 

     /* If users deleted: */ 
     Integer numberDeleted = (Integer) model.asMap().get("numberDeleted"); 
     String[] usersDeleted = (String[]) model.asMap().get("usersDeleted"); 
     redirect.addFlashAttribute("numberDeleted", numberDeleted); 
     redirect.addFlashAttribute("usersDeleted,", usersDeleted); 

     if (usersDeleted != null) { 
      for (int i = 0; i < usersDeleted.length; i++) { 
       System.out.println("user: (getAllUsers) " + usersDeleted[i]); 
      } 
     } 

     return "redirect:/adminHome"; 
    } 

usersDeleted и numberDeleted не обнулить до этого момента, и я могу распечатать их значение.

Тогда я вызываю запрос на список пользователей:

@RequestMapping(value = "/adminHome", method = RequestMethod.GET) 
    public String getAdminHomePage(Model model) { 


     SearchForm searchCriteria = (SearchForm) model.asMap().get(
       "searchCriteria"); 

     /* If users were deleted: */ 
     Integer numberDeleted = (Integer) model.asMap().get("numberDeleted"); 
     String[] usersDeleted = (String[]) model.asMap().get("usersDeleted"); 
     model.addAttribute("numberDeleted", numberDeleted); 
     model.addAttribute("usersDeleted,", usersDeleted); 

     if (usersDeleted != null) { 
      for (int i = 0; i < usersDeleted.length; i++) { 
       System.out.println("user: (adminhome) " + usersDeleted[i]); 
      } 
     } 
     ..... 
     return "admin_home"; 
    } 

Однако, на данный момент, usersDeleted равна нулю (так как ничего не печатает), но numberDeleted не равно нулю.

Я буквально не понимаю, что происходит. Почему это null? Я явно добавил его в модель.

EDIT 1: В настоящее время мой только временное решение добавить usersDeleted к @SessionAttributes.

Но я не должен был прибегать к этому.

+1

Существует тип. Удалите запятую: model.addAttribute ("usersDeleted", usersDeleted); shoudl be model.addAttribute ("usersDeleted", usersDeleted); –

+0

@ Rossi Robinsion WOW спасибо! Может быть, мне нужно вздремнуть или отдохнуть. Мое сознание сбито с толку. Можете ли вы написать это как ответ, чтобы я мог его принять? – Kingamere

+0

Это так. Не беспокойся! –

ответ

1

Согласно комментариям @Kingamere, я публикую это. На ключе модели была опечатка.

model.addAttribute("usersDeleted,", usersDeleted); 

В конце пользователя была добавлена ​​дополнительная запятая. После того, как вы удалите эту запятую, она отлично работает для Kingmere.

model.addAttribute("usersDeleted", usersDeleted); 
Смежные вопросы