視圖(View)


WebMVC模組支援多種視圖技術,包括JSP、Freemarker、Velocity、Text、HTML、JSON、Binary、Forward、Redirect、HttpStatus等,也可以透過IView介面擴充實作自訂視圖;

控制器視圖的表示方法
  • 透過傳回IView介面類型;
  • 透過字串表達一種視圖類型;
  • 無回傳值或傳回值為空,將使用目前RequestMapping路徑對應的JspView視圖;
視圖檔案路徑配置

控制器視圖檔案基礎路徑,必須以'/' 開始和結尾,預設值為/WEB-INF/templates/;

  ymp.configs.webmvc.base_view_path=/WEB-INF/templates/
視圖物件操作範例

視圖檔案可以省略擴充名稱,透過IView介面可以直接設定請求參數和內容類型;

#
  // 通过View对象创建视图对象
  IView _view = View.jspView("/demo/test")
          .addAttribute("attr1", "value")
          .addAttribute("attr2", 2)
          .addHeader("head", "value")
          .setContentType(Type.ContentType.HTML.getContentType());

  // 直接创建视图对象
  _view = new JspView("/demo/test");

  // 下面三种方式的结果是一样的,使用请求路径对应的视图文件返回
  _view = View.jspView();
  _view = JspView.bind();
  _view = new JspView();
WebMVC模組提供的視圖

JspView:JSP檢視;

  View.jspView("/demo/test.jsp");
  // = "jsp:/demo/test"

FreemarkerView:Freemarker檢視;

  View.freemarkerView("/demo/test.ftl");
  // = "freemarker:/demo/test"

VelocityView:Velocity檢視;

  View.velocityView("/demo/test.vm");
  // = "velocity:/demo/test"

TextView:文字檢視;

  View.textView("Hi, YMPer!");
  // = "text:Hi, YMPer!"

HtmlView:HTML檔案內容視圖;

  View.htmlView("<p>Hi, YMPer!</p>");
  // = "html:<p>Hi, YMPer!</p>"

#JsonView:JSON檢視;

##
  // 直接传递对象
  User _user = new User();
  user.setId("...");
  ...
  View.jsonView(_user);

  // 传递JSON字符串
  View.jsonView("{id:\"...\", ...}");
  // = "json:{id:\"...\", ...}"

BinaryView:二進位資料流檢視;

  // 下载文件,并重新指定文件名称
  View.binaryView(new File("/temp/demo.txt"))
          .useAttachment("测试文本.txt");
  // = "binary:/temp/demo.txt:测试文本.txt"

若不指定檔案名稱,則回應頭中將不包含"attachment;filename=xxx"#​​

##ForwardView:請求轉送視圖;
  View.forwardView("/demo/test");
  // = "forward:/demo/test"

#RedirectView:重定向視圖;
  View.redirectView("/demo/test");
  // = "redirect:/demo/test"
#########HttpStatusView:HTTP狀態檢視####### ######
  View.httpStatusView(404);
  // = "http_status:404"

  View.httpStatusView(500, "系统忙, 请稍后再试...");
  // = "http_status:500:系统忙, 请稍后再试..."
############NullView:空視圖;############
  View.nullView();
############