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 如:</tagName> */ 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<Map<Object, Object>>数据转化为二维数组 * @param data List<Map<Object, Object>>数据 * @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<Map<Object, Object>>集合中。 * @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 = "'" ; }