thymeleaf 调用java,thymeleaf模板引擎调用java类中的方法(附源码)

在My Blog项目的issue页面收到了这个问题,issue描述的是关于如何在thymeleaf模板页面中如何调用java类中的方法,问题描述如下截图:

ab7653affab982b574eb7acc55df2e04.gif

但是只有截图,并没有报错原因及错误截图之类的有效信息,那哥们儿也没留下其他的信息,因此只能自己去模拟并试着去解决和分析这个问题,由issue描述可以得出异常信息:

Attemptedto call method test()onnullcontextobject

从这条异常信息可以大致得出一个答案,调用的test()方法处于一个空对象中,即context域中并没有对应的java实例,因此无法调用。

当天也就回复了这个issue,给出的答案如下:

thymeleaf 的context,即提供数据的地方,基于web的context,即WebContext相对context增加 param,session,application变量,并且自动将request atttributes添加到context variable map,可以在模板直接访问。

虽然给出了答案,但是较为理论派,而且也没有复现此bug,因此又按照issue中的描述重新建了一个springboot+thymeleaf的项目,并且试着重现此问题并解决。

问题重现

重新编写了代码,没有把调用的java实例放入request对象中,重现代码如下:

publicclassMethodTestController{

@RequestMapping("/test1")

publicStringtest1(HttpServletRequestrequest){

return"test";

}

}

最终将此问题重现:

ab7653affab982b574eb7acc55df2e04.gif

将此问题重现后,我又想,如果调用的方法为空会报什么错误呢?试着写了一下:

得到了如下的报错:

ab7653affab982b574eb7acc55df2e04.gif

两个异常分别是:

异常1 :

Attemptedto call method onnullcontextobject

调用的方法处于一个空对象中,即调用实例为空。

异常2 :

Methodcannot be found

方法不存在

这两个异常都属于org.thymeleaf.exceptions.TemplateProcessingException:ExceptionevaluatingSpringELexpression异常。

问题解决方案

分析至此,异常出现的问题已经无比清晰:

针对于异常1,需要将期望调用的java实例存入thymeleaf的context域中,代码层面即为:将实例对象存入Request对象中。

针对于异常2,则更加简单,仔细检查代码,不要写错调用方法名即可,不要使用未定义的方法。

ab7653affab982b574eb7acc55df2e04.gif

结语

首发于我的个人博客。

如果有问题或者有一些好的创意,欢迎给我留言,也感谢向我指出项目中存在问题的朋友。

代码和这次的问题都是My Blog项目中的,如果你想继续了解该项目可以查看整个系列文章Java开源博客My-Blog(SpringBoot+Docker)系列文章,也可以到我的GitHub仓库或者开源中国代码仓库中查看源码及详细的部署过程和使用文档。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值