jfinal在后台将一个多表查询的对象传给模板引擎的。后台怎么取不到值。

Object object = DyOaTblUserinfor..selectOne(getParaToInt())setAttr(object)render()

前台用#(user.字段名)取值,显示不了。

求指导!

评论区

JFinal

2017-03-06 15:36

报什么异常?

Ferrari8899

2017-03-06 15:44

@JFinal 屏幕上一片空白。没有信息。因为这个对象是几个表共同查询的,有几个表共同的字段。idea中也没报错。

JFinal

2017-03-06 15:58

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

Ferrari8899

2017-03-06 16:11

@JFinal 日志配置好了。但是还是有一个字段显示不出来,调试的话,是没有那个字段的,但是我用sql运行出来的结果是有那个字段的。

JFinal

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 的值

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

JFinal

2017-03-06 16:21

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

Ferrari8899

2017-03-06 16:36

@JFinal 但是我sql语句在数据运行时查询到的是有那个字段的。为啥在传对象之前,我打印却没有那个字段呢?

JFinal

2017-03-06 16:37

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

Ferrari8899

2017-03-06 16:57

@JFinal [ERROR]-[Thread: http-nio-8080-exec-2]-[com.jfinal.core.ActionHandler.handle()]: /infor/changestaff/3
com.jfinal.render.RenderException: com.jfinal.template.TemplateException: In the class java.util.ArrayList can not find getUserName() method, also can not find "userName" field
Template: "/page/staffInformationChange.html". Line: 13

JFinal

2017-03-06 17:04

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

Ferrari8899

2017-03-06 17:10

@JFinal @JFinal 我明明是一个对象,不是一个集合!

JFinal

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() 方法,仔细单步调试一下程序

Ferrari8899

2017-03-06 17:11

@JFinal 循环遍历就可以了。但是我明明传过来的是一个object的对象啊。怎么突然变成了集合了呢?

JFinal

2017-03-06 17:12

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

JFinal

2017-03-06 17:13

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

Ferrari8899

2017-03-07 11:28

@JFinal 嗯,谢谢波总指导!

JFinal

2017-03-07 12:05

@Ferrari8899 开发的时候,多多使用单步调试,调试的时候,可以观察变量窗口中的变量类型与变量值,极大提升开发效率:程序是调试出来的,不是写出来的

Irin.Chan

2017-03-07 12:36

@JFinal 终极解决办法是打断点。这是个万能的办法。哈哈哈

热门分享

扫码入社