我有一个jsp页面,它结合使用表单的User对象。在最后一个表格中,我试图获得Collection<Permission>
。但是当我试图将数据传递给控制器时,由于以下原因导致400错误:
Field error in object 'user' on field 'permissions':
rejected value [add,view];
codes [typeMismatch.user.permissions,typeMismatch.permissions,typeMismatch.java.util.Collection,typeMismatch];
arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [user.permissions,permissions];
arguments [];
default message [permissions]];
default message [Failed to convert property value of type 'java.lang.String[]' to required type 'java.util.Collection' for property 'permissions'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [it.marco.javaproject.domain.Permission] for property 'permissions[0]': no matching editors or conversion strategy found]
这是我的jsp表单:
<form:form action="/user/permission" method="POST" modelAttribute="user">
<form:checkboxes path="permissions" items="${permissions}" delimiter=<br>"/>
<form:hidden path="email"/>
<form:hidden path="password"/>
<form:hidden path="name"/>
<input type="submit" value="Next" name="next"/>
</form:form>
控制器的一部分:
public String processRoleForm(@ModelAttribute("user") User user, ModelMap model) {
model.addAttribute("permissions", userService.getPermissions());
return "user/form/permissionForm";
}
许可类:
@Entity
@Table(name = "permission")
public class Permission implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "name")
private String name;
如果我没弄错,我需要在控制器中使用某种数据绑定器。怎么实现呢?如何正确地将String []转换为权限集合?
答案 0 :(得分:1)
我找到了简单的解决方案。这是:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(Permission.class, new PropertyEditorSupport() {
@Override
public void setAsText(String id) throws IllegalArgumentException {
setValue(userService.getPermission(Integer.parseInt(id)));
}
});
}