0

Company と Automotive の 2 つのテーブルがあります。企業は多くの自動車を持つことができます。Automotive を適切に永続化できません。会社はドロップダウンからビュー ページで選択されます。

私のコントローラー

@RequestMapping("/")
public String view(ModelMap model) {
    Map<String, String> companyList = new HashMap<String, String>();
    List<Company> companies = companyService.listAllCompanies();
    for (Company company : companies) {
        companyList.put(String.valueOf(company.getId()), company.getName());
    }
    model.addAttribute("companies", companyList);

    model.addAttribute("automotive", new Automotive());
    return "automotive/index";
}

@RequestMapping("manage")
public String manage(@ModelAttribute Automotive automotive,
        BindingResult result, ModelMap model) {
    model.addAttribute("automotive", automotive);

    Map<String, String> companyList = new HashMap<String, String>();
    List<Company> companies = new ArrayList<Company>();
    for (Company company : companies) {
        companyList.put(String.valueOf(company.getId()), company.getName());
    }
    model.addAttribute("companies", companyList);
    automotiveService.addAutomotive(automotive);
    return "automotive/index";
}

私の見解

<form:form action="/Automotive/manage" modelAttribute="automotive">
    Name : <form:input path="name" />
    Description : <form:input path="description" />
    Type : <form:input path="type" />
    Company : <form:select path="company" items="${companies}" />
    <input type="submit" />
</form:form>

Q1>論理的に予想されるように、会社IDは保存されません。これは、ここではIDであると見なされているためですが、実際には保存中に会社タイプのオブジェクトである必要があります。これをどのように解決すればよいでしょうか。DTO を使用する必要がありますか、それとも直接的な方法はありますか?

Q2> コントローラーで新しいマップを作成する代わりに、会社リストをビューに直接渡すことはできませんか?

4

1 に答える 1

1

会社のIDをキーとして使用し、データをフォームからドメインオブジェクトに自動的に変換するコンバーターを使用できます。このコードのように:

public class CompanyIdToInstanceConverter implements Converter<String, Company> {

    @Inject
    private CompanyService _companyService;

    @Override
    public Company convert(final String companyIdStr) {
        return _companyService.find(Long.valueOf(companyIdStr));
    }

}

そしてJSPでは:

<form:select path="company" items="${companies}" itemLabel="name" itemValue="id"/>

これにまだ触れていない場合は、型変換についてさらに読む必要があるかもしれません。それはSpring docで完全に説明されています(私はあなたが見つけることができませんでした:http ://static.springsource.org/spring/docs/3.0.x/reference/validation.htmlパラグラフ5.5)。

お役に立てば幸いです。

于 2013-05-08T18:12:23.733 に答える