springboot整合freemarker利用pjax 实现单页局部刷新

springboot整合freemarker利用pjax 实现单页局部刷新

使用 Springboot + freemarker + pjax 实现单页应用,局部刷新。提升用户体验,降低服务器压力。

示例说明

提供一个完整 Demo 供参考

Fork me on Gitee

为什么用 freemarker

虽然 thymeleaf 是 springboot 官方推荐的模板,优点一大堆。
如果你是(研发、UI)一起使用,建议使用thymeleaf,毕竟可以直接运行显示静态数据,UI、研发互补干扰。这一块就吊打了 freemaker。

其他情况我会选择 freemarker。不为其他的,写起来方便,随便百度一篇文章,语法这一块就基本明白了。而且 freemarker 的语法跟我们平时的编码语法很接近,
你就不用在写的过程去考虑语法该怎么写。

比如常用的 if、for:

<#assign a = 1 />
<#assign b = 2 />

<#if a == b >
    ...do something
<#elseif a == 1 >
    ...do something
<#else>
    ...do something
</#if>

<#list userlist as user>
    ...do something
</#list>

总之还没入坑thymeleaf的同学,有这个空闲时间学习thymeleaf还不如学个前端框架来的实际。

题外话:用thymeleaf实现局部刷新,比 freemaker 简单

工作原理

  • 定义 2 套模板。

    • 一套用于初始化、页面刷新
    • 一套 pjax 模板,普通请求
  • 添加 Pjax 拦截器

    • 拦截器中判断是否 pjax,并根据结果返回指定模板
    • 由于 pjax 请求不能继承父页面,只能刷新局部,所以如果需要对父页面的一些动态内容进行指定,需要在拦截器中完成
  • 页面渲染原理

    • 普通请求:利用 Freemarker 的 macro 在子页面进行替换操作
    • pjax 请求:利用 Freemarker 的 macro 在子页面进行替换操作,并动态添加到指定的 div 中,实现局部刷新

    我测试下,不能使用 freemarker 插件的 extend override等,如果能使用,请高手指教。

扩展

菜单选中

为了保证页面刷新后,菜单保持不变。建议菜单放在 cookie 中。也可以利用缓存保持。

重定向

头部添加
request.headers[‘X-PJAX-URL’] = “http://35liuqi.com/redirect”

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值