ajax应用时html响应生成工具

package org.zzuli.xmsb.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 由java生成HTML标记代码。
 * @author 刘飞
 *
 */
public final class HtmlUtils {

	private HtmlUtils() {}
	
	/**
	 * 创建HTML代码。
	 * @param tagName html标记名称。
	 * @param keys 该html标记的属性名称。
	 * @param values 该html标记的属性值。
	 * @param contentHTML 该html标记所包含的子html标记或内容。
	 * @return 该HTML代码标记片段。
	 */
	public static String htmlCreator(String tagName, String[] keys, Object[] values, Object contentHTML) {
		StringBuffer buffer = new StringBuffer("") ;
		buffer.append(htmlTagStartCreator(tagName, keys, values)) ;
		buffer.append(contentHTML) ;
		buffer.append(htmlTagEndCreator(tagName)) ;
		return buffer.toString() ;
	}
	
	public static void main(String[] args) {
//		Object[][] data = new Object[][]{{"1", 2, 3}, {4, "5", 6}, {7, 8, "9"}} ;
//		Object[] menu = new Object[]{"添加", "修改", "删除"} ;
//		System.out.println(simpleTrsCreator(data, menu));
		System.out.println(htmlCreator("div", "id:liufei, class:1229, name:liran", "哈哈"));
	}
	
	/**
	 * 创建HTML代码。
	 * @param tagName html标记名称。
	 * @param properties 标签属性字符串, 属性之间以','分隔, 属性键值间以':'或'='分隔
	 * @param contentHTML 该html标记所包含的子html标记或内容。
	 * @return 该HTML代码标记片段。
	 */
	public static String htmlCreator(String tagName, String properties, Object contentHTML) {
		if(properties == null) {
			return htmlCreator(tagName, contentHTML) ;
		}
		else if(properties.equals("") || properties.length() == 0) {
			return htmlCreator(tagName, contentHTML) ;
		}
		else {
			String[] props = properties.split(",") ;
			int size = props.length ;
			if(properties.indexOf(",") != -1) {//多个属性
				if(properties.indexOf(":") != -1) {
					String[] keys = new String[size] ;
					Object[] values = new Object[size] ;
					for(int i = 0 ; i < size ; i++) {
						String _prop = props[i].trim() ;
						String[] keyValue = _prop.split(":") ;
						keys[i] = keyValue[0].trim() ;
						values[i] = keyValue[1].trim() ;
					}
					return htmlCreator(tagName, keys, values, contentHTML) ;
				}
				else if(properties.indexOf("=") != -1){
					String[] keys = new String[size] ;
					Object[] values = new Object[size] ;
					for(int i = 0 ; i < size ; i++) {
						String _prop = props[i].trim() ;
						String[] keyValue = _prop.split("=") ;
						keys[i] = keyValue[0].trim() ;
						values[i] = keyValue[1].trim() ;
					}
					return htmlCreator(tagName, keys, values, contentHTML) ;
				}
				else {//无属性
					return htmlCreator(tagName, contentHTML) ;
				}
			}
			else if(properties.indexOf("=") != -1){//一个属性, 以'='分隔
				String[] keys = new String[size] ;
				Object[] values = new Object[size] ;
				String _prop = props[0].trim() ;
				String[] keyValue = _prop.split("=") ;
				keys[0] = keyValue[0].trim() ;
				values[0] = keyValue[1].trim() ;
				return htmlCreator(tagName, keys, values, contentHTML) ;
			}
			else if(properties.indexOf(":") != -1){//一个属性, 以':'分隔
				String[] keys = new String[size] ;
				Object[] values = new Object[size] ;
				String _prop = props[0].trim() ;
				String[] keyValue = _prop.split(":") ;
				keys[0] = keyValue[0].trim() ;
				values[0] = keyValue[1].trim() ;
				return htmlCreator(tagName, keys, values, contentHTML) ;
			}
			else {//无属性
				return htmlCreator(tagName, contentHTML) ;
			}
		}
	}
	
	/**
	 * 创建HTML代码。
	 * @param tagName html标记名称。
	 * @param properties 标签属性
	 * @param contentHTML 该html标记所包含的子html标记或内容。
	 * @return 该HTML代码标记片段。
	 */
	public static String htmlCreator(String tagName, Map<String, Object> properties, Object contentHTML) {
		if(properties == null) {
			return htmlCreator(tagName, contentHTML) ;
		}
		else {
			int size = properties.size() ;
			String[] keys = new String[size] ;
			Object[] values = new Object[size] ;
			Set<String> keysSet = properties.keySet() ;
			int i = 0 ;
			for(String key : keysSet) {
				keys[i] = key ;
				values[i] = properties.get(key) ;
				i++ ;
			}
			return htmlCreator(tagName, keys, values, contentHTML) ;
		}
	}
	
