Thymeleaf添加全局静态变量

在Thymeleaf模板引擎中,为了解决在多个页面共享同一变量的需求,可以通过创建一个全局变量实现。文章介绍了如何设置这个全局变量,并在各个页面中调用,经过测试确认该方法有效,但可能存在的潜在问题尚待进一步探索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:在使用Thymeleaf模板时,某些地方需要使用全局变量,即在Java中一处赋值,在任何页面均可获取。

解决方法:

    @Resource
    private void configureThymeleafStaticVars(ThymeleafViewResolver viewResolver) {
        println("configureThymeleafStaticVars 配置thymeleaf静态变量");
        if(viewResolver != null) {
            Map<String, Object> vars = new HashMap<>();
            vars.put("var", "Hello World");
            viewResolver.setStaticVariables(vars);
        }
    }

改进:


    @Resource(name="thymeleafViewResolver")
        ThymeleafViewResolver thymeleafViewResolver;
        //添加全局静态变量
         if (thymeleafViewResolver != null) {
                Map<String, Object> vars = new HashMap<>();
                vars.put("shirouser", principal);
                thymeleafViewResolver.setStaticVariables(vars);
            }

在任何html中均可使用此变量

  <a href="#" th:if="${shirouser} != null" ><span th:text="${shirouser.nickname}"></span></a>

测试此法可行,但尚未知是否会产生其他问题。

### Thymeleaf 变量作用域详解 在Thymeleaf中,变量可以在不同的上下文中定义并具有不同范围的作用域。理解这些作用域能够帮助开发者更好地管理数据流以及提高模板渲染效率。 #### 局部作用域 (Local Scope) 局部变量仅限于当前标签及其子标签内有效。一旦超出这个区域,则无法访问该变量。可以通过`th:with`属性来创建这样的临时实体[^1]: ```html <div th:with="localVar='This is a local variable'"> <span th:text="${localVar}"></span> </div> <!-- localVar cannot be accessed here --> ``` #### 请求作用域 (Request Scope) 当通过控制器传递给视图层的对象,默认情况下会处于请求范围内。这意味着在整个HTTP请求周期里都可以获取到它们的信息,在多个页面间共享也是可行的,只要是在同一次请求过程中[^2]。 例如在一个Spring MVC应用中设置模型属性: ```java @GetMapping("/example") public String example(Model model){ model.addAttribute("requestScopedVariable", "Value from controller"); return "viewName"; } ``` 对应的HTML文件可以这样使用它: ```html <p th:text="'The value of request scoped var is ' + ${requestScopedVariable}" /> ``` #### 会话作用域 (Session Scope) 某些时候可能希望保存用户特定的数据直到浏览器关闭为止,这时就可以利用session对象来进行存储操作。任何存入其中的东西都会持续存在于用户的整个浏览期间,并且只对该用户可见[^3]。 向会话添加新项的方式如下所示(Java代码片段): ```java @GetMapping("/set-session-var") public String setSessionVar(HttpSession session){ session.setAttribute("sessionVar","A value stored in the HttpSession object."); return "redirect:/show-session-var"; } ``` 而在前端展示这部分内容时只需像下面这样做即可: ```html <p th:text="'Your session variable contains this message:' + ${session['sessionVar']}" /> ``` #### 应用程序作用域 (Application Scope) 最后一种类型的应用级作用域意味着其内的条目可供所有来访者共同读取;换句话说就是全局性的配置参数或者是静态资源链接地址等信息适合放置于此处[^4]。 为了把东西放进application scope里面,通常会在启动类或者配置类上做文章,比如采用`@Component`注解配合`ServletContext`接口完成这项工作: ```java @Component public class ApplicationScopeConfig implements ServletContextAware { @Override public void setServletContext(ServletContext servletContext) { servletContext.setAttribute("appWideSetting", "Global setting available to all users"); } } // 或者直接注入ServletContext并在适当的地方调用setAttribute方法 @Autowired private ServletContext context; ... context.setAttribute("anotherAppWideSetting", someObject); ``` 之后便能在任意地方轻松引用此设定啦! ```html <span th:text="'An application-wide property says: ' + ${#ctx.applicationMap.appWideSetting}" /> ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值