-4

在我的 Spring3.1.2.RELEASE应用程序中,我有一个复杂的表单,需要注入预定义的 bean

<util:map id="predefinedLocations" map-class="java.util.LinkedHashMap">
    <entry key="first address" value="Location A" />
    <entry key="another one" value="Location B" />
    <!-- ... -->
</util:map>

我的表单创建如下:

@RequestMapping(value = "/create", method = RequestMethod.GET)
public CreationForm createForm() {
    return new CreationForm();
}

我无法将地图作为表单的构造函数参数传递,因为我的控制器使用@Valid了试图实例化表单的注释。

@RequestMapping(value = "/create", method = RequestMethod.POST)
public String create(@Valid CreationForm form, BindingResult formBinding, Model model) {
    if (formBinding.hasErrors()) {
        // PROBLEM HERE
        //
        // View rendering fails because a freshly created CreationForm will be
        // passed to the view so Spring needs to handle the injection of
        // predefinedLocations.
        return null;
    }
    // ...
}

我的第一个想法是使用表单工厂,但在这种情况下我无法实现。

如何将bean注入(或引用)到我的表单中?predefinedLocations

4

1 回答 1

2

我终于找到了解决方案。

现在在我的控制器中创建了如下表单:

@ModelAttribute("creationForm")
private CreationForm getCreationForm() {
    return new CreationForm(predefinedLocations);
}

这样,@Valid不会实例化新表单,而是重用先前的实例。

于 2012-07-31T09:31:03.437 回答