	/**
	 * 创建HTML代码。
	 * @param tagName html标记名称。
	 * @param contentHTML 该html标记所包含的子html标记或内容。
	 * @return 该HTML代码标记片段。
	 */
	public static String htmlCreator(String tagName, Object contentHTML) {
		return htmlCreator(tagName, null, null, contentHTML) ;
	}
	
	/**
	 * html开始标记生成。
	 * @param tagName tagName 标记名称
	 * @param keys 属性名称数组
	 * @param values 属性值数组
	 * @return
	 */
	private static String htmlTagStartCreator(String tagName, String[] keys, Object[] values) {
		StringBuffer buffer = new StringBuffer("") ;
		if(tagName == null) {
			throw new IllegalArgumentException("HTML标签名不能为空!") ;
		}
		else if(tagName.length() == 0 || tagName.equals("")) {
			throw new IllegalArgumentException("HTML标签名不能为空!") ;
		}
		if(keys == null || values == null) {
			buffer.append("") ;
		}
		else {
			for(int i = 0 ; i < keys.length ; i++) {
				buffer.append(" " + keys[i] + " = " + quotesMarks + values[i] + quotesMarks + " ") ;
			}
		}
		
		return htmlTagStart + tagName + " " + buffer.toString() + htmlTagEnd ;
	}
	
	/**
	 * html结束标记创建。
	 * @param tagName 标记名称
	 * @return 如:&lt/tagName&gt
	 */
	private static String htmlTagEndCreator(String tagName) {
		return htmlTagEndStart + tagName + htmlTagEnd ;
	}
	
	/**
	 * css的link标记。
	 * @param href css文件地址。
	 * @return
	 */
	public static String cssLinkCreator(String href) {
		return htmlCreator(
				"link", 
				new String[]{"rel", "href", "type"}, 
				new Object[]{"stylesheet", href, "text/css"}, 
				"") ;
	}
	
	/**
	 * javascript链接javascript文件。
	 * @param src javascript文件地址。
	 * @return
	 */
	public static String javascriptLinkCreator(String src) {
		return htmlCreator(
				"script", 
				new String[]{"type", "src"}, 
				new Object[]{"text/javascript", src}, 
				"") ;
	}
	
	/**
	 * 简单的javascript的弹出对话框。
	 * @param message
	 * @return
	 */
	public static String javascriptAlertCreator(String message) {
		return javascriptCreator("alert(\"" + message + " \") ;") ;
	}
	
	/**
	 * 创建javascript脚本代码字符串。
	 * @param functions javascript函数字符串。
	 * @return
	 */
	public static String javascriptCreator(Object functions) {
		return htmlCreator(
				"script", 
				new String[]{"type"}, 
				new Object[]{"text/javascript"}, 
				functions) ;
	}
	
	/**
	 * 创建javascript函数
	 * @param name 函数名称
	 * @param functionBody 函数体。
	 * @return
	 */
	public static String javascriptFunction(String name, String functionBody) {
		return "\n\tfunction " + name + " {\n\t\t" + functionBody + "\n\t}\n" ;
	}
	
	/**
	 * 将一个二维数组的数据放入到table表格中。
	 * @param ths 表格的TH内容
	 * @param data 表格的二维数组数据
	 * @return
	 */
	public static String simpleTableCreator(String ths, Object[][] data) {
		StringBuffer bufferTable = new StringBuffer("") ;
		StringBuffer bufferTrs = new StringBuffer("") ;
		if(ths != null) {
			bufferTrs.append(trCreator(ths)) ;
		}
		if(data == null) {
			throw new IllegalArgumentException("参数不能为空!") ;
		}
		else if(data.length > 0 && data[0].length > 0) {
			for(Object[] row : data) {
				StringBuffer bufferTr = new StringBuffer("") ;
				for(Object col : row) {
					bufferTr.append(tdCreator(col)) ;
				}
				bufferTrs.append(trCreator(bufferTr.toString())) ;
			}
		}
		bufferTable.append(tableCreator(bufferTrs.toString())) ;
		return bufferTable.toString() ;
	}
	
