Как преобразовать String в объект List весной MVC - PullRequest
0 голосов
/ 12 января 2012

Я пробую Spring MVC пример. У меня есть testBean, который имеет переменную типа списка, как

  private List<HashMap<String, String>> books;

В моем контроллере у меня есть

@RequestMapping(value = "/booksList", method = RequestMethod.POST)
    public String displayBooks(@ModelAttribute TestBean testBean, Model model, HttpSession   session) {
     // some code here
}

На моей странице JSP у меня есть

<form:form action="booksList.html" method="post" modelAttribute="testBean">
        <form:hidden path="books" />
   <input type="submit" value="submit">
</form:form>

Когда я отправляю эту форму, я получаю эту ошибку

Невозможно преобразовать значение типа [java.lang.String] в требуемый тип [java.util.HashMap] для свойства 'books[0]'.

Как я могу решить эту ошибку? пожалуйста помогите

Обновлен:

Я видел, что Я тоже так могу.

 @InitBinder
public void initBinder(WebDataBinder binder) {              
        binder.registerCustomEditor(List.class, "testBean", new CustomCollectionEditor(List.class) {                
        @Override           
        protected Object convertElement(Object element) {
            TestBean testBean = new TestBean();                
            if (element != null) {
                List<HashMap<String, String>> id = (List<HashMap<String, String>>) element;
                testBean.setFilters(id);
            }
            return testBean;
        }
        });       
   }

Но я не совсем понимаю вышеописанный метод, могут быть некоторые ошибки в том, что я написал. И я не знаю, как и откуда я могу вызвать метод convertElement(Object element). я понимаю, что initBinder(WebDataBinder binder) вызовет jsut до того, как мой метод контроллера public String displayBooks(...). Даже я не знаю, правильно ли это делать.

1 Ответ

1 голос
/ 13 января 2012

Как указано выше, вы пытаетесь представить чрезвычайно сложный тип (List из Map с) в одном текстовом поле. Ваш первый шаг должен понять, как вы хотите отобразить эту информацию в веб-форме. Затем попробуйте использовать «консервированные данные» (например, TestBean, который вы загрузили с помощью fake books) и посмотрите, выглядит ли ваша форма так, как вы ожидаете.

Возможно, вам будет проще, если вы измените способ хранения вашей коллекции books. Наличие такого сложного типа, как часть "bean", в то время как допускается , вероятно, не рекомендуется . Попробуйте использовать List<BookBean>, где BookBean содержит коллекцию BookDetailBean, а BookDetailBean содержит то отношение String-to-String, которое вы ранее имели в своем Map.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...