开发者社区> 问答> 正文

jFinal model映射问题求解?报错

@jfinal

你好,最近在用jfinal做小项目,发现一个问题不太明白麻烦解答一下。。。

在外部创建数据库字段,例如user_name,自动生成model中就会有userName的get/set

前端ftl中取值可以用user.user_name或者user.userName两种方式皆可。

但是如果利用控件提交,controller中通过getModel(User.class)方式来获取对象,如果页面中控件名称为user.user_name那没问题,但是如果控件名称为user.userName就会报错找不到userName属性,这是为什么呢?这样许多名称需要用下划线来命名,是不是跟java几乎约定俗成的驼峰命名方式有冲突呢?

展开
收起
爱吃鱼的程序员 2020-06-09 10:39:00 533 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

       getModel在获取数据时,是根据数据表中的字段名来的,而字段名为"user_name"这种带下划线的,所以getModel需要使用"user_name",。

       而ftl取值的时候,是调用的model.getter方法,getter方法是遵守了驼峰命名的。楼主所说的flt使用user_name与userName都可以,这个应该是不正确的,默认仍然是使用的getter方法

      解决方案是将getModel改为getBean,页面仍然统一使用"userName"这种风格,因为getBean是根据setter方法来操作的,而非表字段名

      前面说的大前提是jfinal2.2版本,此版本下才有getBean以及model可生成getter、setter。终极解决方案是让数据表字段名也使用驼峰命名,这样就至始至终都不需要知道这件事了。jfinal社区驼峰命名字段已经好几年了,非常之爽

    flt使用user_name与userName都可以这个是经过测试的,都能正常取到值啊。。调用get方法说明正确的是用驼峰方式取值,可是经过测试,下划线方式例如user.user_name也能取到正确的值这是为什么呢?

    引用来自“JFinal”的评论

       getModel在获取数据时,是根据数据表中的字段名来的,而字段名为"user_name"这种带下划线的,所以getModel需要使用"user_name",。

       而ftl取值的时候,是调用的model.getter方法,getter方法是遵守了驼峰命名的。楼主所说的flt使用user_name与userName都可以,这个应该是不正确的,默认仍然是使用的getter方法

      解决方案是将getModel改为getBean,页面仍然统一使用"userName"这种风格,因为getBean是根据setter方法来操作的,而非表字段名

      前面说的大前提是jfinal2.2版本,此版本下才有getBean以及model可生成getter、setter。终极解决方案是让数据表字段名也使用驼峰命名,这样就至始至终都不需要知道这件事了。jfinal社区驼峰命名字段已经好几年了,非常之爽

    回复 @JFinal:是这样,例如user,后台是返回setArrt("user",user)前台用user.userName,就会调用baseUser中的get,如果用user.user_name就会直接取到值。断点调试setArrt("user",user)返回的user中已经包含了user_name属性,所以可以直接获取到回复 @xiaobaiwupen:取值是根据是否为驼峰动态调整的,那么,提供给页面取值的数据是完全相同的形式么?例如,是不是有的给的json,有的给的是普通的setAttr(k,v)传过去的?回复 @JFinal:经测试,驼峰方式取值,是通过调用get/set方法;下划线方式取值,是直接从controller返回的对象中获取的属性值,类似直接获取json数据,两种方式都能取值且值完全一致,也就是说取值渠道不同但是取到的值正确。造成这种情况正常么?这个问题需要怎么解决?或者说哪种方式更加符合最初设计的初衷?求波总指点你自己扩展过这个功能?理论上来说ftl在同一时刻只支持一种方式取值。建议你在model的get(String)以及getXxx(String)方法中设置一个断点,看到底是在调用的哪个方法
    2020-06-09 10:39:15
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载