Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在控制器中实现正确的数据绑定?_Java_Spring Mvc_Data Binding - Fatal编程技术网

Java 如何在控制器中实现正确的数据绑定?

Java 如何在控制器中实现正确的数据绑定?,java,spring-mvc,data-binding,Java,Spring Mvc,Data Binding,我有一个jsp页面,它使用表单组合用户对象。在最后一个表单中,我试图获取集合。但当我试图将数据传递给控制器时,由于以下原因,我得到了400个错误: Field error in object 'user' on field 'permissions': rejected value [add,view]; codes [typeMismatch.user.permissions,typeMismatch.permissions,typeMismatch.java.util.Collection,

我有一个jsp页面,它使用表单组合用户对象。在最后一个表单中,我试图获取
集合
。但当我试图将数据传递给控制器时,由于以下原因,我得到了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>
权限类别:

@Entity
@Table(name = "permission")
public class Permission implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @Column(name = "name")
    private String name;

如果我没有弄错的话,我需要在控制器中使用某种数据绑定器。如何实施?如何正确地将字符串[]转换为权限集合?

我找到了一个简单的解决方案。这是:

@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)));
        }
    });
}

这是我的首选方式,但您也可以通过像
path=“permissions[0].value”这样对每个
权限进行索引,从而分别引用它们。但是,这样做意味着您需要在后端进行大量清理以“清理”未检查的项。我想说,您最好为它编写一个适当的绑定,并让它以这种方式处理,这样您就可以得到一个完整的列表,而无需进行清理。
@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)));
        }
    });
}