使用Spring Boot在条件布局中包含基于条件的片段

时间:2016-05-19 04:47:39

标签: spring-mvc spring-boot thymeleaf

我是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**

请建议我解决方案。

感谢。

2 个答案:

答案 0 :(得分:1)

您可以在条件上使用表达式来包含不同的片段。 docs of thymeleaf中有一个例子。

  

templatename :: domselector中,templatenamedomselector都可以是功能齐全的表达式。在下面的示例中,我们希望根据条件包含不同的片段。如果经过身份验证的用户是管理员,我们将显示与常规用户不同的页脚:

<div th:replace="fragments/footer :: ${#authentication.principal.isAdmin()} ? 'footer-admin' : 'footer'">
  &copy; 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>