2012-04-05 18 views
1

フォームを送信したときにこのエラーが発生しましたが、これがなぜ発生しているのかわかりません。私はtaglibがこれを扱うべきだと信じています。私はitemValue="id"に私のJSPで渡された値を変更しようとしましたが、影響はありません。'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

私は同じ問題がありました。私は春、休止状態を使用しています。 私は複合主キーを持つ1つのクラスを持っていると私のミスでした、リクエストで2つのパラメータを渡す:

@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(...){ 
... 
} 
関連する問題