[未能将类型为';java.lang.String[]和';的属性值转换为属性的必需类型';java.util.List'

[未能将类型为';java.lang.String[]和';的属性值转换为属性的必需类型';java.util.List',java,spring,spring-mvc,thymeleaf,Java,Spring,Spring Mvc,Thymeleaf,我正在使用Thymeleaf并尝试进行一些对象绑定,但是如果我有一个带有列表的对象,我不知道如何进行绑定。让我解释一下: 我的模型: @Entity public class Project { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @NotNull private String name; @NotNull @Lob

我正在使用Thymeleaf并尝试进行一些对象绑定,但是如果我有一个带有列表的对象,我不知道如何进行绑定。让我解释一下:

我的模型:

@Entity
public class Project {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    private String name;

    @NotNull
    @Lob
    private String description;

    @NotNull
    private Date startDate;

    private String status;

    @ManyToMany
    private List<Role> rolesNeeded;

    @ManyToMany
    private List<Collaborator> collaborators;

    public Project() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public List<Role> getRolesNeeded() {
        return rolesNeeded;
    }

    public void setRolesNeeded(List<Role> rolesNeeded) {
        this.rolesNeeded = rolesNeeded;
    }

    public List<Collaborator> getCollaborators() {
        return collaborators;
    }

    public void setCollaborators(List<Collaborator> collaborators) {
        this.collaborators = collaborators;
    }
}
@实体
公共类项目{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人长id;
@NotNull
私有字符串名称;
@NotNull
@高球
私有字符串描述;
@NotNull
私人日期开始日期;
私有字符串状态;
@许多
需要私人列表角色;
@许多
私人名单合作者;
公共工程(){
}
公共长getId(){
返回id;
}
公共无效集合id(长id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共字符串getDescription(){
返回说明;
}
公共void集合描述(字符串描述){
this.description=描述;
}
公共字符串getStatus(){
返回状态;
}
公共无效设置状态(字符串状态){
这个状态=状态;
}
公共列表GetRolesRequired(){
需要返回角色;
}
public void setRolesNeeded(列表rolesNeeded){
this.rolesNeeded=rolesNeeded;
}
公共列表getCollaborators(){
返回合作者;
}
公共协作者(列出协作者){
this.collaborators=协作者;
}
}
我的html表单:


项目名称:
项目说明:
项目状态:
活跃的
存档
没有开始
项目角色:
  • 开发商
我得到了一个错误:

错误!!!!:字段“RolesRequired”上的对象“project”中的字段错误: 拒绝值 [com.impender.instateam.model。Role@145d6cd4,com.impender.instateam.model。Role@73020d6f]; 代码 [typeMismatch.project.RolesRequired,typeMismatch.RolesRequired,typeMismatch.java.util.List,typeMismatch]; 论据 [org.springframework.context.support.DefaultMessageSourceResolvable: 代码[project.rolesNeeded,rolesNeeded];参数[];默认消息 [RolesRequired]];默认消息[无法转换的属性值] 将“java.lang.String[]”键入所需的“java.util.List”类型 属性“RolesRequired”;嵌套异常为 java.lang.IllegalStateException:无法转换类型的值 “java.lang.String”转换为所需类型 属性“rolesNeeded[0]”的“com.impender.instateam.model.Role”:否 找到匹配的编辑器或转换策略]

基本上,据我所知,复选框输入返回一个字符串[],但我的对象需要一个列表,因此无法执行绑定

如何绑定列表中的数组?(您有示例吗?)


谢谢。

如果您的
角色
bean具有
活动
布尔属性,您可以执行以下操作(简化):

  • 开发商

如果没有,您可以将
rolesNeeded
存储在隐藏字段中,并用javascript填充它们。

如果您的
角色
bean具有
活动
布尔属性,您可以这样做(简化):

  • 开发商
如果没有,您可以将
rolesNeeded
存储在隐藏字段中,并用javascript填充它们

<ul class="checkbox-list">
  <li th:each="role,stat : ${project.rolesNeeded}">
    <input th:field="*{rolesNeeded[__${stat.index}__].active}" type="checkbox"/>
    <input th:field="*{rolesNeeded[__${stat.index}__].name}" type="hidden"/>
    <span class="primary" th:text="${role.name}">Developer</span>
  </li>
</ul>