【JFinal】getModel问题

00oo 发布于 2014/07/10 09:33
阅读 6K+
收藏 0

controller 中采用getModel(model.class)无法获得model实体

但是采用getModel(model.class,“modelName”)就可以获取到

前台代码同JFinal官方Demo相同,为什么不能直接采用第一种方式获取实体对象呢?

@JFinal

加载中
0
JFinal
JFinal

       getModel(ModelName.class) 相当于调用了: getModel(ModelName.class, "modelName") 这个方法,即: getModel(ModelName.class) 将 ModelName 的首字母变小写当成 modelName 来使用,modelName 是指页面表单中使用的 modelName。

    当页面表单中的modelName 正好是ModelName 类的首字母小写则可以省去getModel 的第二个参数

0
糊搞

你首先得清楚,电脑是死物,不是神。

如果你页面上使用obj作Model名,请问,当你不是原开发者时,看得出来obj是对应哪个Model吗?就算你是原开发者,10年后再看代码,估计也记不清楚了吧。。。

同理,电脑更加不清楚,因此,你得使用getModel(model.class,“modelName”)让电脑这蠢货知道目标是谁。

0
00oo
00oo

引用来自“糊搞”的评论

你首先得清楚,电脑是死物,不是神。

如果你页面上使用obj作Model名,请问,当你不是原开发者时,看得出来obj是对应哪个Model吗?就算你是原开发者,10年后再看代码,估计也记不清楚了吧。。。

同理,电脑更加不清楚,因此,你得使用getModel(model.class,“modelName”)让电脑这蠢货知道目标是谁。

我之前以为在配置文件中将表跟model对应起来,然后页面中采用格式化的表单名称之后会直接注入。例如JFinal官方Demo中的表单名称为blog.title、blog.content等,在后台controller中可以直接getModel(blog.class),获取实体。

如您所说,如果为了更代码语义清晰,最好还是采用第二种方式进行注入?

0
糊搞

引用来自“糊搞”的评论

你首先得清楚,电脑是死物,不是神。

如果你页面上使用obj作Model名,请问,当你不是原开发者时,看得出来obj是对应哪个Model吗?就算你是原开发者,10年后再看代码,估计也记不清楚了吧。。。

同理,电脑更加不清楚,因此,你得使用getModel(model.class,“modelName”)让电脑这蠢货知道目标是谁。

引用来自“00oo”的评论

我之前以为在配置文件中将表跟model对应起来,然后页面中采用格式化的表单名称之后会直接注入。例如JFinal官方Demo中的表单名称为blog.title、blog.content等,在后台controller中可以直接getModel(blog.class),获取实体。

如您所说,如果为了更代码语义清晰,最好还是采用第二种方式进行注入?

如果你的页面上的Model名和Model遵循约定(驼峰命名),用getModel(Model.class)一定能取到值,否则使用getModel(Model.class,“modelName”)

如果不能取得,说明你代码出现错误了,你不能因为没发现自己错误而说JFinal的getModel(Model.class)接口有问题。。。

0
00oo
00oo

引用来自“糊搞”的评论

你首先得清楚,电脑是死物,不是神。

如果你页面上使用obj作Model名,请问,当你不是原开发者时,看得出来obj是对应哪个Model吗?就算你是原开发者,10年后再看代码,估计也记不清楚了吧。。。

同理,电脑更加不清楚,因此,你得使用getModel(model.class,“modelName”)让电脑这蠢货知道目标是谁。

引用来自“00oo”的评论

我之前以为在配置文件中将表跟model对应起来,然后页面中采用格式化的表单名称之后会直接注入。例如JFinal官方Demo中的表单名称为blog.title、blog.content等,在后台controller中可以直接getModel(blog.class),获取实体。

如您所说,如果为了更代码语义清晰,最好还是采用第二种方式进行注入?

引用来自“糊搞”的评论

如果你的页面上的Model名和Model遵循约定(驼峰命名),用getModel(Model.class)一定能取到值,否则使用getModel(Model.class,“modelName”)

如果不能取得,说明你代码出现错误了,你不能因为没发现自己错误而说JFinal的getModel(Model.class)接口有问题。。。

我之前的问题是询问我可能出现错误的地方,并没有说JFinal的接口有问题。

经过测试,相对于model的表单名称应该采用小驼峰命名方式,这样后台直接getModel(model.class)就可以获取的注入之后的对象了。

另谢谢您的回答!

0
00oo
00oo

引用来自“JFinal”的评论

       getModel(ModelName.class) 相当于调用了: getModel(ModelName.class, "modelName") 这个方法,即: getModel(ModelName.class) 将 ModelName 的首字母变小写当成 modelName 来使用,modelName 是指页面表单中使用的 modelName。

    当页面表单中的modelName 正好是ModelName 类的首字母小写则可以省去getModel 的第二个参数

多谢你的补充回答!
0
龙影
龙影

引用来自“JFinal”的评论

       getModel(ModelName.class) 相当于调用了: getModel(ModelName.class, "modelName") 这个方法,即: getModel(ModelName.class) 将 ModelName 的首字母变小写当成 modelName 来使用,modelName 是指页面表单中使用的 modelName。

    当页面表单中的modelName 正好是ModelName 类的首字母小写则可以省去getModel 的第二个参数

比如表单中<input name="user.uname"> 那么映射的是model类User的属性是uname,那么你需要这么写getModel(User.class),即等同于getModel(User.class,"user");

但是这里只是适合普通的表单,但对于某些jquery form提交的不能包含小数点名称的时候需要重写下这个getModel方法。即不是根据modelname来获。


00oo
00oo
jquery form 提交的话,我用的笨方法,单独获取参数再操作,没有研究怎么重写getModel方法。。。
返回顶部
顶部