4

次のように定義されたスプリングコントローラーがあります。

@Controller
@RequestMapping("/user")
class UserController {
    ...
    @RequestMapping(method=RequestMethod.POST)
    public String save(User user) {
        // Do something with user
        return "redirect:/...";
    }
}

この場合、投稿データ (フォームから送信されたデータ) はどのように User オブジェクトにマップされるのでしょうか? これがどのように機能するかについてのドキュメントはありますか?

このような POJO が 2 つあるとどうなりますか?

@Controller
@RequestMapping("/user")
class UserController {
    ...
    @RequestMapping(method=RequestMethod.POST)
    public String save(User user, Foo anotherPojo) {
        // Do something with user
        return "redirect:/...";
    }
}
4

2 に答える 2

2

多くの場合、POSTパラメーター名がPOJO属性名と同じであれば十分です。ただし、適切な方法は、Springフォームのtaglibを使用して、それをpojoにバインドすることです。

@Controller
@RequestMapping("/user")
class UserController {
    ...

    @RequestMapping(value="/login", method=RequestMethod.GET)
    public ModelAndView get() {
        return new ModelAndView().addObject("formBackingObject", new User());
    }

    @RequestMapping(value="/login", method=RequestMethod.POST)
    public String save(User user) {
        // Do something with user
        return "redirect:/...";
    }
}

そして、JSPで:

// e.g in user/login.jsp
<form:form method="post" commandName="formBackingObject" action="/user/login.html">
    <form:label path="username"><spring:message code="label.username" /></form:label>
    <form:input path="username" cssErrorClass="error" />
    <form:label path="password"><spring:message code="label.password" /></form:label>
    <form:password path="password" cssErrorClass="error" />
    <p><input class="button" type="submit" value="<spring:message code="label.login" />"/></p>
</form:form>

属性(たとえば、ユーザーがaddressプロパティを持っている場合はaddress.street)をネストできますが、Springが複数のコマンドオブジェクトを受け入れることはないと思います。

于 2010-05-18T13:01:32.570 に答える
2

最初のケースでは、Spring MVC は HTTP POST パラメーター名をUserクラスのプロパティ名に一致させようとし、必要に応じてそれらのパラメーター値の型を変換します。

2 番目のケースでは、Spring は Command オブジェクトを 1 つしか受け付けないため、Spring は例外をスローすると思います。

于 2010-05-18T12:59:10.240 に答える