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 了

2017-08-22 16:07

如果 mybatis 是这类 left jon 的 sql 返回值封装好了 List blog 的话,那也是在结果返回以后做的

在 jfinal 之中可以稍微写点代码对于返回结果再重组一下就可以了。而 jfinal 手册的 5.9 的例子确实是发起了两次 sql 请求,但那个 sql 与你在贴子中的 sql 是不同的,你在贴子中的 sql 在 jfinal 中也只执行一次 sql

2017-08-22 15:46

eclipse 下不存在这个问题, IDEA 下可以将 model 抽取成一个独立的module , 独立去运行这个 generator,或者可以在命令行用 java 命令直接运行起来

2017-08-22 15:44

建议用 maven 来管理,完全不需要关心 jar 包的问题

如果不用 maven 来管理,就要仔细小心去研究 spring mvc 本身的相关依赖

最后,对于 spring 的依赖只要看一下 pom.xml 中有关 spring 那项即可,里面写好了版本号

如果用 maven 管理,导入到项目中,直接 mvn install 或者 mvn compile 就完事了,省好多时间

2017-08-22 15:41

这个愿忘是挺好的,就是担心可能有副作用,例如,先存入一个 Integer 型,然后取出来的时候是不是要对这个 Integer 进行反序列化

由于存的时候没有序列化,所以取出来的时候就不能反序列化,但此时怎么知道这个值是不是要反序列化?

感谢你分享

2017-08-22 15:38

@Arjen-Ribery 不细心而已,不可能出现丢失的问题

2017-08-22 14:16

jfinal 开发的项目是标准的 java web 项目,以前所有相关知识直接用上即可

这里再额外提供 tomcat 下的部署建议方式:https://my.oschina.net/jfinal/blog/353062

2017-08-22 12:00

@Angel、心脏 你的验证不是要显示在浏览器的页面中吗? 用一个 img 标签让其 src 指向你的验证码图片生成的 action 即可,看一下本站的登录验证码图片的 src 立即明白:http://www.jfinal.com/login

2017-08-22 11:42

通过继承 MetaBuilder 扩展一下即可,大致如下:
public void MyMetaBuilder extends MetaBuilder {
private Set myTables = new HashSet();
public void addTable(String table) {
myTables.add(table);
}

public boolean isSkip(String table) {
if (myTables.contains(table)) {
return false;
} else {
return true;
}
}

用的时候这样:
MyMetaBuilder mmb = new MyMetaBuilder();
mmb.addTable(要处理的 table);
mmb.setDialect(new MySqlDialect());

Generator gen = new Generator(...);
gen.setMetaBuilder(mmb);
gen.generate();