我的Spring CustomCollectionEditor实现,没有正确绑定

时间:2011-03-31 22:03:47

标签: spring data-binding

我在Spring中有一个选择倍数:

<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 :(得分:0)

您的命令类(模型属性)的字段“categoryProducts”很可能是

Set<String> 

...或除CategoryProduct以外的任何类的集合。尝试将其更改为:

Set<CategoryProduct>