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 修饰的,会被全局所有线程所共享,不同的线程过来访问都来读/写其属性值,必然就乱掉了

2017-08-22 17:29

@Arjen-Ribery redirect 是告知浏览器再次发起一个全新的请求, setAttr(...) 过来的数据必须要丢掉,这个是浏览器的行为,更深点说这是 http 协议规范

因此,这个是很正确的结果,不必纠结

2017-08-22 16:38

@linuxea jseesionid 只是一个 cookie 的 name 值而已,不同的项目用的名字不一样,例如 tomcat 用的是 jsessionid,而 php 用的别的,如果你用 jetty 的话可能又是另一个名称

比较大点的站点都会自己取名,例如本站就是 jfinalId,本质就是一个 cookie

2017-08-22 16:29

@小亮 baseViewPath 都支持,那就挺不错的了,赞一个

2017-08-22 16:26

jsessionid 用的是 javaee 里面的 session,做集群的时候要考虑到 session 的共享,不能直接部署成集群

而 jfinal club 中的 session 是存放在共享的数据库中的 session 表里面的,你可以直接将 jfinal club 部署成集群,集群中的每个节点共享的是数据库中的 session 表中的数据

每个节点中的 ehcache 也对 session 做了缓存,避免每次都去读数据库,这样既保障了集群,又保障了性能

jfinal 源码直播完成后,会再开启 jfinal club 的源码的直播,session 是重点会讲的地方

2017-08-22 16:08

建议你直接在 jfinal 之下用:
new User().find("select * from user a left join blog b on a.userid=b.userid")
得到结果以后,看一下里面的数据特点,自然就知道怎么将相关值封装成关联的 List 了