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

使用Spring Boot、Thymeleaf和Oracle:如何在片段中定义的网站菜单中动态填充子菜单?

廉飞捷
2023-03-14

我有一个包含大约30个html thymeleaf模板的网站。我有一个home_navigation.html片段,作为标题包含在所有模板中。这个标题定义了一个带有弹出子菜单的主导航菜单。我的一个主菜单下的弹出子菜单需要从我的oracle数据库表中生成。

通常,当将数据从数据库传递到Thymeleaf模板时,我会将代码放在控制器中,以调用java DAO并返回链接对象列表,然后使用将该列表添加到控制器中的模型。setAttribute。然后在Thymeleaf模板中,我将在“th:each”中遍历“${List}”,输出

我还可以将参数传递到片段中。所以这不是问题,但是...

由于主导航菜单作为标题片段添加到每个模板的开头,因此我必须进入每个定义的控制器,添加代码,将链接列表拉入模板,然后将列表传递到每个页面的片段中。这大约是30次!!!

怎样使用Spring Boot和Thymeleaf,是否有人将数据馈送到片段中,以从数据库动态填充菜单,然后将其作为标题片段添加到站点上的每个页面/模板中?

有没有一种方法可以为片段创建控制器,并在片段内容放入每个页面之前,让每个页面调用片段的控制器?

非常感谢。

共有1个答案

元彦君
2023-03-14

根据用户登录时菜单是否可以更改,有多种方法可以解决此问题。如果它可以更改,那么您可以创建一个基本控制器类,该类具有一个用@modeldattribute注释的方法。您的所有控制器都将从此基类继承。该方法将获取菜单项,并在每次请求页面时将其添加到模型中。此类类的一个简单示例是:

  @Component
  public abstract class BaseController {
      @Autowired
      private AlphabetService alphabetService;

      @ModelAttribute(name = "alphabet")
      public List<String> getAlphabet() {
          return alphabetService.getCharacters();
      }
  }

您的页面将正常访问它们

th:each="character : ${alphabet}"

您还可以通过执行以下操作直接在页面中访问该服务

th:each="character: ${@alphabetService.getCharacters()}"

如果用户登录时菜单项没有更改,那么您可以在类级别将@SessionAttributes(“alphabet”)添加到上述示例中,并且当第一个页面在会话中显示并缓存以供将来访问时,服务方法只会被调用一次。

 类似资料:
  • 我用的是Spring boot和Thymeleaf。我有一个模式表单来创建/编辑信息: 我不能放在索引中。html,因为对象为null。当用户单击按钮以装箱/编辑用户时,将弹出模式和数据。按钮为: 我的JQuery函数: 控制器: 这是我放在索引上的div标记。html 我已经成功地插入模态超文本标记语言体与数据加载,但模态不正确显示。

  • 问题内容: AFAIK,Python中没有curses菜单扩展,因此您必须推出自己的解决方案。我知道这个补丁http://bugs.python.org/issue1723038,但我不知道它的当前状态是什么。我在http://www.promisc.org/blog/?p=33上找到了一个很好的Python类,用于包装我想要的“ cmenu”,但我对此也有疑问。我想制作一个菜单,用户可以选择一个

  • 问题内容: 我需要一些帮助。在Excel(2013)VBE中使用Selenium Basic ChromeDriver(v 75.0.3770.140)进行Chrome(v75.0.3770.100)。如果存在客户id#,则有一个输入框会生成一个动态列表。我希望填写客户ID#,然后从动态下拉列表中选择。但是第一步,我正在努力将文本输入框。我可以点击带有 但是,当我尝试在框中填写以下内容时: 我收到

  • 当我加载我的newrecord视图时,它应该封存状态表中的所有记录,并填充到select元素中?。 当我从select fatch中选择state时,该状态的所有dstrict列表?。 当我在编辑模式下打开相同的记录时,状态和区域列表显示其默认值?。 模型 Thymeleaf视图

  • 伙伴。我有一个菜单组件在我的next.jsWeb应用程序。菜单的数据是通过GraphQL动态生成的。我想要菜单组件的服务器端渲染。我尝试使用getStatic Props()在服务器上呈现数据。但是getStatic Props()不能在组件上工作,它只能在页面上工作。 现在,我该如何解决这个问题呢?我不想在每一页的菜单上重复相同的代码,我想重复使用代码或类似的东西。请帮我解决这个问题。提前感谢。

  • 在SpringMVC项目的控制器中,我确实有一个列表,我将其放在模型映射中,如下所示。 现在我想在thymeleaf视图中使用post方法动态填充它。为此,我使用了一个JavaScript脚本。这不是所有的html代码,但为了简单起见,我只添加了JS部分。 这是测试有效的后方法。 它向我显示了错误:错误解析模板[],模板可能不存在或任何已配置的模板解析程序都无法访问,这肯定是因为:。有没有办法动态