Моя реализация Spring CustomCollectionEditor, неправильно привязывается - PullRequest
3 голосов
/ 01 апреля 2011

У меня есть один выборочный элемент весной:

<form:select  path="categoryProducts" id="destinationData" itemLabel="product.name" items="${categoryProducts}" itemValue="product.id" multiple="true" ondblclick="moveLeft(document.getElementById('destinationData'), document.getElementById('sourceData'))"  size="10" />  

В моем контроллере:

@InitBinder
  public void initBinder(WebDataBinder binder){
    binder.registerCustomEditor(Set.class, "categoryProducts", new CustomCollectionEditor(Set.class)
    {
      @Override
      protected Object convertElement(Object element)
      {
          Product  p = new Product() ;
         try {

             Short id = new Short(String.valueOf(element));
              p = (Product) dataManager.find(Product.class, id);
             System.out.println(p.getId() + "\\" +p.getName());
             CategoryProduct c = new CategoryProduct ();
             c.setProduct(p);
             return c;

        } catch (Exception e) {
            e.printStackTrace();
        }
        return p;
      }


    });  

Когда я отправляю, получаю этот журнал:

136 Product Name
105 Product Name
104 Product Name
211 Product Name
204 Product Name
409 Product Name
30/03/2011 07:32:20 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() para servlet cms lanzó excepción
org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'category' on field 'categoryProducts': rejected value [136,105,104,211,204,409][type

InitiBinder инициализируется, но в конце выдает исключение: (отклоненное значение [136,105,104,211,204,409]).Почему?

1 Ответ

0 голосов
/ 16 сентября 2012

Скорее всего, поле "categoryProducts" вашего командного класса (атрибут модели) имеет значение

Set<String> 

... или Набор любого класса, кроме CategoryProduct. Попробуйте изменить это на:

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