2016-09-18 12:26

@clatt 你可以通过 forwardAction("/") 转发到根路由上试试,注意,这里的 forwardAction 参数是指一个 action 路由,而不是静态资源

2016-09-18 12:25

@clatt ActionRender 中的 render() 方法本来就不需要实现,通过查看 com.jfinal.core.ActionHandler.java 源码可知原因,只需要 ActionRender.actionUrl 属性,而不需要其中 render 方法有任何动作

2016-09-18 11:23

@clatt 转发直接用 forwardAction(...)

2016-09-18 11:23

@clatt 问号挂参,如果要保持上次请求的问号挂参,再带一个 true参数:redirect(url, true);

2016-09-17 20:50

直接使用 redirect(url) 即可

2016-09-17 11:21

这种问题极度容易解决,照这个思脉处理一下:
1:查看控制台的 JFinal Action Report 输出,看ExceptionInterceptor是否拦截了该请求
2:确保当前请求拦截以后,在 catch 块中设置断点,看是否捕捉到异常
3:如果没有捕捉到,再检查一下是否有别的拦截器将异常吃掉没有再次抛出
4:注意改过的代码是否不生效,eclipse 有时会有这个 bug
5:终极方案,单步调试,看程序到底怎么走的。建议直接使用终极方案,少走弯路

2016-09-17 11:14

全程没有使用事务,必然会有问题,核心在于任务调度线程在获取 task 记录,并让该记录的 lock 由 0 变 1 的过程在事务中并且是排它的,核心代码大致是如下的形式:

final Ret ret = Ret.create();
boolean isOk = Db.tx(new IAtom() {
public boolean run() {
Task taskList = Db.find("select * from task where lock=0");
String idList = IdKit.join(taskList); // 将 taskList 的所有 id 变成这样:(1,2,3)
int n = Db.update("update task set lock=1 where lock=0 and id in" + idList);
ret.put("taskList", taskList);
return taskList.size() == n && n > 0; // 只有取出来的数量与更新数量相同时才可以提交事务
}
}

if (isOk) {
处理 ret.get("taskList")
} else {
未获取到可处理的 task
}

2016-09-15 17:59

search() 方法中是在 render("article_search_list.jsp"),而提示却是 /admin/article/search.jsp 页面找不到,很明显是该 render 方法未被执行,进而推断出 search() 方法未被执行,再进而推断出是有拦截器未让该请求前行至 search() 方法

看一下控制台输出的 JFinal action report 就全明白了

2016-09-15 10:42

@海哥 应该是四年多,简单够用,quartz 过于庞大

2016-09-14 17:45

@zy625080069 jfinal 手册中有详细说明,在此下载手册:http://www.jfinal.com/download?file=jfinal-2.2-manual.pdf

2016-09-14 17:30

估计是 ActiveRecordPlugin 没启动

2016-09-14 17:29

@精彩飞扬 这下有需要同学直接 copy 就可用了,又节省了一半以上的时间,感谢分享

2016-09-14 17:27

没实际用过 javamelody 这个东东,很久看到过,貌似就放入 jar 包,改下 web.xml 就可以用了。将 jfinal 项目当成普通的 java web 项目来用就可以了

2016-09-14 16:31

@cnzzr jfinal 官方出品的插件必然好用