我已经接受了学习spring(2.5)的任务,并且我遇到了使用属性的问题,当加载表单时,我不会得到任何预先选择的值。情况如下:
在我的系统中,我有公司,客户和用户。客户扩展公司,公司可以拥有用户列表(getMethod是公共的,因此客户也有一个用户列表)。
这就是表单选择在我的.JSP中的显示方式:
<form:select multiple="true" id="selectAccountManager" path="${customer.users}" cssClass="input select_img" >
<c:forEach items="${customerUsers}" var="user" >
<form:option value="${user.id}
<c:out value="${user.displayName}" />
</form:option
</c:forEach>
</form:select>
现在,我在path="${customer.users}"
上收到错误消息。如果我使用path="users"
我的系统工作,但是当页面加载时我不会将表单中的任何值作为“预先选择”。我尝试过使用path =“customer.users”,但是当我这样做时,我在js-console中得到了一个referenceError。
.JSP映射到 EditCustomerController ,其中customerUsers通过
放入地图map.put("customerUsers", UserControlHelper.getAllUsers());
所以我猜这就是问题所在,因为我总是从系统中获得所有个用户?
TL; DR:如何在我从一个类加载项目的表单上设置选定值,并希望select-filter来自另一个?
答案 0 :(得分:0)
(首先,Spring 2.5已经过时了,我建议您使用3.2.x甚至4.0.x)
要预先选择选项,您应在模型上设置适当的字段,Spring将自动预先选择它。像那样:
<form:form method="post" modelAttribute="myForm">
<form:select multiple="true" path="users">
<form:options items="${customerUsers}" itemLabel="displayName" itemValue="id" />
</form:select>
</form:form>
在控制器中:
User defaultUser = new User(1, "DEFAULT");
MyForm myForm = new myForm();
myForm.getUsers().add(defaultUser);
model.addAttribute("myForm", myForm);
答案 1 :(得分:0)
所以我发现了问题所在。
当我创建地图时,我只将用户放在那里。用户对象实际映射到的是用户的ID(我通过$ {user.id}检索的内容,如原始帖子中所示。我必须做的是以正确的方式创建路径:
控制器 - java:
Map<Int,String> users = new HashMap<Int,String>();
for(User user: UserControlHelper.getAllUsers()){
users.add(user.getId(), user.getDisplayName())
}
model.put("customerUsers", users);
和我的jsp:
<form:select path="users" items="${customerUsers}"></form:select>