jfinal @Before(NotAction.class) 不生效

1、自己写了个BaseController extends Controller 里面定义了一些公用方法(非static,public )

2、有两个同名,不同参数的重构方法,在项目启动时候报异常:can not be mapped, actionKey "/xxx" is already in use.

3、在方法上加@Before(NotAction.class) 还是报错

猜测:可能是 在buildActionMapping 时还没有检查NotAction拦截器,这个时候finnal把方法做映射,其实这些方法不用做映射的,直接排除掉

评论区

JFinal

2018-06-05 11:55

NotAction 确实无法解决 actionKey is already in use 的问题,因为这个是通过拦截器在被请求的时候临时来决定这个 action 不存在的,在路由映射阶段仍然是被映身为 action 的

改改方法名,或者改成 protected 就好

jimchow

2018-06-05 11:59

@JFinal 不能改protected ,因为在拦截器中要调用controller.xxx调用,protected 只能子类调用。
暂时通过 @ActionKey 解决了

jimchow

2018-06-05 13:24

@ActionKey 只能 解决单个子类 有多个 BaseController 子类还是一样报错 汗!! 我认为jfinal应该解决排除某些方法不映射的问题 @JFinal

JFinal

2018-06-05 21:14

@jimchow jfinal 3.5 考虑直接引入一个 @NotAction 注解,而不必使用拦截器,从根本上解决这个问题

jimchow

2018-06-06 10:18

糊搞

2018-08-21 20:14

已经看到波总最新上传的代码中加入了对@NotAction处理的代码了~~~

JFinal

2018-08-21 23:34

@jimchow @糊搞 新版本添加了 @NotAction 这个注解了,如果想现在就用上,可以将最新版本 jfinal 安装在本地:
git clone git@gitee.com:jfinal/jfinal.git
cd jfinal
mvn install

最后在 pom.xml 中改下依赖,注意版本号要写对,上面方法安装好的版本号应该是:
jfinal-3.5-SNAPSHOT

netwild

2018-09-18 09:49

我也发现了这个问题,在BaseController里重载的方法会出错
由于会在interceptor里调用,还不能改成protected
只能修改成不同的method名称

看见3.5有了解决办法,很高兴!

热门反馈

扫码入社