我在实体中插入了一个枚举,并带有一些默认值。我想将其与分配给该实体的枚举进行比较。
我尝试在列表中查找枚举字符串,但没有得到结果
public class Role{
@NotEmpty
@Enumerated(value = EnumType.STRING)
private Authority authority;
public static enum Authority {
ROLE_ADMIN,
ROLE_USER
}
}
public class UserCheck implements UserDetails {
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private List<Role> roles;
public List<Role> getRoles() {
return roles;
}
}
遍历枚举并将其与列表进行比较
<div class="form-group">
<label for="exampleSelectStore">Roles</label> <select class="form-control" id="exampleSelectStore" multiple="multiple">
<option th:each="authority : ${T(cl.tricotcorp.app.checklist.models.entity.Role.Authority).values()}" th:text="${authority}" th:value="${authority}" th:selected="${#lists.contains(userCheck.getRoles(), authority)}"> </select>
</div>
预期结果是将匹配项标记为“已选中”
答案 0 :(得分:2)
getRoles()
返回一个List<Role>
,而authority
是一个Authority
,因此,您基本上是在询问是否有Role.equals(Authority)
,根据定义,它始终是{ {1}}。
一种易于修复的方法是在false
中添加一个辅助方法:
UserCheck
然后您的Thymeleaf代码为:
public boolean hasAuthority(Authority authority) {
return this.roles.stream().anyMatch(r -> r.getAuthority() == authority);
}