【问题标题】:Inject data into a Spring form将数据注入 Spring 表单
【发布时间】:2012-07-29 00:30:38
【问题描述】:

在我的 Spring 3.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;
    }
    // ...
}

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

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

【问题讨论】:

    标签: java forms spring-mvc


    【解决方案1】:

    我终于找到了解决办法。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-02
      • 2016-06-23
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-13
      • 1970-01-01
      • 2019-09-13
      相关资源
      最近更新 更多