`
liufei.fir
  • 浏览: 686055 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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 = "'" ;
}

分享到:
评论

相关推荐

    AJAX生成静态HTML

    **AJAX生成静态HTML**是Web开发中一种提高用户体验的技术,它允许网页在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。在Struts框架中,结合XML处理,可以创建更加灵活和高效的动态网站。这个名...

    很典型的ajax应用

    在这个“很典型的ajax应用”中,我们将深入探讨如何实现一个输入关键字动态显示列表的简单实例,以及如何将Ajax技术应用于Java后端。 首先,让我们从用户界面(UI)开始。在这个实例中,用户会有一个输入框用于输入...

    AJAX应用笔记(1)

    本笔记将探讨AJAX的基本原理和实现方式,通过分析`index.jsp`和`easy.jsp`两个文件,来展示一个简单的AJAX应用。 1. **AJAX 基本概念** - **异步性**:AJAX的核心特性是异步处理,即在后台与服务器通信,不会阻塞...

    Ajax Hacks中文版 创建快速响应Web站点的工具和技巧

    ### Ajax Hacks中文版:创建快速响应Web站点的工具和技巧 #### Ajax技术概览 Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。这种技术使得Web应用程序...

    html各种整蛊生成器

    在“html各种整蛊生成器”中,CSS被用来设计各种特效,比如点击红包时的动画效果、零钱或转账金额的动态显示,以及对话框的弹出样式等。响应式设计是CSS的一个关键概念,通过媒体查询(`@media`)来根据设备屏幕尺寸...

    javascript&Ajax;应用开发

    - 利用JavaScript和Ajax技术可以构建单页应用,此类应用在用户与之交互时不需要重新加载整个页面。 ### 总结 “JavaScript & Ajax 应用开发”是一个关于前端开发的重要知识点。掌握这些技术可以帮助开发者创建出...

    AJAX通过跨域传输信息生成PDF文件

    在IT行业中,跨域通信是Web开发中的一个重要概念,特别是在使用AJAX进行异步数据交换时。本示例探讨了如何利用AJAX和JSONP(JSON with Padding)技术跨域传输信息,然后通过PHP的TCPDF库生成PDF文件。下面我们将深入...

    使用AJAX动态生成table表格数据和jquery.pagination.js 的分页栏

    我们使用jQuery选择器获取这个表格,并在AJAX请求成功后,将服务器返回的数据插入到表格中。假设服务器返回的是JSON格式的数据,我们可以使用`$.each()`遍历数据,然后用`$('&lt;tr&gt;...&lt;/tr&gt;')`创建新的行元素,再将...

    ajax代码 ajax代码

    6. **示例代码**:压缩包中的`foundations-of-ajax-examples`可能包含了基础的Ajax应用示例,例如创建一个简单的Ajax请求、处理服务器响应、更新DOM等。这些示例对于理解Ajax的工作原理和实际应用非常有帮助。 在...

    ajax+servlet+json应用

    在Ajax应用中,Servlet通常作为后端服务,接收Ajax请求,处理数据,然后以JSON格式返回结果。 3. **JSON**:JSON是一种数据交换格式,其结构与JavaScript对象相似,由键值对组成。由于其简洁和高效,JSON被广泛用于...

    征服 Ajax 应用程序的安全威胁

    2. **数据注入**:由于Ajax应用依赖动态生成的内容,如果不进行充分的输入验证,可能导致XSS(跨站脚本)攻击,攻击者可以插入恶意脚本,影响用户的安全。 3. **数据泄露**:由于Ajax请求通常是异步的,可能在用户...

    yii ajax应用

    `CHtml::ajaxLink()` 在页面中生成的JavaScript代码使用jQuery库,它监听指定的链接点击事件,发送Ajax请求到 `/quote/getQuote` URL,然后在成功响应时更新 `#quote-of-the-day` 元素的HTML内容。 7. **Yii 和 ...

    自动生成HTML工具

    【自动生成HTML工具】是一种利用编程语言,如C#,创建的应用程序,旨在自动化生成静态HTML页面的过程。这种工具的主要功能是从指定的URL抓取网页内容,并将其保存为本地的HTML文件,使得用户无需在线访问即可查看...

    卡片生成器

    考虑到用户体验,卡片生成器可能使用AJAX(Asynchronous JavaScript and XML)技术来实现页面的部分刷新,这样在生成或更新卡片时无需加载整个页面。ASP.NET MVC支持jQuery和jQuery AJAX,可以方便地实现这一点。 ...

    Ajax实现批量生成Html带进度条效果 v1.0-ASP源码.zip

    在Ajax应用中,JavaScript扮演了关键角色。它负责向服务器发送异步请求,通常使用XMLHttpRequest对象,这个对象是Ajax的基础。在本源码中,JavaScript代码可能会监听用户触发的事件(如按钮点击),然后调用...

    Ajax tree,动态生成Tree

    **Ajax Tree技术详解** 在网页开发中,树形结构(Tree)是一种常见的...总结来说,Ajax Tree是现代Web应用中构建动态、交互性强的树形结构的重要手段。通过合理的设计和优化,它能为用户提供高效、流畅的浏览体验。

    Ajax工具 核心组件

    在使用Ajax时,我们可能需要根据请求的结果动态地改变元素的样式,比如显示或隐藏某些部分,或者应用新的CSS类来改变外观。 5. **JSON数据格式**: JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式...

    Ext界面生成器,功能强大

    在使用Ext界面生成器时,用户可以预览并定制各种组件,如表格、面板、按钮、表单等,以及选择合适的布局方式。生成器会根据用户的配置自动生成相应的Ext JS代码,这些代码可以直接复制到项目中使用。这对于理解和...

Global site tag (gtag.js) - Google Analytics