2011-07-09 8 views
0

RestaurantクラスとTagクラスのManyToMany関係に問題が発生しました。私が得た:Spring MVC ManySelectのManyToMany

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; 

と:私が得た私のJSPで

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; 

:私のコントローラで

<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); 
} 

私は保存ボタンをクリックすると、 、私はエラーを受け取りました:

フィールド 'tags'のオブジェクト 'command'のフィールドエラー:拒否された値[[Ljava.lang.String; @ 5babd8cb];コード[typeMismatch.command.tags、typeMismatch.tags、typeMismatch.java.util.List、typeMismatch];引数[org.springframework.context.support.DefaultMessageSourceResolvable:codes [コマンドタグ、タグ];引数[];デフォルトのメッセージ[タグ]];デフォルトのメッセージ[型[java.lang.String []]のプロパティ値を、プロパティ 'tags'の必須型[java.util.List]に変換できませんでした。ネストされた例外はjava.lang.IllegalArgumentExceptionです:プロパティ 'tags [0]'の必須タイプ[beans.Tag]にタイプ[java.lang.String]の値を変換できません:一致するエディタまたは変換ストラテジが見つかりません]]根本的な原因 org.springframework.validation.BindException:org.springframework.validation.BeanPropertyBindingResult:1つのエラー

答えて

0
[Failed to convert property value of type [java.lang.String[]] to required type [java.util.List] for property 'tags'; 

はどのようにあなたのコントローラーでオブジェクトを処理しています。実際に渡されたオブジェクトはString[]ですが、コントローラハンドラメソッドではjava.util.Listを受け入れる必要があります。それをString []として扱い、あなたのコントローラのリストに変換してみてください。

編集: あなたのコメントに関して、私はそのようなものを疑った。タグはString []タグの形式でjspから渡され、Listを必要とするRestaurantオブジェクトをキャッチしてエラーが発生します。私は私のコントローラでのみ得た次

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 
} 
+0

をお試しください:公共のModelAndViewは(HttpServletRequestのリクエスト、 HttpServletResponseの応答、レストランレストラン) は例外{ restaurantDAO.saveRestaurant(レストラン)をスローmyrestaurantadd。 } – zax

+0

@zax編集 –

+0

参照http://stackoverflow.com/questions/6637324/save-many-to-many-in-spring-mvc – gouki