2017-08-23 16:56

@linuxea jfinalId 一定在,只是你需要细心点才能看到

2017-08-23 16:53

找个地方调用一次下面的配置就可以了:
ModelRecordElResolver.setResolveBeanAsModel(true);

注意:通过这个配置,jsp 在读取 model、record 时会调用其 get(String) 方法,而不会去调用 getter 方法

建议用生成器生成 getter 方法,这样就不需要这个配置了,但 record 就没法读了

2017-08-23 16:36

@linuxea 这个需要 java 8 高版本,而 jfinal 大量的 jdk 6 7 的用户,需要照顾

2017-08-23 15:35

LocalDate 这种是第三方的 joda 中的类,而 jfinal 极力使之对第三方无依赖。 已有的对第三方依赖都仅仅是可选的(cglib除外)

此外, LocalDate 这些类可以很容易的转成 jdk 中的 Date 等类型,所以只要对 jdk的日期类型支持好了,LocalDate 让用户自己用就可以了

cglib 仅仅是用于 jfinal 业务层的 aop,这个仅仅只是一个过渡,有时间的时候会将这个 cglib 干掉,已经有了很好的方案

2017-08-23 15:32

@dear7575 切换数据源就实现了切换数据库,切换数据库也可以不去切换数据库。 完全取决于你配置的 jdbcUrl 是什么值,要活学活用

2017-08-23 15:31

@淡定007 可以这样来处理, dao 本来就是要被共享的。 我个人的习惯是在业务层用一个:
private Blog dao = new Blog().dao();

既不是 public 敢不是 static,让 Service 层保持单例就可以了。 dao 搞成 private 的可以避免 sql 满天飞,所有需要操作数据库的地方都需要在业务层里面创建一个新的业务方法,这样可以确保 sql 与业务永远被限定在 service 之中

2017-08-23 15:28

@macaque 如果全是 ".do" 以及 ".html" 这类格式的url,那么事情变得更简单,连 Handler 都不需要了,因为 jfinal 天然认为这类 url 是静态请求。 这种情况只需要将 JFinalFilter 放在 Struts 的 Filter 之前就可以了

2017-08-23 12:17

@dear7575 如果是 rs.tart() 出了问题,那么就是 Arp 对象中的 dataSource 或者 dataProvider 为 null

2017-08-23 12:02

确实很需要,没做到位: http://www.jfinal.com/feedback/1654

2017-08-23 12:01

代码看上去没有错误,异常信息没有给出 caused by 部分,没法直接定位问题

异常中提到 ConfigController.java 的 151 行有问题,建议调试跟踪一下

2017-08-23 11:57

在 web.xml 中配置 JFinalFilter,让这个 Filter 配置在 Struts 的 Filter 之前,然后用一个 Handler 放行需要 struts 需要处理的请求即可,Handler 大致如下:
if (needStrutsProcess(target)) {
return ;
} else {
next.handle(target, request, response, isHandled);
}

上面的 needStrtusProcess(target) 方法需要你自己根据项目的实际情况来实现,只要是原来 struts 需要处理的,就让此方法为 true

2017-08-23 11:06

@阿郎 看一下最新版的手册,有关 sql 管理那一章节

2017-08-22 17:36

@Arjen-Ribery 注意一下,这个问题,任何框架,任何语言的框架都是这么处理的,因为这个是由 http 规范决定的,redirect 无法保持表单参数,只能保持 url 上的问号挂参

2017-08-22 17:34

@淡定007 下载本站首页右侧的 demo,里面有 dao 建议的用法,以前 demo 中的将 dao 放在 model 中的用法经常有人不注意只能调用查询方法,已不被推荐

2017-08-22 17:33

dao 是 Data Access Object 的缩写,不建议在 model 中创建 dao 对象,容易误用

建议在业务层创建 dao 对象,如下所示:
public class BlogService {
private Blog dao = new Blog().dao();
}

dao 只能用于查询,不能用于承载数据,为的是保障线程安全

上面的用法只有 find 属于查询类方法是允许的,而其它则不允许

简单来说就是 blog 中要承载字段/属性值,而这个 dao 又是 static 修饰的,会被全局所有线程所共享,不同的线程过来访问都来读/写其属性值,必然就乱掉了