支持预执行功能么,类似像struts 的Preparable

每次访问action内方法时,都先执行一个预执行的方法,类似像 prepare,

本质也是拦截器,但是我怎么给controller里的变量赋值呢(例如给baseController中id赋值),可以给个栗子么? 大大们

评论区

JFinal

2017-11-08 17:45

可以在 controller 中添加一个 prepare 方法,然后用一个全局拦截器调用一下即可

jfinal 3.3 新版本,还可以接管 Controller 的创建,实现这个功能会更加方便,jfinal 3.3 将在近期发布,多多关注社区动态

一剑就入坑

2017-11-09 09:06

@JFinal tks 波大大百忙抽空答疑我的问题,由于回复不能贴图,我大概描述一下我的实现方案和一些疑问:
1.public abstract class BaseController> extends Controller{...}

2.public class BlogController extends BaseController {
public void prepare() throws Exception{
if(id != null){
entity = Blog.dao.findById(id);
}else{
entity = new Blog();
}
}

public void index(){//请求此action
renderText(""+id);
}

3.public void intercept(Invocation inv) {
System.out.println("Before invoke");

// BaseController bc = inv.getController(); //error: incompatible,我这里有点不明白为什么无法转换, 而getTarget就直接可以

BaseController bc = inv.getTarget();

bc.setId(inv.getController().getParaToLong("id"));
try {
bc.prepare();
} catch (Exception e) {
e.printStackTrace();
}

inv.invoke();//以上申明 bc 变量来达到在调用目标方法时,能够获取到 id,entity等预执行的变量
System.out.println("after invoke");
}

以上。。。我用以上的方式实现了prepare功能,但总觉得有点不简洁,或者有更好的方法,望波大大指点一二,再者,很期待3.3版本的问世。。。。。。。本来是在凌晨1:30左右发出的,结果被拒绝了。。。。

JFinal

2017-11-09 10:35

@一剑就入坑 感谢分享 ^_^

热门反馈

扫码入社