2018-03-03 15:43
@Speaking 单步调试一下 dictSeselect 指令内部的 exec 方法,要确定 exec 方法是否被调用过了
此外,在 exec 方法中你确定调用过 exprList.eval(scope) 这个方法? 这个方法是对你传入的表达式参数进行求值的,如果不调用,就没有值
2018-03-02 16:50
@zhongshg jfinal enjoy 引擎的表达式在与 java 打通的基础上,做了极少的有助于用户体验的增强,例如本贴中的功能不仅支持 {1:'自买', 2:'跟买'}.get(type), 还支持:
{1:'自买', 2:'跟买'}[type]
如果懒得学习这类增强的用法,当成 java 去用也很方便
针对某个语言去写模板引擎,必须要与其语言直接打通的设计理念,这个在 jfinal enjoy 看来是极为自然的事情,可惜 freemarker velocity 之类的并没有这么做
2018-03-02 11:36
用一下 jfinal 中整合的 ehcache,关键配置是下面几个:
name="block"
timeToIdleSeconds="3000"
timeToLiveSeconds="0"
timeToIdleSeconds 为 3000 表示空闲时间达到 5 分钟即清除这个缓存,timeToLiveSeconds 为 0 表示缓存最大存活时间为永远,也就是说缓存清除交由第一个配置 timeToIdleSeconds 来控制
再做个拦截器,得到请求的 ip 地址为 key 值进行一些逻辑操作,大致如下:
String ip = IpUtils.getClientIp(inv.getController().getRequest());
Integer counter = CacheKit.get("block", ip);
if (counter == null) {
counter = 1;
CacheKit.put("block", ip, counter);
inv.invoke();
return ;
}
counter++;
CacheKit.put("block", ip, counter);
if (counter < MAX_VALUE) {
inv.invoke();
} else {
inv.getController().renderJson("msg", "访问太频繁");
}
2018-03-01 17:38
@wumugulu 试试 UploadFile files[] 改成 UploadFile files 看能不能支持