JFinal

登录 注册

1 快速上手

2 JFinalConfig

3 Controller

4 AOP

5 ActiveRecord

6 Enjoy 模板引擎

7 EhCachePlugin

8 RedisPlugin

9 Cron4jPlugin

10 Validator

11 国际化

12 Json 转换

13 JFinal架构及扩展

14 升级到 3.5

3.10 render系列方法

    render系列方法将渲染不同类型的视图并返回给客户端。JFinal目前支持的视图类型有:JFinal Template、FreeMarker、JSP、Velocity、JSON、File、Text、Html、QrCode 二维码 等等。除了JFinal支持的视图型以外,还可以通过继承Render抽象类来无限扩展视图类型。

    通常情况下使用Controller.render(String)方法来渲染视图,使用Controller.render(String)时的视图类型由JFinalConfig.configConstant(Constants constants)配置中的constants. setViewType(ViewType)来决定,该设置方法支持的ViewType有:JFINAL_TEMPLATE、FreeMarker、JSP、Velocity,不进行配置时的缺省配置为JFINAL_TEMPLATE。

    此外,还可以通过 constants.setRenderFactory(IRenderFactory)来设置Controller中所有render系列方法所使用的Render实现类。

    假设在JFinalConfig.configRoute(Routes routes)中有如下Controller映射配置:routes.add(“/user”, UserController.class, “/path”), render(String view)使用例子:

// 渲染名为test.html的视图,且视图类型为 JFinal Template
renderTemplate(”test.html”);

// 生成二维码
renderQrCode("content");

// 渲染名为test.html的视图,且视图类型为FreeMarker
renderFreeMarker(”test.html”);

// 渲染名为test.html的视图,且视图类型为Velocity
renderVelocity(“test.html”);

// 将所有setAttr(..)设置的变量转换成 json 并渲染
renderJson();

// 以 "users" 为根,仅将 userList 中的数据转换成 json 并渲染
renderJson(“users”, userList);

// 将user对象转换成 json 并渲染
renderJson(user);

// 直接渲染 json 字符串
renderJson("{\"age\":18}" );

// 仅将setAttr(“user”, user)与setAttr(“blog”, blog)设置的属性转换成json并渲染
renderJson(new  String[]{"user", "blog"});

// 渲染名为test.zip的文件,一般用于文件下载
renderFile("test.zip");

// 渲染纯文本内容 "Hello JFinal"
renderText("Hello JFinal");

// 渲染 Html 内容 "Hello Html"
renderHtml("Hello Html");

// 渲染名为 test.html 的文件,且状态为 404
renderError(404 , "test.html");

// 渲染名为 test.html 的文件,且状态为 500
renderError(500 , "test.html");

// 不渲染,即不向客户端返回数据
renderNull();

// 使用自定义的MyRender来渲染
render(new MyRender());


注意

1:IE不支持contentType为application/json,在ajax上传文件完成后返回json时IE提示下载文件,解决办法是使用:render(new JsonRender().forIE())或者render(new JsonRender(params).forIE())。这种情况只出现在IE浏览器 ajax 文件上传,其它普通ajax请求不必理会。

2:除renderError方法以外,在调用render系列的方法后程序并不会立即返回,如果需要立即返回需要使用return语句。在一个action中多次调用render方法只有最后一次有效。