	/**
	 * 创建以二维数组大小的表格。
	 * @param data 表格的二维数组数据
	 * @return
	 */
	public static String simpleTrsCreator(Object[][] data) {
		StringBuffer bufferTrs = new StringBuffer("") ;
		if(data == null) {
			throw new IllegalArgumentException("参数不能为空!") ;
		}
		else if(data.length > 0 && data[0].length > 0) {
			for(Object[] row : data) {
				StringBuffer bufferTr = new StringBuffer("") ;
				for(Object col : row) {
					bufferTr.append(tdCreator(col)) ;
				}
				bufferTrs.append(trCreator(bufferTr.toString())) ;
			}
		}
		
		return bufferTrs.toString() ;
	}
	
	/**
	 * 将一个二维数组的数据放入到table表格中。
	 * @param data 表格的二维数组数据
	 * @param arrayData 表格的一维数组数据, 一般作为菜单项。
	 * @return
	 */
	public static String simpleTrsCreator(Object[][] data, Object[] arrayData) {
		return simpleTrsCreator(ArrayUtils.addAll(data, arrayData)) ;
	}
	
	/**
	 * 将一个二维数组的数据放入到table表格中。
	 * @param data 表格的二维数组数据
	 * @return
	 */
	public static String simpleTableCreator(Object[][] data) {
		return simpleTableCreator("", data) ;
	}

	/**
	 * 将一个二维数组的数据放入到table表格中。
	 * @param data 表格的二维数组数据
	 * @param arrayData 表格的一维数组数据, 一般作为菜单项。
	 * @return
	 */
	public static String simpleTableCreator(Object[][] data, Object[] arrayData) {
		return simpleTableCreator(ArrayUtils.addAll(data, arrayData)) ;
	}
	
	/**
	 * 将一个二维数组的数据放入到table表格中。
	 * @param ths 表格的TH内容
	 * @param data 表哥的二维数组数据
	 * @return
	 */
	public static String simpleTableCreator(String ths, List<Map<Object, Object>> data) {
		return simpleTableCreator(ths, ArrayListMapUtils.listMapToArray(data)) ;
	}
	
	/**
	 * 将一个二维数组的数据放入到table表格中。
	 * @param data 表哥的二维数组数据
	 * @return
	 */
	public static String simpleTableCreator(List<Map<Object, Object>> data) {
		return simpleTableCreator(null, data) ;
	}
	
	/**
	 * 数组和Map、List集合之间的转化。
	 * @author 刘飞
	 *
	 */
	public static class ArrayListMapUtils {
		
		/**
		 * List&ltMap&ltObject, Object&gt&gt数据转化为二维数组
		 * @param data List&ltMap&ltObject, Object&gt&gt数据
		 * @return
		 */
		public static Object[][] listMapToArray(List<Map<Object, Object>> data) {
			Object[][] arrayData = null ;
			if(data == null) {
				throw new IllegalArgumentException("数据参数不能为空!") ;
			}
			int rows = data.size() ;
			if(rows > 0) {
				Set<Object> keySet = data.get(0).keySet() ;
				int cols = keySet.size() ;
				if(cols > 0) {
					arrayData = new Object[rows][cols] ;
					int r = 0 ;
					for(Map<Object, Object> dataMap : data) {
						Set<Object> keys = dataMap.keySet() ;
						Iterator<Object> iter =  keys.iterator() ;
						int c = 0 ;
						while(iter.hasNext()) {
							arrayData[r][c] = dataMap.get(iter.next()) ;
							c++ ;
						}
						r++ ;
					}
				}
			}
			return arrayData ;
		}
		
		/**
		 * 将二维数组的数据放入List&ltMap&ltObject, Object&gt&gt集合中。
		 * @param data 二维数组
		 * @return
		 */
		public static List<Map<Object, Object>> arrayToListMap(Object[][] data) {
			List<Map<Object, Object>> listMapData = new ArrayList<Map<Object,Object>>() ;
			if(data == null) {
				throw new IllegalArgumentException("数据参数不能为空!") ;
			}
			if(data.length > 0 && data[0].length > 0) {
				for(Object[] row : data) {
					Map<Object, Object> mapData = new HashMap<Object, Object>() ;
					for(Object col : row) {
						mapData.put(col, col) ;
					}
					listMapData.add(mapData) ;
				}
			}
			return listMapData ;
		}
	}
	
	/**
	 * html的table标记。
	 * @param keys 标记属性名称列表
	 * @param values 标记属性值列表
	 * @param contentHTML 子标记或内容
	 * @return
	 */
	public static String tableCreator(String[] keys, Object[] values, Object contentHTML) {
		return htmlCreator("table", keys, values, contentHTML) ;
	}
	
	/**
	 * html的table标记。
	 * @param contentHTML 子标记或内容
	 * @return
	 */
	public static String tableCreator(Object contentHTML) {
		return tableCreator(null, null, contentHTML) ;
	}
	
