2017-01-10 17:05

我觉得你的需求较个性化,所以,可以利用底层已有的 Prop 类,自己参考PropKit再扩展出一个满足需求的 MyPropKit 来用

2017-01-10 17:03

没明白 useFirst 是做什么的,PropKit.use(...) 可以指定不同的配置文件去使用。此外,这个功能的设计基于以下假设:
1:配置文件很小,例如数据库连接ip地址,用户密码名码,通常1KB不到
2:支持多配置文件,可以让不同配置放在不同的文件中便于管理,文件同样也很小
3:多数情况下不需要处理内存回收,因为占用实在太小
4:如果用户是处女座的完美义义者,可以用 useless(...)回收下内存

当然,你说的使用弱引用也是一个改进方向,只不过这个功能目前为止对需求满足得不错

2017-01-10 16:46

注意这里的一个关键点,你无法知道用户什么时候用,什么时候不用,而 Prop 模块的基本出发点是针对应用的配置文件,从这个出发点上看问题,配置文件的内容几乎都是很少的,一般不会超 3KB

2017-01-10 16:45

@xRhbN 假定用户 PropKit.use(a).get(...),然后 jfinal 擅做主张,认为用户只用这一次,自动将其 PropKit.useless(a) 掉,那么用户再次用的时候,发现出异常了

应用场景是无法穷尽的,jfinal 能做的只能是尽可能照顾最可能出现的场景,然后对少数场景提供用户可选的支持,而对于极其极其极其少的场景,交给用户自己去扩展

2017-01-10 16:31

@似水流言1 这几天随时可能发布,有点文档随时写完,随时发布

2017-01-10 16:30

PropKit 最初是为正常配置文件设计的,所以你说的场景很少,如果出现这样的场景,jfinal 也早就有准备,用一下 PropKit.useless(...) 将其从内存中移除就好

jfinal 远比一般人所需要的要想得周全

2017-01-09 20:58

@jerry1216 renderJson 有很多重载方法,功能不一,建议看看手册,此外,renderJson可以支持已被转换成 String的 json 内容,所以,当无法满足需求时,你可以使用任何第三方工具,预先将 json 数据转换好,然后这样做:

String jsonContent = MyJsonTook.toJson(...);
renderJson(jsonContent);

2017-01-09 20:56

有很多方法实现,例如在拦截器中通过 inv.getControllerKey()甚至是 getActionKey()来识别当前被拦截的是上Controller

例如可以自定义注解,然后在拦截器通过 inv.getMethod().getAnnotation() 得到上面的自定义注解,然后做自己想做的事情,这个用法可参考jfinal的 ehcache 模块

2017-01-09 20:52

@toni 哈哈,确实是白写了

2017-01-09 20:09

@似水流言1 必然没有可比性,jfinal 是极简设计,通常是一行到两行代码搞定

2017-01-09 17:45

@wids 比mybatis爽三倍是基本要求

2017-01-09 15:11

@GFzero 文档中只介绍了一些基本的核心的功能与用法,通过这些基本用法可以组合成千变万化的功能,就像万花筒一样,极少量的基本元素与规则,可自由组合成无限形态的色彩

2017-01-09 11:54

第一个问题没看到具体代码无法知道原因,第二个问题getModel 方法是 controller 中提供的,所以只能在controller中用,但你可以先通过
User user = getModel(User.class)
service.doSomeThine(user)
这种形式,将 user 传递给业务层,请千万注意,一定要有业务层,而且业务逻辑一定要写在业务层,这样才是好习惯,有利于项目的演化

2017-01-09 11:50

@kyytyp 这个是正解,此外,还可以使用一个全局拦截器,me.add(new GET())这样就可以限定所有请求必须为GET,然后在允许 POST请求的action之上使用一个 @Clear(GET.class) 即可,这样就可以减少拦截器的声明,减少代码量。毕竟绝大多数请求都是 GET

2017-01-08 15:06

自定义status code:getResponse().setStatus(123);
interceptor中取header:inv.getController().getRequest().getHeader(...)
controller中取header:getRequest().getHeader(...)