将枚举与列表Thymeleaf

时间:2019-07-29 20:37:42

标签: java spring-boot thymeleaf

我在实体中插入了一个枚举,并带有一些默认值。我想将其与分配给该实体的枚举进行比较。

我尝试在列表中查找枚举字符串,但没有得到结果

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>

预期结果是将匹配项标记为“已选中”

1 个答案:

答案 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);
}