2017-07-27 21:06

@淡定007 generate jfinal 有专用的生成器

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:57

@杜福忠 之前研究过一下
http://www.jfinal.com/share/299

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-27 14:30

TreeNode 是 _tree 表的 映射类吗 ?
是:
改成 List ls = TreeNode.dao.find(strSql);
直接用即可了

否:
改成:
for( Record r : ls )
mls.add(new TreeNode().put(r));
renderJson(mls);
即可

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管理控制 这个功能中,
你可以参考一下,
使用 & 做分割的

2017-07-18 22:38

部署安装必看事项:
https://my.oschina.net/jfinal/blog/353062

2017-07-15 12:39

日志系统最好使用: Handler 不会被清除

手册:
2.7 configHandler (Handlers me)
此方法用来配置JFinal的Handler,如下代码配置了名为ResourceHandler的处理器,Handler
可以接管所有 web 请求,并对应用拥有完全的控制权,可以很方便地实现更高层的功能性扩展。
public void configHandler(Handlers me) {
me.add(new ResourceHandler());
}

2017-07-13 12:11

@或是的话 核粉是指, 会去主动推广和维护JF,一起成长的人

2017-07-13 09:14

@18899597557 在社区搜索效果可以 https://www.oschina.net/

2017-07-13 09:03

真实的目地是需要筛选一批人 , 199波总会差这个开玩笑嘛! 如果连199都不愿意付出的人, 基本都不是JF核粉~ 必须要建立一个强稳固的圈子生态