3

アプリで Spring MVC 3.1 を使用しています。次のようにコントローラーにメソッドがあるとします。

@RequestMapping(value = "/assignUser", method = RequestMethod.GET)
public String assignUserToCompany(ModelMap map){
    List<CompanyDetails> companies = //companies list from DAO
    List<UserDetails> users = //users list from DAO
    map.addAttribute("companiesList",companies);
    map.addAttribute("usersList",users);
    return "someView";
}

@RequestMapping(value = "/assignUser", method = RequestMethod.POST)
    public String assignUserToCompany(@RequestParam("user")UserDetails user,
                                      @RequestParam("company")CompanyDetails company){

    if(user!=null && company!=null){
      // some operations with entities
    }

    return "someView";
    }

ビュー側にフォームがあります:

<form method="post" action="assignUser.html">
        <label for="select-users"><spring:message code="assignUser.label.users"/> </label>
        <select id="select-users" name="user">
            <c:forEach items="${usersList}" var="user">
                <option value="${user}">${user.firstName} ${user.legalName}</option>
            </c:forEach>
        </select>
        <label for="select-companies"><spring:message code="assignUser.label.companies"/> </label>
        <select id="select-companies" name="company">
            <c:forEach items="${companiesList}" var="company">
                <option value="${company}">${company.name}</option>
            </c:forEach>
        </select>
        <input type="submit" value="<spring:message code="assignUser.label.submit"/>"/>
    </form>

入力で選択したオブジェクトをリクエストパラメーターとして渡し、それらを使用していくつかの操作を実行したいのですが、標準的な @RequestParam では、プリミティブ型とラッパーしか許可されていません。オブジェクトを渡すためにこれをカスタマイズできますか? ありがとうございました。

4

1 に答える 1

4

pojo がフォームに直接関連している場合は、jsp でスプリング フォームを宣言します (DTO にプロパティ名があると仮定します...

 <form:form id="yourForm" commandName="yourDTO" action="Save" method="POST">
 <form:input path="name" maxlength="90" cssStyle="width: 650px;" id="name"/>

そしてあなたのコントローラー:

@RequestMapping(value = "/Save", method = RequestMethod.POST)
public ModelAndView save(final yourDTO yourDTO) {

または、1 つのフィールドを複雑なクラスに変換する場合は、変換サービスを提供する必要があります。

@Component
public class FooConverter implements Converter<String, Foo> {
    @Override public Foo convert(String source) {
        //do covnersion from string to Foo
        Foo foo = new Foo(source)
        return Foo;
    }
}

そしてそれを登録する

<bean id="conversionService"
          class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.yourcompany.controller.converters.FooConverter"/>
            </set>
        </property>
    </bean>
于 2013-02-21T15:04:58.760 に答える