视图(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();