2017-03-15 17:01

@HotDoor 记得搞定后来分享频道发个贴分享下啊

2017-03-15 17:00

@HotDoor 做一个 BaseController, 在其中实现一个 getModels() 功能来支持这个功能,方便重用

2017-03-15 16:59

@wyntergreg 可以试一试通过扩展 ISerializer ,并在这个扩展类中啥也不干来实现你想要的:是否可以把序列化改成可配置参数 这个功能

由于 redis 只支持 String 与 byte[] 这两种类型,而 java 类型是无限多的,例如 User 就是个类型,所以只有做序列化才可以存放无限种类的 java 对象进去,因此不做序列化的方案不好做

你可以试着做一下,记得搞定后再回来在分享频道发贴啊

2017-03-15 16:01

@HotDoor 让 modelName 带上一个下标,然后后端用一个 for 循环配合 getModel处理一下,例如:
input name="user_0"
input name="user_1"

for (int i=0; i < size; i++) {
user = getModel(User.class, "user_" + i);
list.add(user);
}

2017-03-15 15:39

@HotDoor 让多个对象使用不同的 modelName 前缀,然后通过调用不同的 getModel 来获取,例如:
User user = getModel(User.class);
Account account = getModel(Account.class);

2017-03-15 15:38

@伊森 单步调试跟踪到更深的地方,如 MultipartRquest 之中,这里才是 path 拼接的最终地方,baseUploadPath 是在启动时候会拼接的,也可以调试一下

2017-03-15 15:37

NFS 具体是啥? Network File System 吗? 做这些是与 jfinal 无关的,直接做就行

2017-03-15 15:35

@wyntergreg 取用的时候,仍然用 jfinal 提供的 api 就可以了。如果你用别的工具取用,也只需要用同样的反向序列化算法就可以

你试着扩展一下 ISerializer 这个扩口来改变一下序列化算法,其中官方给出了两个实现类,一个是 fst 实现,一个是 jdk 实现,或许 jdk 实现就可以,你通过下面的代码切换一下:
redisPlugin.setSerializer(new JdkSerializer())

2017-03-15 14:52

不是加了前缀,是存之前先将数据做了序列化转换,再存进去,序列化转换操作时会添加额外的数据进行类型的标注

2017-03-15 13:59

@伊森 看看你的 baseUploadPath 是什么值,设置一个断点在 getFile 上,单步调试到底层 jfinal 源代码,瞬间就知道了

2017-03-15 13:51

这个是 linux 操作系统本身的规定性决定的,让你的 tomcat 启动在 root 之下或者使用 chmod 设置一下文件权限

2017-03-15 11:30

这个问题先做个备忘,oracle 不按 JDBC 标准走才会出现这类问题

建议你先通过继承 MetaBuilder 的方式解决,扩展完以后,将 MyMetaBuilder 注入到 Generator 之中即可

2017-03-15 11:28

自动生成支持 sql server,只是有些细节没有照顾到,但是生成器是面象扩展设计的,可以随心所欲去扩展细节功能

没有主键的问题:jfinal active record 模式的基本要求就是一个 model 唯一对应一条数据库记录,而这个对应关系必须依赖于主键,所以使用 model 必须要有主键。否则就根本不是 active record 模式的范畴。对于无主键的表不要去生成 Model,可以用一下 Db + Record 模式

生成器的 addExcludedTable(tableName) 可以排除一些不需要生成的表,或者通过扩展 MetaBuilder 覆盖 isSkipTable 方法,随心所欲地去控制要跳过哪些表不生成

2017-03-15 11:28

拦截器的使用,有这么一行代码:
invocation.invoke();

在这行代码之前添加的代码会在目标之前执行,在这行代码之后添加的代码会在目标之后执行,例如:
System.out.print("之前执行");
invocation.invoke();
System.out.print("之后执行");

综上,jfinal 的 Interceptor 本质上是环绕型拦截器,可以同时支持在 before 与 after 之处插入切面代码

之所以在声明拦截器时使用的是 @Before(Xxx.class) 这个注解,是因为拦截器确实是在目标被调用前就发生了作用

2017-03-15 11:24

@hmgx 自动生成支持 sql server,只是有些细节没有照顾到,但是生成器是面象扩展设计的,可以随心所欲去扩展细节功能

没有主键的问题:jfinal active record 模式的基本要求就是一个 model 唯一对应一条数据库记录,而这个对应关系必须依赖于主键,所以使用 model 必须要有主键。否则就根本不是 active record 模式的范畴。对于无主键的表不要去生成 Model,可以用一下 Db + Record 模式

生成器的 addExcludedTable(tableName) 可以排除一些不需要生成的表,或者通过扩展 MetaBuilder 覆盖 isSkipTable 方法,随心所欲地去控制要跳过哪些表不生成