jfinal RenderException问题

发布于 2021-12-02 12:43:12 字数 2345 浏览 779 评论 5

@Jfinal我在拦截器里面使用

if (user == null) {
     if(url.equals("/admin/")){
      controller.redirect("/admin/login/");
     }else{
      response.getWriter().print(JSON.toJSONString(new MessageJson("301", "登录已超时")));
      
     }
    } else {
     if(user.getIsAdmin()==1){
      ai.invoke();
     }
     boolean r = ResourceService.impl.getAllUrl().contains(url);
     if (r) {
      boolean b = AdminService.impl.getAuth(user.getUserId(), url);
      if (b) {
       ai.invoke();
      } else {
       response.getWriter().print(JSON.toJSONString(new MessageJson("403", "没有权限")));
      }
     } else {
      ai.invoke();
     }
    }

页面可以正常返回JSON或者跳转页面,问题关键在使用

 response.getWriter().print(JSON.toJSONString(new MessageJson("301", "登录已超时")));

因为我使用了freemarker,导致 RenderException,因为我只是返回字符串JSON并不需要指定html路径,所以这个异常有点莫不着头脑,以前在显示层直接使用renderText(JSON.toJSONString(new MessageJson("0","验证码错误"))); 后台是不会报错的。但是在拦截器里面就不知道怎么解决这个异常了。希望@Jfinal能解决这个问题。并且我没有指定/admin/core/user/list.html路径不知道从哪里获取的。查看了一下源码好象这个需要给Render对象赋值才没有错,采用 response.getWriter().print返回字符串就会错。后台出错如下:

EVERE: /admin/core/user/list?_=1381156947919
com.jfinal.render.RenderException: java.io.FileNotFoundException: Template /admin/core/user/list.html not found.
 at com.jfinal.render.FreeMarkerRender.render(FreeMarkerRender.java:128)
 at com.jfinal.core.ActionHandler.handle(ActionHandler.java:92)

 

或者告诉我一下在拦截器里面会调用什么东西,给个具体的流程(具体到类名到方法名)这样我就有思路自己解决。

 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

奢望 2021-12-05 06:05:08

试下 renderNull();

高跟鞋的旋律 2021-12-05 06:01:56

我想也是这样吧,在执行拦截代码没Return然后会放行直接执行被拦截Action里方法的return,因为没执行方法体内容所以缺少参数导致找不到路径。 流程如下:intercepter(no return)->action method return 对吗?

风苍溪 2021-12-05 05:57:39

回复
你自己设个断点跟进去就清楚了。包都是带源码的。。具体我没仔细了解。但是报这个错就跟struts的一样原理。

旧伤慢歌 2021-12-05 05:55:18

感谢已经解决。但是我想知道代码执行流程,这样我思路更清楚,能告诉我一下吗?

温柔少女心 2021-12-05 05:48:00

这个错误是你默认渲染用了freemarker,而你没有给定freemarker模板路径,或者路径下不存在模板文件造成的,你应该可以ai.getController().renderJson(),ai.getController().renderHtml()之类的改变渲染方式避免吧

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文