2017-07-27 21:05
@淡定007
回复: 这么写 就有数据了 但又发现mls转json都是{}空对象
答:
TreeNode 确定没有继承 Model 吗? 如果是继承的, 那么setId 等方法内部 需要这样写 set("id", id) ,
原因是: 源码中这样写到 attrs.put(attr, value);
public M set(String attr, Object value) {
Table table = getTable(); // table 为 null 时用于未启动 ActiveRecordPlugin 的场景
if (table != null && !table.hasColumnLabel(attr)) {
throw new ActiveRecordException("The attribute name does not exist: \"" + attr + "\"");
}
attrs.put(attr, value);
getModifyFlag().add(attr); // Add modify flag, update() need this flag.
return (M)this;
}
然后默认解析json的时候源码这样写的:
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((Model)value);
中调
protected Map getAttrs() {
return attrs;
}
所以:
如果你用
public void setId(String id) {
this.id = id;
}
那么 attrs Map中就没有值了~~
json中也就没有值了~
这个就是原因了~
再问需要发5毛红包了 ~2333
2017-07-27 17:16
@linuxea
http://www.jfinal.com/share/299
这个例子刚好适合你说的场景 ,
如果想时时的改变, 还可以在上述例子中改写
private static String getCacheType() {
return PropKit.get("cache_type", "ehcache");
}
把 PropKit.get("cache_type", "ehcache");
改成 :
private static final ThreadLocal cache_type = new ThreadLocal();
private static String getCacheType() {
String cache_type = cache_type.get("cache_type")
return cache_type != null ? cache_type : "ehcache";
}
publicstatic String setCacheType(String cache_type) {
cache_type.set(cache_type);
}
//快捷
publicstatic String setCacheTypeEhcache() {
setCacheType("ehcache");
}
publicstatic String setCacheTypeXxxcache() {
setCacheType("xxxx");
}
外面同线程的地方 调用一下set即可了, 是不是很简单了?~ 点个赞呗~
2017-07-27 16:56
这样配置的:
ActiveRecordPlugin arp = new ActiveRecordPlugin(DbKit.MAIN_CONFIG_NAME, druidPlugin);
arp.setCache(new MyCache());
// 自己实现 接口 ICache 即可切换任何 Cache
public class MyCache implements ICache {
//.......
T get(String cacheName, Object key);
void put(String cacheName, Object key, Object value);
void remove(String cacheName, Object key);
void removeAll(String cacheName);
}
2017-07-27 16:04
@淡定007 看你 TreeNode 类的 setId 等方法 里面是怎么写的? 是 set("id", id) 还是 this.id = id 了?
2017-07-25 10:01
@hotsmile 这样实现不太好, 用注解套的太深, 不易开发和维护, 建议拆成平级的,
你可以看下 InterceptorStack 类 将多个拦截器组合成为 对外部是一个拦截器 :
public class UserSongLikeValidator extends InterceptorStack {
public void config() {
addInterceptors(new UserIdValidator());//先运行
addInterceptors(new UserSongLikeValidator();//后运行
//.... 继续
}
}
用的时候这样:
@Before(UserSongLikeValidator.class)
是不是也满足你的需求了?
2017-07-24 17:02
@xiaoaqiang 比如搜索的接口吧
String url = "http://unionsug.baidu.com/su?wd=";
String ret = HttpKit.post(url, "jfinal");
这个就是正常的表单用就行
2017-07-24 14:47
@xiaoaqiang
http://www.jfinal.com/share/236
我有功能用到了 HttpKit.post 的一种交互方式,
在 ActiveRecordPluginService管理控制 这个功能中,
你可以参考一下,
使用 & 做分割的