当前位置: 首页 > 知识库问答 >
问题:

Thymeleaf用开关条件替换导航条

阎单鹗
2023-03-14

具有不同角色的用户需要在网页顶部有不同的navbar。我的topnavs是th:片段,用单独的文件编写,这部分代码工作正常。但是当我使用th: switch和th:替换时,所有topnavs都会显示在网页中,而不仅仅是一个。

我在寻找这些问题的解决方案,但没有任何帮助:

带有多个大小写的胸腺叶开关语句

如何使用thymeleaf条件-if-elseif-else

我尝试过的事情:

<span th:if = "${role.value} == 'role1' " th:replace = "fragments/topnav :: navbar_role1"></span>
<span th:if = "${role.value} == 'role2' " th:replace = "fragments/topnav :: navbar_role2"></span>

#2

<span th:if = "${role} == 'role1' " th:replace = "fragments/topnav :: navbar_role1"></span>
<span th:if = "${role} == 'role2' " th:replace = "fragments/topnav :: navbar_role2"></span>

#3

<span th:if = "${role} eq 'role1' " th:replace = "fragments/topnav :: navbar_role1"></span>
<span th:if = "${role} eq 'role2' " th:replace = "fragments/topnav :: navbar_role2"></span

#4

<th:block th:switch = "${role}">
    <div th:case = "${role} eq 'role1' " th:replace = "fragments/topnav :: navbar_role1"></div>
    <div th:case = "${role} eq 'role2' " th:replace = "fragments/topnav :: navbar_role2"></div>
</th:block>

在调试器中,我可以在Java代码中看到String类型的字段角色具有值角色2。它不只是显示第二个导航栏,而是显示两个导航栏。一定是我在Thymeleaf语法中遗漏了什么?

共有1个答案

易雅畅
2023-03-14

在本例中,目标片段需要位于子元素中,以使替换按预期工作。

假设我们在片段/topnav.html中有以下片段:

<div th:fragment="navbar_role1">
    <div>This is navbar role 1</div>
</div>
<div th:fragment="navbar_role2">
    <div>This is navbar role 2</div>
</div>

那么您的主页面可以如下结构:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>Switch Demo</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">        
    </head>
    <body>
        <th:block th:switch="${role}">
            <th:block th:case="'role1'">
                <div th:replace="fragments/topnav :: navbar_role1"></div>
            </th:block>
            <th:block th:case="'role2'">
                <div th:replace="fragments/topnav :: navbar_role2"></div>
            </th:block>
        </th:block>
    </body>
</html>

显然,您可以使用th:block元素或其他元素,例如

另请注意,当使用th:开关时,您不需要以下各项:

th:case="${role} eq 'role1'" // NOT needed

您可以简单地使用值本身:

th:case="'role1'"

这是在此处使用开关语句的好处之一。

 类似资料:
  • 导航条使用的事 HTML5 的 nav 标签,里面推荐使用 div 容器,导航条有两个主要的部分。一个是 logo 或品牌链接和导航链接。你可以设置这些链接的对齐方式。 右对齐链接 使用右对齐导航链接,只要增加一个 right 类到 <ul> 标签里面。 <nav> <div class="nav-wrapper"> <a href="#" class="brand-logo">Logo<

  • 7.1.3导航条件说明 导航实现,在硬件和软件方面是由一定要求的,需要提前准备。 1.硬件 虽然导航功能包集被设计成尽可能的通用,在使用时仍然有三个主要的硬件限制: 它是为差速驱动的轮式机器人设计的。它假设底盘受到理想的运动命令的控制并可实现预期的结果,命令的格式为:x速度分量,y速度分量,角速度(theta)分量。 它需要在底盘上安装一个单线激光雷达。这个激光雷达用于构建地图和定位。 导航功能包

  • 问题内容: 我可能在做一些非常愚蠢的事情,但是我很沮丧。 我有一个数据框,我想用超过零的值替换特定列中的值。我以为这是实现此目标的一种方式: 如果将通道复制到新的数据框中,这很简单: 这完全符合我的要求,但似乎无法与通道一起用作原始数据帧的一部分。 问题答案: 可以在0.20.0之前的熊猫版本上正常工作,但是由于pandas为0.20.0 ,因此不推荐使用,因此应避免使用它。而是可以使用或索引器。

  • 导航条组件。 Usage 全部引入 import { NavigationBar } from 'beeshell'; 按需引入 import { NavigationBar } from 'beeshell/dist/components/NavigationBar'; Examples Code 详细 Code import { NavigationBar } from 'beeshell

  • 我想根据条件更改我的开始导航片段。我的起始片段可以是片段1或片段2。有没有办法实现它?

  • jd.setNavigationBarTitle(OBJECT) 动态设置当前页面的标题。 OBJECT 参数说明: 参数 类型 必填 说明 title String 是 页面标题 success Function 否 接口调用成功的回调函数 fail Function 否 接口调用失败的回调函数 complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行) 示例代码