2017-09-04 23:30

@doocal 看一下这篇博客:http://elim.iteye.com/blog/1770554

其中后面的一小节《视图解析器链》这一部分谈到了:
第一个进行解析的将是ViewResolver链中order值最小的那个。当一个ViewResolver在进行视图解析后返回的View对象是null的话就表示该ViewResolver不能解析该视图,这个时候如果还存在其他order值比它大的ViewResolver就会调用剩余的ViewResolver中的order值最小的那个来解析该视图,依此类推。

所以,在 JFinalViewResolver 之中再添加一个 buildView(String) 方法,内容大致如下:
if (getSuffix().equals(".jsp")) {
return null;
} else {
return super.buildView(...);
}

2017-09-04 23:09

@doocal 如果是这样,那么 setOrder(0) 的意义何在呢? 或者这个 setOrder(int) 方法需要与别的方法配合使用

或许需要与 JFinalView 继承的 AbstractTemplateView 之内的 checkResource(...) 配合,所以你可以改造一下 JFinalView,在里面添加一个 checkResource(...) 方法,判断模板的扩展名,如果是 ".jsp" , 直接 return false 就完事了

2017-09-04 22:40

本质上来说,你完全可以拿着 JFinalViewResolver 与 JFinalView 这两个类的源代码,任意去改成符合自己需求的在 spring 中的用法

JFinalViewResolver 与 JFinalView 这两个类就是为懒人而准备的,由于我多年不用 spring,所以 spring 的很多用法不记得了

2017-09-04 22:38

如果你确定是构造方法中 setOrder(0) 去掉就可以解决问题,jfinal 3.3 考虑注掉这行代码,一定要回来再反馈

2017-09-04 22:36

@doocal 注意看一下 JFinalViewResolver 源代码中的构造方法,里面已经设置 order 为 0 了:
setOrder(0);

可能是这个造成的你在 xml 中配置 order 无效,试一下将 JFinalViewResolver 拷贝出来,做成自己的 MyViewResolver,然后改一下构造方法,最后在 xml 配置中用这个 MyViewResolver 代替 JFinalViewResolver

记得搞定后回来分享一下

2017-09-04 21:36

@macaque CPI.getAttrs(model) 即可

这个 CPI 在 com.jfinal.plugin.activerecord 包下面,model 没有直接提供 getAttrs() 方法是为了避免开发者误用,对其操作不会改变内部的 Set modifyFlag 值,造成 update() 工作不正常

消灭可能出现的问题,比出现问题以后再解决要好,再说有 CPI 可用

2017-09-04 21:11

@yjjdick1990 感谢支持社区

2017-09-04 20:57

@yjjdick1990 这个不是礼貌不礼貌的问题

因为你发的问答贴很多,而如果没反馈,回复者在心理上会认为问题很可能没解决。 一是心里没底,二是没有成就感,也就没了动力

如果某位同学的问答贴很少,我回复以后,他没回应,可能是这位同学很少上 jfinal.com, 在理由上会比较容易接受

2017-09-04 20:48

对回复没有反馈,其他人也不太好再回复你问题了,怕是没解决问题,反而误导你

2017-09-04 20:34

很多问题,我回复你了,但不知道你解决没解决

2017-09-04 20:04

@苦逼ITY jfinal 不支持跨数据源的事务,所以,你的 Db.tx(...) 方法决定使用某数据源以后,在方法内部再使用 Db.use(...) 切换到别的数据源上去不会起作用

2017-09-04 17:39

用 sql 就好,sql 语句中的表名前方带上数据库名,网上找点资料,这种用法不常见

此外,可以考虑 Sharding-JDBC 与 mycat 这种方案,让分库分表/多库多表的操作对程序透明

2017-09-04 11:34

@arboret 最后改成什么样了呢? 是不是用的一个 static:
private static SecureRandom sr = new SecureRandom();

然后用的时候这样:
o.setOrderno("B-" + sr.nextLong() );

2017-09-04 11:32

jfinal.com 官方网站是在配置文件用了一个:
engineDevMode=true

来单独配置的 engine 的 devMode,具体用的时候这样:
public void configEngine(Engine me) {
me.setDevMode(p.getBoolean("engineDevMode", false));
}

这样配置的好处是 devMode 与 configConstant(Constants me) 中的 me.setDevMode(...) 这个配置独立开来,如果不在 configEngine 中独立配置,则 configEngine 对应的 engine 对象将使用与 configConstant 中一样的 devMode 值

一言蔽之是:configEngine 中的 engine 对象默认使用与 configConstant 中一样的 devMode 值,当在 configEngine 中再次指定过该值的,自然就以独立指定的为准

2017-09-04 11:28

在 configEngine(Engine engine) 中通过 engine.setDevMode(true) 以后,模板的改动会实时生效,所以也就不需要手动清了。这个方法几乎不影响性能,因为模板仍然会缓存,只是在加载前去判断模板有没有被改动过,没有被改动则使用缓存

还有一个方法是调用 engine.removeCache(key) 来清缓存,或者使用 engine.removeAllCache() 清所有