如何在ivo之前判断Render的类型?

@Jfinal

问题如下: 在项目中规定, 如果render的是一个view 则请求的路径后必须加.html,没有加.html则renderError(404);

如果render的是一个Json,则需要判断请求的路径有没有.json 如没有加也renderError. 

实现这个规则,如果写在handler里  则取不到render.  写在Interceptor中 必须要在inv.invoke()之后,才可以取到render.这样就可以按之前的逻辑来制定规则. 但如果该action做的是一个save或update的一个动作. 虽然最后renderError了,但对数据库的操作 还是发生了. 能在handler阶段,判断一下即将render的类型吗? 或者有没有什么办法可以避免数据库发生了实际的操作呢? 或者其他的实现思路?


评论区

JFinal

2018-02-01 19:59

这里的关键问题是,在程序走到你的 render 代码之前不方便猜测你后面到底render 了没有,以及 render 的参数是什么

当然,也不是绝对没有办法,例如写一个分析器,分析你的源代码,先预分析你的程序结构,分析到的结果做为自己这部分程序的行动指南

我再说的直白一点,你下面有三行代码:
int a = 123;
int b = a + 456;
render("index.html");

然后我希望在 int a = 123; 这行代码这里就知道第三行代码的 render 里头有什么参数,而这个时候程序还没走到第三行呢

大Z

2018-02-01 20:45

@JFinal 取不到Render 和取到Render之后晚了, 这个问题我明白了. 也看了下源码 render = renderManager.getRenderFactory().getJsonRender(jsonText); 谢谢波总

热门反馈

扫码入社