我可以使用具有多个值的Thymeleaf switch语句吗?

时间:2017-02-10 13:55:50

标签: java html spring spring-boot thymeleaf

控制器

@ControllerAdvice
public class UserRoleAdvice {

    private static final Logger log = LoggerFactory.getLogger(UserRoleAdvice.class);

    @Autowired
    UsersRepository usersRepository;

    @ModelAttribute("currentRole")
    public String currentRole(Principal principal, Model model) {
        Users user = usersRepository.findOneByInitialName(principal.getName());
        if (user != null) {
            log.info(user.getRole().toString());
            model.addAttribute("currentRole", user.getRole().toString());
            return user.getRole().toString();
        } else {
            return "ANONYMOUS";
        }
    }
}

我使用Thymeleaf switch语句根据数据库中的值控制页面上显示的内容。

<th:block th:unless="${currentROLE} eq 'EMPLOYEE'">
    <a href="/login" th:href="@{/login}" class="btn-login">Log In</a>
</th:block>

如果${currentROLE}显示字符串EMPLOYEE或MANAGER,我想隐藏登录页面,但如果${currentROLE}没有值,则显示它。

有没有办法做这样的事情(伪代码)?

<th:block th:unless="${currentROLE} eq 'EMPLOYEE' & || eq 'MANAGER'">
    <a href="/login" th:href="@{/login}" class="btn-login">Log In</a>
</th:block>

甚至

<th:block th:unless="${currentROLE} exists>
    <a href="/login" th:href="@{/login}" class="btn-login">Log In</a>
</th:block>

2 个答案:

答案 0 :(得分:2)

th:unless是正确的方法。但我认为你的检查是错误的。试试:

"${currentROLE.name == 'EMPLOYEE'}"

和/或

"${currentROLE.name} == 'EMPLOYEE or MANAGER'"

"${currentROLE.name} == 'EMPLOYEE' or ${currentROLE.name} == 'MANAGER'"

答案 1 :(得分:1)

http://www.thymeleaf.org/doc/tutorials/2.1/usingthymeleaf.html#switch-statements

有三种可能性的东西,你可能不想做if / unless的事情。那也不是开关;开关基本上是开关(外壳,外壳,外壳......)。这可以通过if语句显然完成,但超出一些选项开关更容易阅读和扩展。

在这种情况下,它看起来更像是

<div th:switch="${currentROLE.name}">
    <span th:case="EMPLOYEE">stuff</span>
    <span th:case="MANAGER">other stuff</span>
    <span th:case="*">default stuff</span>
</div>

“*”表示默认情况;如果没有一个案例是真的那就去那里。

如果唯一可能的值是EMPLOYEE,MANAGER或什么都没有,那么值得注意的是,如果没有比较,任何非“false”,“off”或“no”的字符串都会计算为true。所以:if = $ {currentROLE.name}如果字符串在那里会发生并且在th时不是null:除非= $ {currentROLE.name}在没有值的情况下发生。这基本上就像JavaScript所做的那样真实或虚假。

要考虑的是该计划未来的发展方式以及您打算在这里开展的工作。