控制器
@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>
答案 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所做的那样真实或虚假。
要考虑的是该计划未来的发展方式以及您打算在这里开展的工作。