jfinal的model和record能继承map接口吗?

jfinal视图类型为JSP时服务跳转时会对request.setAttribute方法里面的变量进行转换,把model和record转成map来处理,这样jstl才能解析出来。但是在对session中的值未进行处理,也不方便作这样的处理。请问一下能把model和record抽象类继承map接口吗?这样就不用作JspRender就不用作

private voidsupportActiveRecord(HttpServletRequest request)

处理了。

评论区

JFinal

2016-12-18 20:17

用一下 SessionInViewInterceptor 这个拦截器,对 session 进行了 map 化的包装。Model 与 Record 有自己的定义,她们不是 Map,所以绝对不可以继承 Map,继承的使用是需要极其小心的,尽可能不用,如果要用那么一定有充分的理由

JFinal

2016-12-18 20:18

补充一下,较高版本的 jfinal,对于 Model Record 的 jsp 支持已经有过增强,例如通过生成器生成 getter 方法,生成后的 Model 与传统 java bean 没有区别

xbb0220

2016-12-18 22:17

谢波总宝贵的时间,我看到您的ModelRecordElResolver类了。 由于领导需要我用的是spring整合的jfinal的active record,所有出现了以上情况,对源码剖析不够,不好意思。 谢谢。

JFinal

2016-12-18 22:48

@xbb0220 使用 spring 也可以参考 ModelRecordElResolver 来做增强,此外 jfinal 2.3 对这个类又进行进一步增强,满足目前所有需求

luorongda

2016-12-19 08:32

此问题我也遇到。
因为可能传递到Model中的内容不定,因此目前是用生成器在Model中这样封装:
/**
* jstl中必须这样设置才能获取Model中put方式的值
* 页面获取 ${obj.dto}
* */
public Map getDto(){return super.getAttrs();}
-------------------------------
有更好的处理方式吗?求教。@JFinal @xbb0220

xbb0220

2016-12-19 10:35

@luorongda 现在版本的jfinal已经算完全支持处理jstl中读取model和record了。以前出现问题的原因主要是jsp中el表达式解析值的能力较弱导致,freemarker就不会出现这样的问题。如果你想兼容以前的jfinal项目不作版本变更的话,建议把现在jfinal版本中的com.jfinal.plugin.activerecord.ModelRecordElResolver.init();拷过去,在你的JFinalConfig类下afterJFinalStart方法下调一下应该就能行了。

luorongda

2016-12-19 15:12

@xbb0220 非常感谢呀。 试试先。

热门反馈

扫码入社