您的位置:首页 > 其它

Jfinal中的render

2016-03-29 16:02 239 查看
jfinal中的render就是渲染的意思。

可以将运行的结果,渲染为网页送给brower,也可以渲染一些静态内容。

1.渲染的视图类型

(1)类型

①根据路径

根据路径就是说它们的参数都是renderXXX(String view)

这个view指出,访问该文件的具体内容。

这种类型有:Freemarker、Jsp、Velocity、Xml

其中前三种是配置的一种渲染方法,可以用来渲染各种格式,然后用view指出路径来。

②根据内容

根据内容就是,填写的参数不是表示某个文件的路径,

而是直接填写具体的内容,而Json也可以是一个json对象等多种方式。而File一般用于文件下载。

Text、Json、File、Html、JavaScript

③直接render

直接render默认就是使用RenderFreemarker

可以通过在JFinalConfig.configConstant(Constants constants) 配 置 中 的 constants.setViewType(ViewType)来设定。

④自定义render

比如:render(new XXXXRender())

这里就是要自己定义一个XXXX类,来进行自定义的渲染。然后新建一个类的实例。

比如对于IE这种不支持Ajax的,就可以自定义一个类来实现特定的功能。

(2)配置

像三大渲染类型这种freemarker、jsp、velocity都需要再导入对应的jar包,包的版本在jfinal-all里面都有。

如果使用了其中一种又没有导入jar包的话,直接上图。





居然不是classNotFound,总之坑爹。

2.渲染路径

前面提到freemarker、jsp、velocity、xml都是通过路径,来指定某文件render给客户端。

这里的路径有两种

(1)绝对路径

/aaa/bbb/ccc.html

这个最开始的/表示的是,webroot或者webapp这个web的根路径。

上面的语句就表示,webapp文件夹下面的aaa/bbb/ccc.html文件。

(2)相对路径

①BaseViewPath

在configConstant里面配置。

②routePath

在configRoute里面配置。

③randerPath

在具体render的时候配置。

假如我的配置是

①me.setBaseViewPath("/WEB-INF/fcl");

②me.add("/", com.TestController.class, "test");

③render("content.html");

那么最终,我要呈现的文件地址为/WEB-INF/fcl/test/content.html

3.绕过jfinal直接由servlet container呈现

凡是采用controller里面的action render出来的都是使用了jfinal的。

如果要跳过jfinal,可以在地址栏中直接敲入静态页面的地址。

格式为host/aaa/bbb/ccc.html

表示,host为主机地址,然后与上面是一致的。这个时候会通过servlet container直接访问html文件

我这里的servlet container是jetty,而且我没有它的jsp扩展包,所以当访问jsp文件的时候,会是如图



解决办法有两种:

①加载jetty的jsp jar包。不过这里我也不知道具体哪个版本的合适。因为jfinal的这个jetty是特殊定制的。

②不要越过jfinal,不要在地址栏里直接访问静态文件,而是采用jfinal的render来渲染这个页面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: