2018-04-12 21:27

@clfjava

前台:
$("input").keyup(function(){
var v =$("input").val();
$.post("/xxx/url/xxx",{doubleData:v},function(result){
$("span").html(result);
});
});

后台:
Double doubleData = Double.valueOf(getPara("doubleData"));

如果有很多这样的取值地方, 可以对 BaseController进行增强一下:
public Double getParaToDouble(String name, Double defaultValue) {
return toDouble(getRequest().getParameter(name), defaultValue);
}

private Double toDouble(String value, Double defaultValue) {
try {
if (StrKit.isBlank(value))
return defaultValue;
value = value.trim();
return Double.valueOf(value);
}
catch (Exception e) {
throw new ActionException(400, RenderManager.me().getRenderFactory().getErrorRender(400), "Can not parse the parameter \"" + value + "\" to Double value.");
}
}
这样就可以:
Double doubleData = getParaToDouble("doubleData");




2018-04-11 20:56

如果客户要求使用 JSP 开发 ... > JFinal使用技巧-在JSP中使用Enjoy 23333

2018-04-11 20:37

后台正常写没有区别:3.4 getPara系列方法
不要使用URL-挂参: 如xxx/1-2.0-3就没事.

前端看教程:$.post() 方法使用 HTTP POST 请求从服务器加载数据。

2018-04-11 19:30

@hotsmile 2333 去年的帖子... 你才上线啊, 你如果想"自定义一个注解类", 然后还要 "拦截到这个注解类" 操作... 需要用的时候 还需 "加注解" 到某个地方 ..
很繁琐了... 参考波总说的, 但是不要注册成"全局拦截器" , 在需要的地方 使用 "@Before(MyLogInterceptor.class)" 就可以了, 再配合 Duang 用来对目标进行增强 就可以了, 何必再造一个轮子 ~ 4.2 Interceptor

2018-03-31 15:22

@炒鸡大虾 如果当前线程不再getAccessTokenStr() , 是的要释放 , 你可以先了解一下ThreadLocal这个类, 再看下jfinal-weixin里面的源码,就什么都清楚了

2018-03-31 10:17

@炒鸡大虾 是的, 但是用完一定要记得 ApiConfigKit.removeThreadLocalAppId(); 释放掉 , 不然有可能出现内存泄漏的问题

2018-03-30 20:20

Service层里业务需要手动调取:
ApiConfigKit.setThreadLocalAppId(appId); 手动绑定到当前线程
AccessTokenApi.getAccessTokenStr() 返回值
ApiConfigKit.removeThreadLocalAppId();手动释放

通过URL API控制器调取:
只要@Before(ApiInterceptor.class 就能自动根据URL挂参appId(默认可修改)=xxx
Controller 自动绑定 ApiConfig 对象到当前线程, 和释放
所以后面代码能直接调用 AccessTokenApi.getAccessTokenStr()

2018-03-30 09:25

save之前先删一下id
cust.remove("id");

2018-03-25 16:30

@ztvip71 贴码吧, 猜不出来, 你试试设置 scheduler.setDaemon(true);

2018-03-23 22:19

默认JFinalJson工具转 model 时 是不支持自定义属性的,

if (value instanceof Model) {
Map map = com.jfinal.plugin.activerecord.CPI.getAttrs((Model)value);
return mapToJson(map, depth);
}
if (value instanceof Record) {
Map map = ((Record)value).getColumns();
return mapToJson(map, depth);
}

/** com.jfinal.plugin.activerecord.CPI.getAttrs
* Return the attributes map of the model
* @param model the model extends from class Model
* @return the attributes map of the model
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public static final Map<String, Object> getAttrs(Model model) {
return model._getAttrs();
}


所以正确的姿势 >> 你要改为:
public class Node extends BaseNode<Node> {

public String getDeviceChannel() {
return get("deviceChannel");
}
public void setDeviceChannel(String deviceChannel) {
put("deviceChannel ", deviceChannel)
}
}

如果deviceChannel 是数据库的字段就用 set("deviceChannel", deviceChannel)
不是数据库的字段就用put(xx)

2018-03-22 21:04

看调用量呗, 非常低就直接数据库了呗 , 如果有些频繁 就用 jfinal集成的EhCache整整呗 , 还有 jfinal-weixin 里面 static IAccessTokenCache 默认就是用的 Map , 同时开发者可以自由选择使用 EhCache 或者Redis 或是自己实现的