我知道,当标记具有th:field属性时,不能使用th:selected。我认为这是因为th:field标记可以通过查看字段所引用的列表是否包含该项目来确定已选择的项目。
问题在于,幕后发生的任何事情都无法正常运行,这就是为什么我要覆盖它。
从某种意义上说,它似乎无法正确识别应从多态对象列表中选择的内容,因此无法正常工作。 最终选择了User的一个子类,并仅显示是否被选中(忽略其他子类)
所以我想知道的是一种决定自己选择什么的方法(我能够做到)并将其输入到th:field中,或者关于工作时我可能会缺少的任何信息在百里香中具有多态类。
下面是我已经拥有的样本
<select class="toMark" id="toMark" th:field="*{assessments[__${a.index}__].markerDtos[__${m.index}__].toMark}" multiple="multiple">
<option th:each="user : *{unit.cohort}" th:value="${{user}}" th:id="${{user}}" th:text="${user.userName}"></option>
</select>
用户类别
@Entity
@Table(name = "Users")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="perms", discriminatorType=DiscriminatorType.STRING)
public abstract class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = -6187306015251367488L;
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String userName;
private String password;
@ManyToMany(mappedBy = "members")
private List<Group> groups = new ArrayList<>();
@OneToMany(mappedBy = "accountable")
private List<SoloTask> soloTasks = new ArrayList<>();
@ManyToMany(mappedBy = "cohort")
private List<Unit> units = new ArrayList<>();
//Getters and setters...
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
User other = (User) obj;
return id != null && id.equals(other.getId());
}
public int hashCode() {
return 13;
}
}
预先感谢
耶帕德