JFinal中使用pjax

今天在osc上看到有人聊起pjax,好奇写了个jfinal 模版的版本,供大家参考!

一、页面

#if (pjax)
    #@main()
#else
    #@layout()
#end

#define main()
<h1>Blog管理 ---&gt; 创建Blog
</h1>
<div class="form_box">
	<form action="/blog/save" method="post">
		#include("_form.html")
	</form>
</div>
#end

二、控制器java代码

public void index() {
	render("index.html");
}

// 重写render,此处代码应该抽到通用控制器中,然后继承她
private void isPjax() {
	String pjaxTag = getHeader("X-PJAX");
	boolean isPjax = StrKit.notBlank(pjaxTag) && pjaxTag.equalsIgnoreCase("true");
	setAttr("pjax", isPjax);
}

@Override
public void render(Render render) {
	super.render(render);
	isPjax();
}

@Override
public void render(String view) {
	super.render(view);
	isPjax();
}

完毕,完美兼容pjax和非pjax的情况!

评论区

JFinal

2017-03-16 15:14

高手一出手就不同反响,代码简洁利落,关键是 jfinal template engine 用着很溜啊

JFinal

2017-03-16 15:32

你这个 layout 在同一页面中动态切换的玩法很有创意啊,8 错 8错

威仔

2017-03-16 15:53

没怎么懂?可否有详细代码?

Dreamlu

2017-03-16 16:15

@JFinal 过奖过奖,jfinal template engine真心挺棒。

Dreamlu

2017-03-16 16:17

@威仔 你可以先了解下 pjax,https://github.com/defunkt/jquery-pjax

JFinal

2017-03-16 16:40

@Dreamlu 越来越多的人懂得 jfinal template engine 在表达什么了

EATI001

2017-06-22 10:27

木看懂怎么个配合pjax使用,pjax是要指定容器的,现在这个是直接改弯模板并刷新。

Dreamlu

2017-06-23 10:43

@EATI001 你好好看看 https://github.com/defunkt/jquery-pjax 下面的说明

EATI001

2017-06-25 15:54

@Dreamlu 确实是没看懂,就这段说了下,
Server-side configuration

Ideally, your server should detect pjax requests by looking at the special X-PJAX HTTP header, and render only the HTML meant to replace the contents of the container element (#pjax-container in our example) without the rest of the page layout. Here is an example of how this might be done in Ruby on Rails:

def index
if request.headers['X-PJAX']
render :layout => false
end
end
在触发pjax如果不指定css#container容器后台判断是不无获取期指定的头部信息“X-PJAX“那么模块切换刷新就木起效果,还请高手指点下怎么使用^_^!!

Dreamlu

2017-06-28 11:14

@EATI001 jquery-pjax发起pjax的时候会带上“X-PJAX”的请求头,我判定下是否有这个请求头就知道是否为pjax请求,pjax请求我返回页面一个标记setAttr("pjax", isPjax);
页面判定是否有这个标记显示对应的页面。真个流程就这样

EATI001

2017-06-28 12:19

@Dreamlu 关键是:
1、在不设定容器的前提下,要怎么样才能发起pjax请求;
2、在定容器的前提下,这个模板处理怎么用,因为pjax发起请求,是通过指定div为容器进行刷新的。

lyh061619

2017-08-24 11:34

帮补充下,配合以上作者实现模板动态切换,在页面pjax使用如:
$(document).pjax("a", "#container")或
$(document).pjax("[data-pjax]a, a[data-pjax]", "container"),要设置replace属性,默认是false,
$(document).pjax("a", "#container", {replace: true})或
$(document).pjax("[data-pjax]a, a[data-pjax]", "container", {replace: true}),不然刷新内容不会被覆盖。

天朝子民

2019-08-03 14:54

链接:https://pan.baidu.com/s/1pgImImrDdSsVdrEQfP1S4A
提取码:pnyi
基于jfinal_demo写了个pjax示例,点击【首页】【Blog管理】可以看到效果。

热门分享

扫码入社