2019-11-04 10:38

@hb963724769 只有 public 方法才能被拦截

2019-11-02 17:45

看上去是缺少处理静态资源的 servlet 配置,网上很多这方面的问题,这是一个普遍问题,建议看看 was 的官方文档,有关默认静态资源 servlet 配置部分

2019-11-02 17:38

@dzofmine 如果是 JDK 并且环境变量配置正确,那么就可以确定是 resin 的问题

jfinal 更早期的版本在 tomcat 下也有这个问题,原因是 tomcat 启动时无法正确加载 CLASSPATH 环境变量,jfinal 新版本解决了这个问题

使用 me.setToCglibProxyFactory() 就挺好的,多一个 jar 包,但功能是完全没问题的

2019-11-02 16:05

@hb963724769 前半部分是对的,后半部分是错误的,业务层其它方法调用也可以触发拦截器

业务层拦截器的触发简单来说就是两种:
1:在 controller 中通过 @Inject 注入
2: 通过 Aop.get(...) 获取的对象

2019-11-02 15:29

@dzofmine 参考这个文档:
https://www.jfinal.com/doc/4-8

配置一下:
me.setToCglibProxyFactory();

2019-11-02 15:26

你的用法是对的,按理说应该可以,或许是你配置了 baseViewPath ,这个值默认指向 webapp 目录

如果你配置了 baseViewPath 让它默认指向了别的地方,以 "/" 打头的路径就会回到那个地方去,并以那个地方为起点

建议修改贴子,将详细的路由配置中的 baseViewPath 以及路由映射代码贴出来

2019-11-02 15:23

jfinal 学院后台是基于 layui 做的了? 我记得以前是 bootstrap

2019-11-02 15:22

可能是长时间没通信以后 mqtt 服务端主动断开了连接,看看 mqtt 有没有类似于心跳之类的机制,保持连通

2019-11-02 14:45

@抉择 你的代码中貌似不缺 break, 后来补上去的?

2019-11-01 19:01

@Final新手 先独立用好 sql 模板,然后再通过客户端传参的方式将参数传对, 然后两者衔接即可,不要跳跃

2019-11-01 19:00

在 controller 中用 getPara("type") 可以获取到字符串: "'狩猎犬'|'家庭犬'"
然后你可以将这个字符串用于 sql 模板

2019-11-01 18:57

支持的, java 代码没有,看不出什么问题

2019-11-01 18:34

@smileForLife 缺点大致:
1:复杂度高的 sql 无法实现,要知道 sql 是一门语言,可以无限嵌套,可以有各种判断、关联

2:where 条件如果来点 and or 以及 "小括号" 的组合,优先级就不好处理,例如下面的 sql:
select * from t where a = x and b = y or c = z and ( c not in d or d = e) or f != g
以上 sql 中的 or 的优先级比 and 低,小括号中 or 的优先级需要被改变,这种 where 条件用 wrapper 设计来实现很繁索,不如直接 sql 来得爽快,你可以试着用 wrapper 用法来表达上面的 where 条件

3:不同数据库有不同的 sql 方言,wrapper 实现面向 java 代码,无法做到兼容各种数据库

4:引入一套新的概念,增加了学习成本

5:最终还是需要将 wrapper 实现翻译成 sql, 这个翻译的过程容易出 bug,对于嵌套 sql 复杂度急剧升级,例如,下面的 sql 你可以试着来用 wrapper 来表达一下:
select * from t1 where id in ( select id from t2 where x = a and y = b) inner join t3 on t1.tid = t3.tid
无论是用户使用 warpper 的 API,还是你将 wrapper 翻译成 sql ,都很麻烦,sql 嵌套一下,where 来点 优先级与嵌套,复杂度将指数组上升

6:从 API 的使用上,wrapper 并不比 sql 直观,代码量甚至比 sql 要多,以下是对比:
Db.find("select * from t whre x=a and y=b or z=c");
Db.select("*").from("t").where("x", a).and("y", b).or("z", c).find();
wrapper 用法只带来一点虚幻的安全感,而且这种安全感只对那些 sql 功底不过关的同学有吸引力

7:还有其它一堆设计思维层面问题,不再赘述

wrapper 方案折腾了半天,最终带来的将是无穷无尽的麻烦,实际好处并没有。这就是我们的古人所说的世上本无事,庸人自扰之的典型

你自己可以考察一下那些已经存在的 wrapper 方案,让它们去实现我前面讲来的嵌套功能,感受一下

2019-11-01 16:56

@117know 使用单步调试法,把玩一下 exprList 、stat、scope、writer、env 这五个变量,想要的功能基本就有数了