0

Spring MVC で Hibernate Validator を使用していますが、複数選択 (ManyToMany 関係) に 1 つの問題があります。私の基本クラスは Project です。プロジェクトには、特に次のフィールドがあります: name (String)、User(ManyToOne)、regions(ManyToMany)

class Project {
    .
    private String name;
    private User user;
    private List<Region> regions
    .
}

コントローラー(POSTアクション)には次のものがあります:

public String saveProject(
    @Valid Project project,
    BindingResult bindingResult,
    ModelMap model) {

    //send regions, users etc. to model

    //errors
    if(bindingResult.hasErrors()) {

        System.out.println(project.getRegions().size());
        //Printed size of regions is identical with selected

        return "templates/project/form";        
    }


    //no errors, save to database etc.

}

初期バインダー:

@InitBinder
public void initBinder ( WebDataBinder binder )
{
    StringTrimmerEditor stringtrimmer = new StringTrimmerEditor(true);
    binder.registerCustomEditor(String.class, stringtrimmer);

    binder.registerCustomEditor(List.class, "regions",new CustomCollectionEditor(List.class){
        @Override
        protected Object convertElement(Object element) {
            Region region = new Region();

            if (element != null) {
                Integer id = Integer.valueOf(element.toString());
                region.setId(id);
            }
            return region;
        }
    });

返品フォームで、フィールド 'name' id が入力され、ユーザーが選択されていますが、地域の複数選択がです。

さらに興味深いことに、オブジェクトが「編集」フォームでデータベースに保持されている場合、複数選択が適切に入力されます。

4

1 に答える 1

0

私が見つけた解決策の 1 つは、領域の完全なオブジェクトをロードすることです。これは「saveProject」アクションです。

if(bindingResult.hasErrors()) {

    System.out.println(project.getRegions().size());
    //Printed size of regions is identical with selected

    if (project.getRegions() != null) {
        List<Region> regionsTemp = new ArrayList<Region>();
        for (Region region1 : project.getRegions()) {
            Region region = Database.findById(region1.getId());
            regionsTemp.add(region);
        }
        project.setRegions(regionsTemp);
    }

    return "templates/project/form";        
}

他のアイデアはありますか?

于 2013-07-04T11:01:50.883 に答える