2012-04-05 301 views
1

我收到此错误,当我提交我的表单,无法弄清楚为什么会发生这种情况。我相信taglib应该处理这个问题。我试过将jsp中传递的值更改为itemValue="id",但它没有任何影响。无法修复:'java.lang.String'为所需的类型'java.util.Collection'

org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 1 errors 
Field error in object 'content' on field 'stateCollection': rejected value [com.myapp.cmt.model.State[ id=3 ]]; codes [typeMismatch.content.stateCollection,typeMismatch.stateCollection,typeMismatch.java.util.Collection,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [content.stateCollection,stateCollection]; arguments []; default message [stateCollection]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Collection' for property 'stateCollection'; nested exception is java.lang.IllegalStateException: 
Cannot convert value of type [java.lang.String] to required type [com.myapp.cmt.model.State] for property 'stateCollection[0]': no matching editors or conversion strategy found] 

我的JSP

<strong>State</strong><br/> 
<form:checkboxes path="stateCollection" items="${states}" itemLabel="name"/> 

我的内容

public class Content implements Serializable { 
....... 

    @JoinTable(name = "content_to_state", joinColumns = { 
     @JoinColumn(name = "content_id", referencedColumnName = "id")}, inverseJoinColumns = { 
     @JoinColumn(name = "state_id", referencedColumnName = "id")}) 
    @ManyToMany 
    private Collection<State> stateCollection; 

..... 

    @XmlTransient 
    public Collection<State> getStateCollection() { 
     return stateCollection; 
    } 

    public void setStateCollection(Collection<State> stateCollection) { 
     this.stateCollection = stateCollection; 
    } 

..... 

我的控制器

... 
@RequestMapping(value = "/{guid}/save", method = RequestMethod.POST) 
public ModelAndView saveContent(@ModelAttribute("content") Content content, @PathVariable("guid") String guid) { 
    try { 
     // Save the modified object 
     contentService.save(content); 
    } catch (IllegalOrphanException ex) { 

... 

我的内容服务

... 
@Transactional 
public void save(Content content) throws IllegalOrphanException, NonexistentEntityException, RollbackFailureException, Exception { 
    try { 
     utx.begin(); 
     em.merge(content); 

     utx.commit(); 
    } catch (Exception ex) { 

    } finally { 
     if (em != null) { 
      em.close(); 
     } 
    } 
} 

... 

回答

0

我有同样的问题。我使用Spring,Hibernate。 我有一个复合主键一个类,并在请求传递两个参数,我的错误是:

@Entity 
@Table(name = "TAREAS") 
public class Tarea implements Serializable { 

    private static final long serialVersionUID = 1L; 
    protected TareaPK clave; 
    private String descripcion; 
    ..... 
} 

控制器:

@RequestMapping(value = "/tareas", params = {"clave", "tipot"}, method = RequestMethod.GET) 
    public String formularioTareaEditar(
     @RequestParam(value = "clave") String clave, 
     @RequestParam(value = "tipot") String tipoTrabajo, 
     Model model) { 
    Tarea tarea = catalogoService.getTarea(tipoTrabajo, clave); 
    model.addAttribute(tarea); 
    return "tarea/editar"; 
    } 

    @RequestMapping(value = "/tareas", params = {"clave", "tipot"}, method = RequestMethod.POST) 
    public String tareaEditar(@Valid @ModelAttribute Tarea tarea, BindingResult result) { 
     if (result.hasErrors()) { 
     return "tarea/editar"; 
     } else { 
     catalogoService.edit(tarea); 
     return "redirect:/tareas"; 
     } 
    } 

所以......当信息获取控制器参数clave被视为主键的对象TareaPK

我只是改变了我的控制器中的参数名称。

@RequestMapping(value = "/tareas", params = {"txt_clave", "tipot"}, method = RequestMethod.GET) 
public String formularioTareaEditar(...){ 
... 
} 
相关问题