jfinal的Enhancer.enhance增强后方法被调用了两次
@JFinal 波总,你好,我们直入正题,问题如题,代码如下:
controller层代码如下:
public class ClassesController {
public void list(){
List<Record> list = ClassesService.service.list();
setAttr("list", list);
}
}
service层代码如下:
public class ClassesService {
public static final ClassesService service = Enhancer.enhance(ClassesService.class);
public List<Record> list(){
String sql = "select * from classes";
return Db.find(sql);
}
public void update(){
...
}
}
Interceptor代码如下:
public class MyInterceptor implements Interceptor {
private String setAttr(Invocation ai) {
Controller controller = ai.getController(); //访问的action
//将actionkey 存入request中
String key = controller.getAttr("request_action_key");
// forward 会有action key存在,以第一次的action key为准
if(StringUtils.isEmpty(key)) key = ai.getActionKey();
controller.setAttr("request_action_key",key);
//将当前时间存入到request中
controller.setAttr("currentDay", DateUtils2.date2String(new Date()));
//将昨天的日期存入到request中
controller.setAttr("yestoday", DateUtils2.getYestoday());
//将明天的日期存入到request中
controller.setAttr("tomorrow", DateUtils2.getTomorrow());
return key;
}
@Override
public void intercept(Invocation ai) {
String key = setAttr(ai);
Controller controller = ai.getController(); //访问的action
// 检查session中shiro失效,则跳转到登录页
HttpSession session = ai.getController().getSession();
if(!StringUtils.contains(key, "login") && session.getAttribute(DefaultSubjectContext.AUTHENTICATED_SESSION_KEY) == null){
controller.redirect("/login");
}else{
ai.invoke();
}
}
我在一次调试时将断点打在controller层list方法里面,发现执行了两次,控制台输出也是显示执行了两次,控制台输出如下:
--------------------------------------------------------------------------------
Sql: select * from classes
JFinal action report -------- 2017-04-07 22:04:11 ------------------------------
Controller : com.ahoi.controller.ClassesController.(ClassesController.java:1)
Method : list
Interceptor : com.ahoi.interceptor.MyInterceptor.(MyInterceptor.java:1)
Parameter : active-pager[url]=/syllabus/classes/list
--------------------------------------------------------------------------------
Sql: select * from classes
JFinal action report -------- 2017-04-07 21:58:48 ------------------------------
Controller : com.ahoi.controller.ClassesController.(ClassesController.java:1)
Method : list
Interceptor : com.ahoi.interceptor.MyInterceptor.(MyInterceptor.java:1)
为什么会执行两次呢?请波总指教
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我后来又发现了问题原因,那就是在页面直接按F5刷新发现断点处只被执行了一次,而在页面点击a标签链接时断点处被执行了两次,没找到解决办法
控制台的输出,第一次有参,第二次无参,可能是被 tomcat 做了重定向:http://www.oschina.net/question/941098_93842
如果不是这个原因,终极解决办法是设置断点,然后查看调用栈,看一下调用发起者是谁,还要看在浏览器中按一下 F12 打开浏览器自带的开发者工具,观察是不是浏览器发起了多次请求