2019-09-20 16:59

@Winne 自己亲手打造的社区,热爱

楼主这个提问还算好的,这样的就纯属不遵重人了:
http://www.jfinal.com/feedback/6500

首先,该问题与 jfinal 无关。其次,正文就扔一个异常信息,对自己的问题毫不负责,对回答的人毫不遵重

2019-09-20 16:50

@tntxie 在 service 上也是类似的, 只不过 service 层上的拦截器无法通过调用下面的方法:
inv.getController()
inv.getActionKey()

这些方法可能你在生成缓存的 key 时需要使用, 但你可以换个思路解决,例如:
// 获取当前 service 的类名
String className = inv.getTarget().getClass().getName();

// 获取当前调用的方法的方法名:
String methodName = inv.getMethod().getName();

// 获取当前调用的方法的参数列表:
Class[] paraClasses = inv.getMethod().getParameterTypes();

// 获取当前调用的方法的参数值:
Object[] args = inv.getArgs();

然后通过组合上面 className、methodName、args 三个变量就可以组合得到一个可以使用的 key 值用于缓存了,paraClasses 这个变量或许还用不上

有了 className、methodName、args 三个变量,你自己再弄一个生成 key 值的工具方法,后面的代码就很好写了,与 com.jfinal.plugin.ehcache 下面的方案差不多

2019-09-20 16:33

可以完全参考 com.jfinal.plugin.ehcache 下面的设计,里头有 CacheInterceptor

逻辑是完全一样的,只不过前者将数据放 ehcache 中, 而你是需要将数据放 redis 中

jfinal 的 aop 设计,拦截器就是切面,环绕拦截的逻辑如下:

public MyInterceptor implements Interceptor {
public void intercept(Invocation inv) {
before();
inv.invoke();
after();
}

public void before() {
这里放上环绕拦截的前拦截代码
}

public void after() {
这里放上环绕拦截的后拦截代码
}

然后用 @Before 配置好就可以使用了
}

2019-09-20 16:12

文档限于篇幅,只提供基础功能,基础功能的灵活动用与组合,才能实现千变万化的功能

关键在于要先掌握基础用法,才能想到如何组合使用

2019-09-20 16:11

@一个小菜鸟 先观察一下控制台输出的 jfinal actionn reporter 的 parameter 这一栏的数据格式

然后再选择具体的 get 系列方法,如果你是传的数组,需要 for 循环,例如:
List list = new ArrayList();
for (...) {
list.add(getBean(...));
}

要根据数据的格式,灵活搭配,这里的关键是,你要先掌握文件中的各种 get 方法的用法,然后观察 jfinal action reporter 的 parameter, 再合理选择

2019-09-20 15:19

getModel 或者 getBean , 看一下文档

2019-09-20 15:18

FastController 内部使用了一个 ThreadLocal , 让每一个线程持有 controller 对象, 这样就可以重用 controller 对象,避免每次 new 出来新的对象

在一定程度上得到了单例的好处,但并不是单例

你的截图中出现多个输出,证明了不是单例, 而是每个线程会创建一个实例,如果你接受请求的线程数更多的话,会出现各多的输出

2019-09-20 14:45

Prop、PropKit 专为读配置而设计,没有打算提供写配置功能

2019-09-20 14:41

网上搜索一大把,关键词: oracle 对应 JDBC 类型

2019-09-20 14:41

@Code_Cat 使用 oracle 的 number(1) 即可,也就是说长度要是 1

https://www.cnblogs.com/softidea/p/7101091.html

2019-09-20 14:28

@Code_Cat 应该可以生成 boolean 类型, oracle 用的应该不是 bit ,应该有个对应的字段类型

2019-09-20 10:24

@Code_Cat 找找 JDBC 文档中的 oracle 哪种类型对应 java 的 boolean 即可

因为在生成的过程中,jfinal 是直接拿到 JDBC 的映射规则

2019-09-20 10:22

#para 指令所在之处永远是生成一个问号占位字符,所以你上面的代码生成的sql 如下:
select * from ? where formKey= ? and objectID = ?

根据 JDBC 规则,问号占位字符只能出现在 where 子句中, 而你的 sql 的 form 后面居然也出现了问号占位字符, 必然出错

改进的方向是使用输出指令,例如:
select * from #(tableName) where formKey= #para(1) and objectID = #para(2)

注意看上面的 #(tableName) 的用法

如果一定要用下标,改成这样:
select * from #(_PARA_ARRAY_[0]) where formKey= #para(1) and objectID = #para(2)

其中的 _PARA_ARRAY_ 指向了你传的数组变量,在文档中有说明:
https://www.jfinal.com/doc/5-13

2019-09-20 09:25

@苏伟伟 enjoy 引擎用起来符合直觉,几乎无学习成本