AJAXJS MVC 使用教程之四:模板和返回响应数据

控制器处理完业务后会返回结果数据给前端:要么在前后端分离的情况下直接返回 JSON 数据,无须经过视图层;要么返回 HTML 则要在 View 层进行转化。

输出 HTML

AJAXJS Web 提供中介媒介 ModelAndView 对象,用于存储页面所要显示的数据。在控制器方法中加入 ModelAndView 参数即可,它本身就是 HashMap 的子类。

以下例子是输出不同类似的数据到页面中。

package com.demo.mvc;

import java.util.ArrayList;
import java.util.HashMap;

import javax.ws.rs.GET;
import javax.ws.rs.Path;

import com.ajaxjs.web.mvc.ModelAndView;
import com.ajaxjs.web.mvc.controller.IController;

@Path("/output")
public class OutputController implements IController {
	@GET
	public String jsp(ModelAndView mv) {
		mv.put("showText", "测试字符串"); // 测试字符串
		mv.put("showLong", 100000L); // 测试 long
		mv.put("list", new ArrayList<Object>() { // 测试列表
			private static final long serialVersionUID = 1L;
			{
				add("foo");
				add(123456);
				add(true);
			}
		});
		mv.put("array", new String[] { "abc", "bar", "12345a" });// 测试数组
		mv.put("map", new HashMap<String, Object>() {// //测试 Map
			private static final long serialVersionUID = 1L;
			{
				put("key1", "FOO");
				put("key2", "BAR");
				put("key3", false);
			}
		});

		return "/WEB-INF/jsp/output"; // 可以省略 .jsp 的扩展名
	}
}

EL 表达式+页面标签赋予了读取 ModelAndView 的能力,在下面这个 JSP 中最终显示 HTML 出来。

<%@ page pageEncoding="UTF-8"%>
<%@taglib uri="/ajaxjs" prefix="c"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>输出 Model 数据</title>
	</head>
	<body>
		<h4>测试字符串</h4>
		<div>${showText}</div>
		<h4>测试 long</h4>
		<div>${showLong}</div>
		<h4>测试列表</h4>
		<c:foreach items="${list}">${item} <br /></c:foreach>
		<h4>测试数组</h4>
		<c:foreach items="${array}">${item} <br /></c:foreach>
		<h4>测试 Map</h4>
		<c:foreach items="${map}">
			<div>${item.key} - ${item.value}</div>
		</c:foreach>
	</body>
</html>

输出 JSON

控制器方法返回如“json::{"foo":"bar"}”的字符串即可迅速输出 JSON。不过为了避免手工拼接字符串,多数情况下采用 BaseController 下的实用工具方法toJson()将 Bean/Map/List 转换为 JSON 字符串。

@GET
@Path("jsonStr")
public String toJson() {
	// 第二个参数为 true 表示自动附上 json:: 的前缀
	return BaseController.toJson("{\"foo\":\"bar\"}", true);
}

@GET
@Path("jsonMap")
public String toJsonMap() {
	return BaseController.toJson(new HashMap<String, Object>() {// //测试 Map
		private static final long serialVersionUID = 1L;
		{
			put("key1", "FOO");
			put("key2", "BAR");
			put("key3", false);
		}
	});
}

@GET
@Path("jsonList")
public String toJsonList() {
	return BaseController.toJson(new ArrayList<String>() { // 测试列表
		private static final long serialVersionUID = 1L;
		{
			add("foo"); // 只能是特定的一种泛型,如String/Integer等等,不能是 Object
			add("bar");
		}
	});
}

@GET
@Path("jsonBean")
public String toJsonBean() {
	News news = new News();
	news.setId(1000L);
	news.setName("foo");
	
	return BaseController.toJson(news);
}
©️2020 CSDN 皮肤主题: 岁月 设计师:pinMode 返回首页