Spring MVC ManyToMany в MultipleSelect - PullRequest
       13

Spring MVC ManyToMany в MultipleSelect

0 голосов
/ 09 июля 2011

Я столкнулся с проблемой отношений ManyToMany между классом Restaurant и Tag.Я получил:

public class Tag {
    @Id
    private int id;
    private String name;
    @ManyToMany
    @JoinTable(name="restaurant_tag",
            joinColumns={@JoinColumn(name="tag_id")},
            inverseJoinColumns={@JoinColumn(name="restaurant_id")})
    private List<Restaurant> restaurants;

и:

public class Restaurant {
    @Id
    @GeneratedValue
    private int id;
    (...)
    @ManyToMany
    @JoinTable(name="restaurant_tag",
            joinColumns={@JoinColumn(name="restaurant_id")},
            inverseJoinColumns={@JoinColumn(name="tag_id")})
    private List<Tag> tags;

В моем JSP я получил:

<form:select multiple="true" path="tags">
<form:options items="${tagList }" itemValue="id" itemLabel="name" />
</form:select>

В моем контроллере я получил:

public ModelAndView myrestaurantadd(HttpServletRequest request,
            HttpServletResponse response, Restaurant restaurant)
            throws Exception {
restaurantDAO.saveRestaurant(restaurant);
}

Когда я нажимаю кнопку сохранения, я получаю сообщение об ошибке:

Ошибка поля в объекте 'команда' в поле 'теги': отклоненное значение [[Ljava.lang.String; @ 5babd8cb];коды [typeMismatch.command.tags, typeMismatch.tags, typeMismatch.java.util.List, typeMismatch];аргументы [org.springframework.context.support.DefaultMessageSourceResolvable: codes [command.tags, tags];аргументы [];сообщение по умолчанию [теги]];сообщение по умолчанию [Не удалось преобразовать значение свойства типа [java.lang.String []] в требуемый тип [java.util.List] для свойства 'tags';Вложенное исключение - java.lang.IllegalArgumentException: невозможно преобразовать значение типа [java.lang.String] в требуемый тип [beans.Tag] для свойства 'tags [0]': не найдены подходящие редакторы или стратегия преобразования]] с основной причинойorg.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 ошибка

1 Ответ

0 голосов
/ 09 июля 2011
 [Failed to convert property value of type [java.lang.String[]] to required type [java.util.List] for property 'tags'; 

Как вы справляетесь с объектом на вашем контроллере. Вы должны принять java.util.List в методе контроллера, тогда как фактический переданный объект - String[]. Попробуйте обработать его как String [] и преобразовать его в List в вашем контроллере.

EDIT: Что касается вашего комментария, я подозревал что-то в этом роде. Теги передаются из jsp в виде тега String [], и вы перехватываете объект Restaurant, для которого требуется List и, следовательно, ошибка. Попробуйте следующее

public ModelAndView myrestaurantadd(HttpServletRequest request, HttpServletResponse response, Restaurant restaurant, String[] tags) throws Exception {
//Convert the String array into List<Tag> and set this list in the restaurant object
//Note that the Restaurant object obtained as the method argument with contain a null tag list, so you would need to set the tag list before saving
//Save the Restaurant object now
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...