7
回答
jfinal中freemarker 为何能 ${user.name}
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

jfinal中的Model中并未提供 getName(),也未提供 private String name 属性。为啥能ftl中使用${user.name}获取name的值呢?

但是用jsp的jstl就不行。

举报
alvinte
发帖于6年前 7回/1K+阅
共有7个答案 最后回答: 4年前
这也被你发现了啊?   freemarker调用了JFinal ActiveRecord父类Model中的get(String)方法:user.get("name")方法来完成输出,就这么简单。去年三月开发JFinal的FreemarkerRender时候,我在第一个测试页面,直接上的 ${user.name}没想到输出了,我当时很惊讶,freemarker真是太贴心了,找不到 user.getName()方法会去调用 user.get("name")。JSP的确是不行,所以jfinal_demo的JSP版本暂时没出来,我有时间时对jstl进行扩展或者想别的办法让JSP支持 ${user.name}。

引用来自“JFinal”的答案

这也被你发现了啊?   freemarker调用了user.get("name")方法来完成输出,就这么简单。去年三月开发JFinal的FreemarkerRender时候,我在第一个测试页面,直接上的 ${user.name}没想到输出了,我当时很惊讶,freemarker真是太贴心了,找不到 user.getName()方法会去调用 user.get("name")。JSP的确是不行,所以jfinal_demo的jsp版本暂时没出来,我有时间时对jstl进行扩展或者想别的办法让JSP支持 ${user.name}。
好像还不只,如果是private的属性,虽然没有提供get方法也能取到,我一直感觉很纳闷!

引用来自“wyq_wzw”的答案

引用来自“JFinal”的答案

这也被你发现了啊?   freemarker调用了user.get("name")方法来完成输出,就这么简单。去年三月开发JFinal的FreemarkerRender时候,我在第一个测试页面,直接上的 ${user.name}没想到输出了,我当时很惊讶,freemarker真是太贴心了,找不到 user.getName()方法会去调用 user.get("name")。JSP的确是不行,所以jfinal_demo的jsp版本暂时没出来,我有时间时对jstl进行扩展或者想别的办法让JSP支持 ${user.name}。
好像还不只,如果是private的属性,虽然没有提供get方法也能取到,我一直感觉很纳闷!
有这种事? 是普通Model还是继承至 ActiveRecord Model的类? 具体一点哈

引用来自“wyq_wzw”的答案

引用来自“JFinal”的答案

这也被你发现了啊?   freemarker调用了user.get("name")方法来完成输出,就这么简单。去年三月开发JFinal的FreemarkerRender时候,我在第一个测试页面,直接上的 ${user.name}没想到输出了,我当时很惊讶,freemarker真是太贴心了,找不到 user.getName()方法会去调用 user.get("name")。JSP的确是不行,所以jfinal_demo的jsp版本暂时没出来,我有时间时对jstl进行扩展或者想别的办法让JSP支持 ${user.name}。
好像还不只,如果是private的属性,虽然没有提供get方法也能取到,我一直感觉很纳闷!
如果确实能取到,那肯定是用了反射功能,可以直接取到对象中的private属性,不过我不太相信freemarker会这么去做
好同志,昨天看到我同事在看jfinal文档,今天好奇之下,自己也去看了一下,跟我自己写的框架思想上有点类似,已经集成freemark,框架大小40kb,呵呵,当然我这小框架肯定不能跟你这jfinal比,我的这框架的目标是尽可能提高性耗比,开发模式跟ssi类似,会用ssi或者ssh的,不用看也知道怎么用,看了你框架之后感觉这个想法好像有点鸡肋,好吧,就写这么多,期待你更新
再加一句吧,40kb不算freemark的jar包,freemark的jar包就1m多,哈哈,日志模块,数据库链接池模块,还有很多模块都是自己实现的,哈哈,我项目开发就只带了一个freemark包,表示特别不喜欢公司SSH框架 200M的jar包,用了spring security还不能tomcat集群
顶部