首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Spring MVC表单中设置选定值:从控制器中选择?

如何在Spring MVC表单中设置选定值:从控制器中选择?
EN

Stack Overflow用户
提问于 2011-05-31 06:32:52
回答 5查看 94.5K关注 0票数 13

在我的控制器中:

代码语言:javascript
运行
复制
@Controller
public class UserController {

    @RequestMapping(value="/admin/user/id/{id}/update", method=RequestMethod.GET)
    public ModelAndView updateUserHandler(@ModelAttribute("userForm") UserForm userForm, @PathVariable String id) {

        Map<String, Object> model = new HashMap<String, Object>();
        userForm.setCompanyName("The Selected Company");
        model.put("userForm", userForm);

        List<String> companyNames = new ArrayList<String>();
        companyNames.add("First Company Name");
        companyNames.add("The Selected Company");
        companyNames.add("Last Company Name");

        model.put("companyNames", companyNames);

        Map<String, Map<String, Object>> modelForView = new HashMap<String, Map<String, Object>>();
        modelForView.put("vars", model);

        return new ModelAndView("/admin/user/update", modelForView);
    }
}

我视图中的select表单域:

代码语言:javascript
运行
复制
<form:form method="post" action="/admin/user/update.html" modelAttribute="userForm">
<form:select path="companyName" id="companyName" items="${vars.companyNames}" itemValue="id" itemLabel="companyName" />
</form:form>

据我所知,表单支持bean将基于表单中的modelAttribute属性进行映射。很明显我漏掉了什么。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-06-04 01:50:58

这个问题似乎与我的设置无关。问题是,itemValue被设置为公司id属性,而比较是在我的表单支持bean上与公司名称属性进行的。因此,这两项不相等,因此,未将任何项设置为选中。

上面的代码工作得很好,只要items集合中某一项的值等于表单值,在userForm中设置特定属性的值就会将该值设置为在选择表单域中选择的值。我更改了我的表单字段,如下所示,这将拉取companyName而不是id。

代码语言:javascript
运行
复制
<form:form method="post" action="/admin/user/update.html" modelAttribute="userForm">
<form:select path="companyName" id="companyName" items="${vars.companyNames}" itemValue="companyName" itemLabel="companyName" />
</form:form>
票数 11
EN

Stack Overflow用户

发布于 2014-11-09 03:34:56

最简单的解决方案是覆盖模型类中的toString()方法。在这种情况下,只需通过覆盖toString()来更改类UserForm,如下所示:

代码语言:javascript
运行
复制
@Override
public String toString() {
    return this.getCompanyName();
}

然后,Spring将自动在form:选项中选择正确的值

票数 8
EN

Stack Overflow用户

发布于 2012-02-04 06:21:54

我在同样的问题上挣扎了一段时间。这是我的选择字段

代码语言:javascript
运行
复制
<form:select path="origin" items="${origins}" itemValue="idOrigin" itemLabel="name" />

因为我已经为我的实体准备了一个PropertyEditor,所以我不能写像这样的东西

代码语言:javascript
运行
复制
<form:select path="origin.idOrigin" items="${origins}" itemValue="idOrigin" itemLabel="name" />

这可以很好地工作,但不能被PropertyEditor解析。

因此,考虑到Spring需要确定实体之间的等价性,我在我的原始实体中实现了equals和hashcode,只使用了idOrigin属性,并且它起作用了!

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6181277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档