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 = "'" ;
}
分享到:
相关推荐
**AJAX生成静态HTML**是Web开发中一种提高用户体验的技术,它允许网页在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页内容。在Struts框架中,结合XML处理,可以创建更加灵活和高效的动态网站。这个名...
在这个“很典型的ajax应用”中,我们将深入探讨如何实现一个输入关键字动态显示列表的简单实例,以及如何将Ajax技术应用于Java后端。 首先,让我们从用户界面(UI)开始。在这个实例中,用户会有一个输入框用于输入...
本笔记将探讨AJAX的基本原理和实现方式,通过分析`index.jsp`和`easy.jsp`两个文件,来展示一个简单的AJAX应用。 1. **AJAX 基本概念** - **异步性**:AJAX的核心特性是异步处理,即在后台与服务器通信,不会阻塞...
### Ajax Hacks中文版:创建快速响应Web站点的工具和技巧 #### Ajax技术概览 Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。这种技术使得Web应用程序...
在“html各种整蛊生成器”中,CSS被用来设计各种特效,比如点击红包时的动画效果、零钱或转账金额的动态显示,以及对话框的弹出样式等。响应式设计是CSS的一个关键概念,通过媒体查询(`@media`)来根据设备屏幕尺寸...
- 利用JavaScript和Ajax技术可以构建单页应用,此类应用在用户与之交互时不需要重新加载整个页面。 ### 总结 “JavaScript & Ajax 应用开发”是一个关于前端开发的重要知识点。掌握这些技术可以帮助开发者创建出...
在IT行业中,跨域通信是Web开发中的一个重要概念,特别是在使用AJAX进行异步数据交换时。本示例探讨了如何利用AJAX和JSONP(JSON with Padding)技术跨域传输信息,然后通过PHP的TCPDF库生成PDF文件。下面我们将深入...
我们使用jQuery选择器获取这个表格,并在AJAX请求成功后,将服务器返回的数据插入到表格中。假设服务器返回的是JSON格式的数据,我们可以使用`$.each()`遍历数据,然后用`$('<tr>...</tr>')`创建新的行元素,再将...
6. **示例代码**:压缩包中的`foundations-of-ajax-examples`可能包含了基础的Ajax应用示例,例如创建一个简单的Ajax请求、处理服务器响应、更新DOM等。这些示例对于理解Ajax的工作原理和实际应用非常有帮助。 在...
在Ajax应用中,Servlet通常作为后端服务,接收Ajax请求,处理数据,然后以JSON格式返回结果。 3. **JSON**:JSON是一种数据交换格式,其结构与JavaScript对象相似,由键值对组成。由于其简洁和高效,JSON被广泛用于...
2. **数据注入**:由于Ajax应用依赖动态生成的内容,如果不进行充分的输入验证,可能导致XSS(跨站脚本)攻击,攻击者可以插入恶意脚本,影响用户的安全。 3. **数据泄露**:由于Ajax请求通常是异步的,可能在用户...
`CHtml::ajaxLink()` 在页面中生成的JavaScript代码使用jQuery库,它监听指定的链接点击事件,发送Ajax请求到 `/quote/getQuote` URL,然后在成功响应时更新 `#quote-of-the-day` 元素的HTML内容。 7. **Yii 和 ...
【自动生成HTML工具】是一种利用编程语言,如C#,创建的应用程序,旨在自动化生成静态HTML页面的过程。这种工具的主要功能是从指定的URL抓取网页内容,并将其保存为本地的HTML文件,使得用户无需在线访问即可查看...
考虑到用户体验,卡片生成器可能使用AJAX(Asynchronous JavaScript and XML)技术来实现页面的部分刷新,这样在生成或更新卡片时无需加载整个页面。ASP.NET MVC支持jQuery和jQuery AJAX,可以方便地实现这一点。 ...
在Ajax应用中,JavaScript扮演了关键角色。它负责向服务器发送异步请求,通常使用XMLHttpRequest对象,这个对象是Ajax的基础。在本源码中,JavaScript代码可能会监听用户触发的事件(如按钮点击),然后调用...
**Ajax Tree技术详解** 在网页开发中,树形结构(Tree)是一种常见的...总结来说,Ajax Tree是现代Web应用中构建动态、交互性强的树形结构的重要手段。通过合理的设计和优化,它能为用户提供高效、流畅的浏览体验。
在使用Ajax时,我们可能需要根据请求的结果动态地改变元素的样式,比如显示或隐藏某些部分,或者应用新的CSS类来改变外观。 5. **JSON数据格式**: JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式...
在使用Ext界面生成器时,用户可以预览并定制各种组件,如表格、面板、按钮、表单等,以及选择合适的布局方式。生成器会根据用户的配置自动生成相应的Ext JS代码,这些代码可以直接复制到项目中使用。这对于理解和...