2017-08-23 15:31
@淡定007 可以这样来处理, dao 本来就是要被共享的。 我个人的习惯是在业务层用一个:
private Blog dao = new Blog().dao();
既不是 public 敢不是 static,让 Service 层保持单例就可以了。 dao 搞成 private 的可以避免 sql 满天飞,所有需要操作数据库的地方都需要在业务层里面创建一个新的业务方法,这样可以确保 sql 与业务永远被限定在 service 之中
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-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 修饰的,会被全局所有线程所共享,不同的线程过来访问都来读/写其属性值,必然就乱掉了