2017-03-06 17:31

对于上面注意的第一点来说,并不是专门针对 jfinal 来说的,使用其他开发框架也一样

2017-03-06 17:30

@出关客 文档中有一小节对 map 定义有过说明,这个就是 key value 传参方案

2017-03-06 17:29

@sruz 最省事的办法是将数据表字段直接搞成驼峰的,然后使用 MixedJsonFactory,所有事情都没有了

FastJson 除了不支持 record 以外,一切都好,这也是 MixedJsonFactory 之所以存在的最大原因

2017-03-06 17:27

简单说,就是不存在单独的管理员登录的入口,让攻击者少了一个可攻击的地方,只有登录以后的管理员身份可以访问 admin,否则全部显示 404 页面

2017-03-06 17:26

在前端登录进去,然后访问一下 localhost/admin 即可,jfinal club 项目中有一个说明文件,说明了为何这样处理,仔细看一下里面的说明文件

2017-03-06 17:13

@JFinal 虽然看似程序 setAttr 过来的是一个 Object 型对象,但这个 Object 型对象本质上仍然是 ArrayList

2017-03-06 17:12

@Ferrari8899 不要去猜测程序的行为,一定要单步调试,程序不是写出来的,是调试出来的

2017-03-06 17:11

@Ferrari8899 注意看异常中的这句:TemplateException: In the class java.util.ArrayList can not find getUserName() method, also can not find "userName" field

已经明确说明了是在调用 java.util.ArrayList 这个对象的 getUserName() 方法,仔细单步调试一下程序

2017-03-06 17:04

@Ferrari8899 异常已经很明显,你是在对一个 ArrayList 型的对象进行 getUserName() 取值,显然是取不到的,对这个 ArrayList 进行迭代就可以了:
#for(x : list)
#(x.userName)
#end

2017-03-06 16:42

jfinal 自身定位于 MVC + ORM,并且自 jfinal 2.1 版本以来,model 也具有了 getter、setter 方法,所以理论上来说 jfinal 项目可以作为微服务架构之下的节点而存在,选择自己喜欢爱的微服务支持的第三方直接用就好,例如使用 doubbo

用 jfinal 来做微服务时,主要注意如下几点:
1:每个 jfinal 节点,如果同时又做了集群,那么让节点是无状态,如果有状态则要有状态同步机制,例如节点 JVM 内的缓存要在集群之中同步
2:每个 jfinal 节点,可以使用 renderJson() 实现 rest 服务,也可以使用 rpc + 业务层拦截器的方式直通业务层,这样可以连控制器都省了

2017-03-06 16:37

@Ferrari8899 终极解决办法是打断点,然后单步进行调试,动态地去看程序到底在做些什么,而不要静态去看源代码

2017-03-06 16:21

@Ferrari8899 调试的时候,没有那个字段,那肯定是取不到值的,注意排查一下错误

2017-03-06 16:19

#(user.name) 调用优先级从高到低如下:
1:user.getName()
2:如果 user 为 Model 或者 Record,则调用 user.get(name)
3:如果 user 为 Map,则调用 user.get(name)
4:如果 user 存在 public 型的 name 属性,则获取 user.name 的值

对照以上优先级检查一下,是否满足了这些条件之一

2017-03-06 15:58

@Ferrari8899 看控制台的异常,不要看浏览器,如果控制台没有异常,则检查一下日志配置好没有,异常是通过日志组件输出的