我是Thymeleaf模板引擎的新手,但我使用其他模板引擎,如刀片。
我希望包含基于条件的片段,例如我为不同的用户提供不同的菜单,例如admin,manager,super user,user等。我将这些菜单保存在标题中,每个标题都在不同的片段文件中,如{{1 }}。
现在我想查看用户是否已登录。如果没有使用defaultheader或登录时显示布局,则检查用户是否为admin。如果用户是admin而不是带有adminheader的显示页面,否则显示带有userheader的页面。
努力:
直到现在页面打开时会显示默认标题,我的设计布局文件如下面的代码
的layout.html
adminheader, defaultheader, userheader.html
我已在此布局文件中包含<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head layout:include="layouts/fragments/head :: headFragment">
</head>
<body>
<div class="container-fluid">
<header id="header" class="row navbar-fixed-top" layout:include="layouts/fragments/header :: headerFragment" >
</header>
<section class="row margin-top-120">
<div class="container-fluid">
<section id="main-content" class="col-lg-12" layout:fragment="content">
</section>
</div>
</section>
<footer id="footer" class="row">
<div class="container-fluid" layout:include = "layouts/fragments/footer :: footerFragment">
</div>
</footer>
</div>
</body>
</html>
并且工作正常。现在不知道如何根据条件包含其他标题片段。
headerFragment
控制器
**Updated**
请建议我解决方案。
感谢。
答案 0 :(得分:1)
您可以在条件上使用表达式来包含不同的片段。 docs of thymeleaf中有一个例子。
在
templatename :: domselector
中,templatename
和domselector
都可以是功能齐全的表达式。在下面的示例中,我们希望根据条件包含不同的片段。如果经过身份验证的用户是管理员,我们将显示与常规用户不同的页脚:
<div th:replace="fragments/footer :: ${#authentication.principal.isAdmin()} ? 'footer-admin' : 'footer'">
© 2013 The Static Templates
</div>
答案 1 :(得分:0)
感谢@Patrick给你答案。但我找到了解决方案。
我不知道它是否好。请告诉。
的layout.html
<!DOCTYPE html>
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head layout:include="layouts/fragments/head :: headFragment"></head>
<body>
<div class="container-fluid">
((${session.containsKey('user')}) ?
<header id="header" class="row navbar-fixed-top" layout:include="layouts/fragments/admin-Header :: headerFragment">
</header> :
<header id="header" class="row navbar-fixed-top" layout:include="layouts/fragments/default-Header :: headerFragment">
</header>)
<section class="row margin-top-120">
<div class="container-fluid">
<section id="main-content" class="col-lg-12" layout:fragment="content">
</section>
</div>
</section>
<footer id="footer" class="row">
<div class="container-fluid" layout:include = "layouts/fragments/footer :: footerFragment">
</div>
</footer>
</div>
</body>
</html>