	/**
	 * html的tr标记。
	 * @param keys 标记属性名称列表
	 * @param values 标记属性值列表
	 * @param contentHTML 子标记或内容
	 * @return
	 */
	public static String trCreator(String[] keys, Object[] values, Object contentHTML) {
		return htmlCreator("tr", keys, values, contentHTML) ;
	}
	
	/**
	 * html的tr标记。
	 * @param contentHTML 子标记或内容
	 * @return
	 */
	public static String trCreator(Object contentHTML) {
		return trCreator(null, null, contentHTML) ;
	}
	
	/**
	 * html的th标记。
	 * @param keys 标记属性名称列表
	 * @param values 标记属性值列表
	 * @param contentHTML 子标记或内容
	 * @return
	 */
	public static String thCreator(String[] keys, Object[] values, Object contentHTML) {
		return htmlCreator("th", keys, values, contentHTML) ;
	}
	
	/**
	 * html的th标记。
	 * @param contentHTML 子标记或内容
	 * @return
	 */
	public static String thCreator(Object contentHTML) {
		return thCreator(null, null, contentHTML) ;
	}
	
	/**
	 * html的td标记。
	 * @param keys 标记属性名称列表
	 * @param values 标记属性值列表
	 * @param contentHTML 子标记或内容
	 * @return
	 */
	public static String tdCreator(String[] keys, Object[] values, Object contentHTML) {
		return htmlCreator("td", keys, values, contentHTML) ;
	}
	
	/**
	 * html的td标记。
	 * @param contentHTML 子标记或内容
	 * @return
	 */
	public static String tdCreator(Object contentHTML) {
		return tdCreator(null, null, contentHTML) ;
	}
	
	/**
	 * html的div标记。
	 * @param keys 标记属性名称列表
	 * @param values 标记属性值列表
	 * @param contentHTML 子标记或内容
	 * @return
	 */
	public static String divCreator(String[] keys, Object[] values, Object contentHTML) {
		return htmlCreator("div", keys, values, contentHTML) ;
	}
	
	/**
	 * html的span标记。
	 * @param keys 标记属性名称列表
	 * @param values 标记属性值列表
	 * @param contentHTML 子标记或内容
	 * @return
	 */
	public static String spanCreator(String[] keys, Object[] values, Object contentHTML) {
		return htmlCreator("span", keys, values, contentHTML) ;
	}
	
	/**
	 * html的select标记。
	 * @param keys 标记属性名称列表
	 * @param values 标记属性值列表
	 * @param contentHTML 子标记或内容
	 * @return
	 */
	public static String selectCreator(String[] keys, Object[] values, Object contentHTML) {
		return htmlCreator("select", keys, values, contentHTML) ;
	}
	
	/**
	 * html的option标记。
	 * @param keys 标记属性名称列表
	 * @param values 标记属性值列表
	 * @param contentHTML 子标记或内容
	 * @return
	 */
	public static String optionCreator(String[] keys, Object[] values, Object contentHTML) {
		return htmlCreator("option", keys, values, contentHTML) ;
	}
	
	/**
	 * html的img标记。
	 * @param keys 标记属性名称列表
	 * @param values 标记属性值列表
	 * @return
	 */
	public static String imgCreator(String[] keys, Object[] values) {
		return htmlCreator("img", keys, values, "") ;
	}
	
	/**
	 * html的a标记。
	 * @param keys 标记属性名称列表
	 * @param values 标记属性值列表
	 * @param contentHTML 子标记或内容
	 * @return
	 */
	public static String aCreator(String[] keys, Object[] values, Object contentHTML) {
		return htmlCreator("a", keys, values, contentHTML) ;
	}
	
	/**
	 * html的input标记。
	 * @param keys 标记属性名称列表
	 * @param values 标记属性值列表
	 * @return
	 */
	public static String inputCreator(String[] keys, Object[] values) {
		return htmlCreator("input", keys, values, "") ;
	}

	/**
	 * HTML标记前缀。
	 */
	public static final String htmlTagStart = "<" ;

	/**
	 * HTML标签结束前缀。
	 */
	public static final String htmlTagEndStart = "</" ;
	
	/**
	 * HTML标记后缀。
	 */
	public static final String htmlTagEnd = ">" ;
	
	/**
	 * 英文状态下的双引号。
	 */
	public static final String quotesMarks = "\"" ;
	
	/**
	 * 英文状态下的单引号
	 */
	public static final String singleQuoteMarks = "'" ;
}

你可能感兴趣的:(JavaScript,html,Ajax,css,脚本)