错误页面与EvictInterceptor使用中的遇到的问题

Rajab 发布于 2013/07/01 22:18
阅读 343
收藏 0

@JFinal 你好,想跟你请教个问题:

我又来了。有几个问题不解。

(1)关于404或者500等错误页面,在Config类中通过setError404View和setError500View方法设置页面位置,然后在需要的地方通过renderError来渲染相关的页面。这个机制只负责jfinal中的controller方法找不到或方法出错的情况。如果是在web.xml中配置error-page节点,这是不受jfinal控制的,比如静态文件找不到之类的。两种都设置我没有问题。

现有有这么一个情况,我在web.xml设置的404.html是静态页面,里面要访问静态资源比如一个图片,我该如何设置图片的路径?因为在config类中设置了ContextPathHandler("base"),所以在所有渲染的页面中都有base这个属性,通过它能获得当前的context路径,可是在web.xml中设置的404静态页面,是拿不到这个属性的。关键是当前的context路径不一定是域名/。没办法,我只好在404.html中使用图片的地方用base64转码嵌入到页面中了。不知道是不是我的理解有偏差。

(2)关于ActiveRecord的缓存机制。首先太方便了。尤其是自动的CacheInterceptor,配合 EvictInterceptor很方便。可是在使用EvictInterceptor的时候,我发现,如果某个action操作可能涉及多个cache的清理,那个CacheName注解只能设置一个,这该怎么办?我太懒了,不想一个一个的清cache。

要是Model类能在下版加上多条件查询就好了,就是有同学写的使用HashMap封装查询条件,我看就不错。希望能在新版中加上发扬光大。我很懒,不想再打包了。我的机器是06年的。哈哈。能再开一个issue的专门帖子就好了。


加载中
0
JFinal
JFinal

引用来自“Rajab”的答案

@JFinal 我说的多条件查询JFinal当然原生支持了,我的意思是能不能再进一步发展,引入类似Condition的多条件封装成一个类,在查询方法中作一个参数,这样就不用再做重复的拼SQL操作了,虽然参数化的?也挺方便的。

另外如果要更新Model对象的某个字段,如stu是Student模型的一个实例,那么

Student s = Student.dao.findById(1);
s.set("name", "JFinal");
s.update();
这个操作最终的操作生成的SQL语句是更新对应记录中的所有字段吧?能不能只更新我新设值的字段,效率会不会更高?不过我想这需要一个机制来随时记录当前模型对象中的字段值是否脏了。


1:使用Condition 没有必要,会增加代码量,也会增加复杂度,Hibernate 这类传统ORM框架使用Condition是为了跨库生成不同方言的  sql,跨库生成sql这种事情在 JFinal 世界是被反对的。

2:Student.dao.findById(1).set("name", "JFinal").update(); 这行代码只会更新 name字段,打从 JFinal 诞生起就是这样

0
JFinal
JFinal

1:不要使用 context path 这个东东,从而避免此问题的发生

2:为CacheName这样配置:@CacheName("xxx,yyy"),再改造一下 EvictInterceptor,在得到 CacheName 的value以后  String[] valueNameArray = value.splite(","); 然后再使用这个 valueNameArray循环调用 CacheKit.removeAll(..)

3:Model自古以来都支持多条件查询

0
Rajab
Rajab

@JFinal 我说的多条件查询JFinal当然原生支持了,我的意思是能不能再进一步发展,引入类似Condition的多条件封装成一个类,在查询方法中作一个参数,这样就不用再做重复的拼SQL操作了,虽然参数化的?也挺方便的。

另外如果要更新Model对象的某个字段,如stu是Student模型的一个实例,那么

Student s = Student.dao.findById(1);
s.set("name", "JFinal");
s.update();
这个操作最终的操作生成的SQL语句是更新对应记录中的所有字段吧?能不能只更新我新设值的字段,效率会不会更高?不过我想这需要一个机制来随时记录当前模型对象中的字段值是否脏了。


0
RyanMiao
RyanMiao
新手求教,设置错误页面怎么设置,我在config里面的configConstant设置me.setError500View("/order/");这个参数怎么写,写绝对路径?比如/order/error/500.html?,这样不会被jfinal拦截进入Controller吗?
返回顶部
顶部