注:本文所需图片或者文件都在文章末尾处
小编最近开发出现一个问题,借鉴百度前人的经验和自己的一些思考,总算把Bug解决掉。虽然问题看起来容易,但是加上自己的思考,最后还是能想出,看来自己摸索的时间挺久的。在此,为了能减少大家遇到同样问题摸索的时间,如果确实能够帮到您的话,小编倍感荣幸。
至于什么问题让小编有所困惑呢?——所有Thymeleaf页面能锚链接到当前页面的某个位置,而且只能在一个页面上写。
我们使用SpringBoot+Thymeleaf技术时,Thymeleaf是通过Controller进行页面访问的,Controller可以向Thymeleaf发送数据进行页面的交互。问题是要进行所有本页面的跳转,那本页面的名称Thymeleaf又怎么能知道呢?貌似可以用每一个Controller发送页面名称到Thymeleaf里面,
这样每一个Thymeleaf就可以用到当前页面名称了,问题得以解决。小编在百度摸索试过了很多次之后,隐约有这种想法,如果使用这种方法,那真的大错特错了,因为还有更好的方法。
怎么玩呢?直接上代码:
正确的步骤:
注:把页面的头部和尾部独立抽取出来,使用时引入即可。

代码的意思不清楚,先完成再细讲。

#foot锚链接位置:

结果小编亲测有效,重要的是懂逻辑。我把Thymeleaf里的head和foot独立分离出来,然后在Thymeleaf引入,只要在head.html设置了本页面的锚链接,那么所有Thymeleaf页面都能锚链接到当前页面的某个位置,这是个技巧。然后上面的代码逻辑,小编解释一下:
当前页的包括参数的路径,浏览器url的值可以在Thymeleaf页面这样得出:

#httpServletRequest.requestURL使用的是Thymeleaf的内置对象形式,真实值就是浏览器访问当前页路径.html结尾前的值。例如本地访问index.html页面,那么#httpServletRequest.requestURL值为
http://localhost/index.html |
后面?代表着url连接的参数:
#httpServletRequest.queryString就是参数的值,比如参数是name,值为jackson,那么<div th:text="${#httpServletRequest.requestURL +'?'+ #httpServletRequest.queryString}"></div>输出结果为:
http://localhost/index.html?name=jackson |
在此,有一个问题,${#httpServletRequest.requestURL +'?'+ #httpServletRequest.queryString}是用<div th:text="这里"></div>中写出结果,那我们在<a th:href="值"></a>能否写出并跳转?显然th:href中套用th:text是不合理的,当然方法还是有的。
通过javascript的方式把url的值传到a标签中的href中,首先引入jquery文件,然后是在script标签写上th:inline="javascript",正确如下:
<script type="text/javascript" th:inline="javascript"> |
然后这样:
<script type="text/javascript" th:inline="javascript"> /*<![CDATA[*/ var basePath = /*[[${#httpServletRequest.requestURL +'#foot'}]]*/; $(".sandian").attr("href",basePath); /*]]>*/ </script> |
注意: /*<![CDATA[*/和/*]]>*/必须在<script></script>内写上,然后在/*[[]]*/添加引入的值,否则<script></script>不解析。
然后赋值给<a href=""></a>内的href属性,这样就完成问题所需代码的逻辑。然后就没有然后了。
至此,所有代码全部解决。当然,还需要上述所需的jquery文件,等等,不要急。
1、jquery-1.11.3.min.js文件:
jquery-1.11.3.min.js文件下载 提取码:6666
结束语
今天就总结小编我自主开发的第八课:
1、虽然本文是小编第八篇博客,但内容简单实用,也希望这篇博客能对您有所感触。
2、在java的成长之路上,往往细节也能成就你的大好前途,养成知识共享往往能提高你的价值。
3、面对困难,要能砥砺前行,不畏惧,方能有所突破。
4、小编也是刚进入java行业大军里面的,内容有疏忽请指正,小编感激不尽。