• Controller


    1.概述 

          Controller 是 JFinal 核心类之一,该类作为 MVC 模式中的控制器。基于 JFinal 的 Web 应用的控制器需要继承该类。Controller 是定义 Action 方法的地点,是组织 Action 的一种方式,一个 Controller 可以包含多个 Action。Controller 是线程安全的。

    2 Action 

          Controller 以及在其中定义的 public 无参方法称为一个 Action。Action 是请求的最小单位。Action 方法必须在 Controller 中声明,该方法必须是 public 可见性且没有形参。

          以上代码中定义了两个 Action:HelloController.index()、HelloController.test()。在 Controller中提供了 getPara、getModel 系列方法 setAttr 方法以及 render 系列方法供 Action 使用。

    3 getPara 系列方法 

          Controller提供了getPara系列方法用来从请求中获取参数。getPara系列方法分为两种类型。第 一 种 类 型 为 第 一 个 形 参 为 String 的 getPara 系列方法。 该 系 列 方法是对HttpServletRequest.getParameter(String name) 的封装, 这 类 方 法 都 是 转 调 了HttpServletRequest.getParameter(String name)。第二种类型为第一个形参为 int 或无形参的getPara 系列方法。该系列方法是去获取 urlPara 中所带的参数值。getParaMap 与 getParaNames分别对应 HttpServletRequest 的 getParameterMap 与 getParameterNames。

          记忆技巧:第一个参数为 String 类型的将获取表单或者 url 中问号挂参的域值。第一个参数为int 或无参数的将获取 urlPara 中的参数值。

          getPara 使用例子: 

         

    4 getModel 系列方法 

          getModel 用来接收页面表单域传递过来的 model 对象,表单域名称以”modelName.attrName”方式命名,除了支持 JFinal 的 Model 对象以外,getModel 同时也支持传统的 Java Bean。以下是一个简单的示例:

          上面代码中,表单域采用了”blog.title”、”blog.content”作为表单域的 name 属性,”blog”是类文件名称”Blog”的首字母变小写,”title”是 blog 数据库表的 title 字段,如果希望表单域使用任意的 modelName ,只需要在 getModel 时 多 添 加 一 个 参 数 来 指 定 , 例 如 :getModel(Blog.class, ”otherName”)。

    5 getFile 文件上传 

          Controller 提供了 getFile 系列方法支持文件上传。特别注意:如果客户端请求为 multipart request(form 表单使用了 enctype="multipart/form-data"),那么必须先调用 getFile 系列方法才能使 getPara 系列方法正常工作,因为 multipart request 需要通过 getFile 系列方法解析请求体中的数据,包括参数。

    6 setAttr 方法 

          setAttr(String, Object)转调了 HttpServletRequest.setAttribute(String, Object),该方法可以将各种数据传递给 View 并在 View 中显示出来。

    7 session 操作方法 

          通过setSessionAttr(key, value)可以向session 中存放数据,getSessionAttr(key)可以从session中读取数据。还可以通过 getSession()得到 session 对象从而使用全面的 session API。

    8 render 系列方法 

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

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

          此外,还可以通过 constants.setMainRenderFactory(IMainRenderFactory) 来设置Controller.render(String)所使用的视图,IMainRenderFactory 专门用来对 Controller.render(String)方法扩展除了 FreeMarker、JSP、Velocity 之外的视图。

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

          其它 render 方法使用例子: 

          注意:
          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 方法只有最后一次有效。

  • 相关阅读:
    python自定义编写有关用户登录注册程序代码
    项目经理多年的经验之谈
    Linux虚拟机克隆后,启动系统发现网卡无法启动
    mysql出现服务器异常后,重启服务器后无法开启数据库处理方法
    计算机毕业四年,我都做了什么?
    个人Blog(采用Django+uwsgi+nginx)里面包含很多技术文章
    Delphi to C# Equivalancesdelphi和C#类似的地方
    Javascript浏览器关于scrollLeft,scrollTop的兼容性
    Mozilla Firefox15怎么样才能把标签页弄到下面去,就和360的一样,Mozilla Firefox15没有取消标签置顶这个选项……
    Delphi过程函数传递参数的几种方式
  • 原文地址:https://www.cnblogs.com/xbj-2016/p/5881986.html
Copyright © 2020-2023  润新知