2017-04-01 16:58:49 lth1156187401 阅读数 947
  • Android 高级专题

    本课程包含23章,共计95个小节课程,内容包括:Android多线程、网络编程、数据解析、数据存储、多媒体、Android 图形图像、Android 动画、GPS 定位、 Android 传感器编程、蓝牙、NDK、消息推送、二维码生成与扫描、分享和第三方登录、Bmob云服务、Afinal框架、 XUtils框架、版本控制、性能测试(听云)、App发布上线、Vitamio 跨平台播放器、EventBus、Android MVP 架构等。

    10605 人正在学习 去看看 郭宏志

数据:

id name p_id
1 体育 0
2 语文 0
3 数学 0
4 铅球 1
5 排球 1
6 文言文 2
7 函数 3
8 图形面积 3

现在要求将数据库里的这些数据在页面上以列表的方式显示

jsp:

<table  id="body"> 
  <tr>  
<th>学习大类</th>
<th>具体项目</th>
  </tr> 

</table> 


js://引用了jquery

$(function(){
getType(0);//将初始父节点传进去
});


var typeArray=${typeListJson}//后台获取到的数据json串


 //生成列表
 function getXctype(p_value){
var p_listArray=getListByPvalue(p_value);//获取大类列表
var s_listArray=new Array(p_listArray.length);//生成储存子列表的集合
//循环大类列表,获取其下属的小类
for(var i=0;i<p_listArray.length;i++){
var sarray=getListByPvalue(p_listArray[i].ID);//获取下属小类集合
s_listArray[i]=sarray;
}
 
//对数组进行操作
makeTypeList(p_listArray,s_listArray);
 }
 
 //根据父值获取所属的列表
 function getListByPvalue(p_value){
var array=new Array();
var index=0;
for(var i=0;i<xcTypeArray.length;i++){
if(xcTypeArray[i].P_ID==p_value){
array[index]=xcTypeArray[i];
index++
}
}
return array;
 }
 //根据父数组和子数组生成列表页面
 function makeTypeList(p_listArray,s_listArray){
var str="";//列表语句
for(var i=0;i<p_listArray.length;i++){
var sarray=s_listArray[i];//当前父节点下的子集
//生成列表语句
str+="<tr><td rowspan='"+sarray.length+"'>"+p_listArray[i].NAME+"</td>";
if(sarray.length==0){
str+="<td></td></tr>"
}
for(var k=0;k<sarray.length;k++){
if(k==0){
str+="<td>"+sarray[k].NAME+"</td></tr>";
}else{
str+="<tr ><td>"+sarray[k].NAME+"</td></tr>";
}
 
}
}
 
$('#body').append(str);
 }


最终呈现的效果:

学习大类 具体项目
体育 铅球
排球
语文 文言文
数学 函数
图形面积


2011-11-01 21:04:05 dunyanan1 阅读数 2389
  • Android 高级专题

    本课程包含23章,共计95个小节课程,内容包括:Android多线程、网络编程、数据解析、数据存储、多媒体、Android 图形图像、Android 动画、GPS 定位、 Android 传感器编程、蓝牙、NDK、消息推送、二维码生成与扫描、分享和第三方登录、Bmob云服务、Afinal框架、 XUtils框架、版本控制、性能测试(听云)、App发布上线、Vitamio 跨平台播放器、EventBus、Android MVP 架构等。

    10605 人正在学习 去看看 郭宏志
<form action="" method="post">
<tr><td></td><td><select id="kind" name="kind" type="text">
<option value="0">行业类型:</option>
<option value="IT行业">IT行业</option>
<option value="食品行业">食品行业</option>
<option value="家电行业">家电行业</option>
<option value="房地产行业">房地产行业</option>
<option value="化妆品行业">化妆品行业</option>
<option value="冶金行业">冶金行业</option>
<option value="手工行业">手工行业</option>
<option value="纺织行业">纺织行业</option>
</select>
</td></tr>
<tr><td><input type="submit" name="ok" value="确定"/></td><td>
 
<input type="reset" value="重置"/></td></tr></td>
       
  </TR>
 <?php
 if(isset($_POST['ok'])){
 include("../include/dbconnect.php");

 $sql = "select * from qiye where  kind='".$_POST['kind']."'";
 $rs = mysql_query($sql);

 while($row=mysql_fetch_assoc($rs)){
 ?>
 
   <tr> <TD ><?php echo $row['name'];?></TD></tr>
    
  <?php
}
}
?>


2017-03-30 14:52:26 qq_34902590 阅读数 604
  • Android 高级专题

    本课程包含23章,共计95个小节课程,内容包括:Android多线程、网络编程、数据解析、数据存储、多媒体、Android 图形图像、Android 动画、GPS 定位、 Android 传感器编程、蓝牙、NDK、消息推送、二维码生成与扫描、分享和第三方登录、Bmob云服务、Afinal框架、 XUtils框架、版本控制、性能测试(听云)、App发布上线、Vitamio 跨平台播放器、EventBus、Android MVP 架构等。

    10605 人正在学习 去看看 郭宏志
          使用xutils的httputils访问thinkphp的接口时,总是走failed回调方法,可是路径并没有问题,
仔细查看了一下发现其实是因为做存储操作时,传过去的实体的一个属性名字和数据库对不上,因为
实体类写的是QQ,set和get方法也是setQQ和getQQ,可是使用fastjson解析成json串时,将原来的QQ
改成了qQ,所以就操作失败了。
2013-05-30 09:21:09 qbg19881206 阅读数 3297
  • Android 高级专题

    本课程包含23章,共计95个小节课程,内容包括:Android多线程、网络编程、数据解析、数据存储、多媒体、Android 图形图像、Android 动画、GPS 定位、 Android 传感器编程、蓝牙、NDK、消息推送、二维码生成与扫描、分享和第三方登录、Bmob云服务、Afinal框架、 XUtils框架、版本控制、性能测试(听云)、App发布上线、Vitamio 跨平台播放器、EventBus、Android MVP 架构等。

    10605 人正在学习 去看看 郭宏志

ClassPool

ClassPool对象是一个CtClass对象的容器。一个CtClass对象被构建后,它被记录在ClassPool中。这是因为当编译的原文件关联到CtClass表示的类, 编译器要访问CtClass对象。

 

  例如,假定一个新方法getter()要加入到CtClass对象表示的的Point类。程序试图编译Point中的方法getter()的源代码,用编译过的代码做为方法内容,将它加到另一个类Line中。如果CtClass对象表示的Point丢失了,编译器将不能编译getter()方法。注册初始的类不包含getter()方法。因此,为了正确的编译一个方法,ClassPool必须拥有程序运行时所有的CtClass实例。

 

避免内存溢出

ClassPool的特点决定了当 CtClass对象数量很多时,它所占的内存会非常大。为了避免这种情况发生,你可以明确的移除一个ClassPool中的不需要的CtClass对象。如果用CtClass的detach()方法,CtClass对象将从ClassPool中移除。例如:

CtClass cc = ... ;
cc.writeFile();
cc.detach();

执行deatach()后,将不能执行CtClass对象的任何方法。但是,可以执行ClassPool的get()方法得到表示同一个类的CtClass实例。执行get()后,ClassPool再次读取类文件,重新建立CtClass对象。

 

 另一个办法是用新的ClassPool替换老的。如果老的 ClassPool当做垃圾被回收了,它里面的CtClass对象也会被回收,建立新的ClassPool实例,执行下面的代码片段:

       ClassPool cp = new ClassPool(true);
       // if needed, append an extra search path by appendClassPath()

 通过ClassPool.getDefault()构建默认行为的ClassPool对象。注意ClassPool.getDefault()是为了方便提供的单子工厂方法。它保持着单独的对象并重用它。getDefault()返回的ClassPool对象没有特别的作用。getDefault()是一个方便的方法。

 注意new ClassPool(true)是个方便的构造器,它构建一个ClassPool对象并加入系统搜索路径。执行它等同于下面的代码:

ClassPool cp = new ClassPool();
cp.appendSystemPath(); // or append another path by appendClassPath()

 

级联的ClassPools

如果程序运行在web服务器中,可能需要建立多个ClassPool;要为每个类载入器建一个ClassPool。程序将不用getDefault(),用ClassPool构造器建一个ClassPool对象。

多个CLassPool对象像java.lang.ClassLoader一样级联起来。例如,

       ClassPool parent = ClassPool.getDefault();
       ClassPool child = new ClassPool(parent);
       child.insertClassPath("./classes");

如果执行child.get(),孩子ClassPool首先去查找父ClassPool。如果说父查找失败,孩子再去./classes目录下查找类。

如果child.childFirstLookup为true,先在孩子中查找,再到父中查。例如:

  ClassPool parent = ClassPool.getDefault();
ClassPool child = new ClassPool(parent);
child.appendSystemPath();// the same class path as the default one.
child.childFirstLookup = true;   // changes the behavior of the child.

改变类名,定义一个新类

一个新类可以被定义为已经存在类的拷贝。看下面的程序:

     ClassPool pool = ClassPool.getDefault();CtClass cc = pool.get("Point");cc.setName("Pair");这个程序首先得到Point作为CtClass对象,然后用setName()为CtClass设置了新的名字Pair,之后CtClass对象的类名被改为Pari,类定义的其他部分没有变。  注意 CtClass的setName()改变了ClassPool中的一个记录。从实现的角度 ,setName()改变的是ClassPool 的hash表中的CtClass对象关联的key。Key从初始的类名改到了新类名。

因此,如果get(“Point”) 再次被执行后,将不能返回cc引用的CtClass对象。ClassPool再次读取Point.class类文件,为Point构建新的CtClass对象。这是因为Point命名的CtClass对象已经不存在了。看下面例子:

     ClassPool pool = ClassPool.getDefault();CtClass cc = pool.get("Point");CtClass cc1 = pool.get("Point");  // cc1 is identical to cc.cc.setName("Pair");CtClass cc2 = pool.get("Pair");   // cc2 is identical to cc.CtClass cc3 = pool.get("Point");  // cc3 is not identical to cc.

Cc1和cc2引用同一个CtClass实例cc,而cc3不是。注意,cc.setName(“Pair”)执行后,CtClass对象Pair 被cc和cc1引用。

 

ClassPool对象用来维持类和CtClass对象之间一对一的关系映射。Javassist不允许用两个有区别的CtClass对象表示同一个类,除非建两个单独CLassPool。这是对程序转换前后有意义的功能。

建立另一个ClassPool默认实例的拷贝,用ClassPool.getDefault()得到,执行下面代码:

        ClassPool cp = new ClassPool(true);如果有两个ClassPool对象,可以分别从ClassPool中得到表示同一个类文件的有区别的CtClass对象。可以编辑不同的CtClass对象用来生成不同的类的版本。  改变冻结类名,定义一个新类

当CtClass对象通过writeFile()或toBytecode()转换为类文件,Javassist将拒绝CtClass对象的修改。因此CtClass表示的Point类是被转换到类文件中了,执行setName()不能定义Pair类作为Point的拷贝,它将被拒绝。下面的代码是错误的:

ClassPool pool = ClassPool.getDefault();CtClass cc = pool.get("Point");cc.writeFile();cc.setName("Pair");   // wrong since writeFile() has been called.

为了避免这个限制,可以执行ClassPool的getAndRename()方法,例如:

ClassPool pool = ClassPool.getDefault();

CtClass cc = pool.get("Point");cc.writeFile();CtClass cc2 = pool.getAndRename("Point", "Pair"); 如果执行getAndRename(),ClassPool首先读取Point.class建立一个新的CtClass。但是,它重命名CtClass从Point改为Pair以前,要先在CtClass的Hash表中作记录。因此,writeFile()或toBytecode()执行后可以执行getAndRename()。
2012-06-09 10:02:00 dengsilinming 阅读数 26
  • Android 高级专题

    本课程包含23章,共计95个小节课程,内容包括:Android多线程、网络编程、数据解析、数据存储、多媒体、Android 图形图像、Android 动画、GPS 定位、 Android 传感器编程、蓝牙、NDK、消息推送、二维码生成与扫描、分享和第三方登录、Bmob云服务、Afinal框架、 XUtils框架、版本控制、性能测试(听云)、App发布上线、Vitamio 跨平台播放器、EventBus、Android MVP 架构等。

    10605 人正在学习 去看看 郭宏志

dom解析xml实现省市区动态级联是一个项目中的一部分,项目是springMVC实现的,其配置文件这儿就不在说了,现只简单列出一些主要的代码。看懂需要有一定的springMVC基础

配置文件中的省的值

city.area.province=黑龙江,湖南

在action中

private @Value("${city.area.province}") String provinceStr;
model.addAttribute("provinceList", ManagerUtil.getSelectBean(provinceStr));//获取省的下拉列表

 

//根据省获取市
public void getCityListByProvince(@RequestParam("province") String province,
			Model model, HttpServletResponse response) {
		try {
			province = URLDecoder.decode(province, "utf-8");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		response.setCharacterEncoding("utf-8");
		getListValue("province", "city", province, response);
	}
//根据市获取区县
public void getAreaListByCity(@RequestParam("city") String city,
			Model model, HttpServletResponse response) {
		try {
			city = URLDecoder.decode(city, "utf-8");
		} catch (UnsupportedEncodingException e1) {
			e1.printStackTrace();
		}
		response.setCharacterEncoding("utf-8");
		getListValue("city", "area", city, response);
		
	}
//
private void getListValue(String type, String childType, String value, HttpServletResponse response) {
		StringBuilder sb = new StringBuilder();
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		
		try {
			DocumentBuilder builder = factory.newDocumentBuilder();
			Document document = builder.parse(new File(UserController.class.getResource("/").toString().substring(6) 
					+ "/city-area.xml"));
			NodeList nodeList = document.getElementsByTagName(type);
			
			for(int i=0; i<nodeList.getLength(); i++) {
				Element e = (Element) nodeList.item(i);
				String name = e.getAttribute("name");
				if(name.equals(value)){
					NodeList childList = e.getElementsByTagName(childType) ;
					for(int j=0; j<childList.getLength(); j++) {
						sb.append(",").append(((Element) childList.item(j)).getAttribute("name"));
					}
					break;
				}
			}
		}catch(SAXException  e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch(ParserConfigurationException  e) {
			e.printStackTrace();
		}
		try {
			response.getWriter().write(JsonUtil.toJsonString(ManagerUtil.getSelectBean(sb.substring(1).toString())));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

JsonUtil类的toJsonString方法

public static String toJsonString(Object o) {
		if(o instanceof Collection) {
			StringBuffer buf = new StringBuffer("");
			Object[] objs = JSONArray.fromObject(o).toArray();
			for (int i = 0; i < objs.length; i ++) {
				if(i!=0) buf.append(",");
				buf.append(JSONObject.fromObject(objs[i]).toString());
			}
			return "{totalCount:" + objs.length + ",root:[" + buf.toString() + "]}";
		}
		return JSONObject.fromObject(o).toString();
	}

 

ManagerUtil类中的getSelectBean方法

 

public static List<SelectBean> getSelectBean(String str) {
		List<SelectBean> selectBeanList = new ArrayList<SelectBean>();
		if (!StringUtils.isEmpty(str)) {
			for (String item : str.split(",")) {
				SelectBean selectBean = new SelectBean();
				selectBean.setLabel(item.trim());
				selectBean.setValue(item.trim());
				selectBeanList.add(selectBean);
			}
		}
		return selectBeanList;
	}

jsp主要部分

 

<script type="text/javascript">function changeCityList(obj) {
		var citySelect = $("#uCity");
		var areaSelect = $("#uArea");
		citySelect.empty();
		areaSelect.empty();
		citySelect.append("<option value=''>请选择市</option>");
		areaSelect.append("<option value=''>请选择区/县</option>");
		if($(obj).val() != '') {
			$.ajax({
	 			type: "POST",
	 			 url: '....../getCityListByProvince.do?province=' + 
	 					 encodeURIComponent(encodeURIComponent($(obj).val())),
	 			async:false,
	 			dataType:'text',
	 			success: function(json) {
	 				
	 				var data = (eval('(' + json + ')')).root;
	 				for(var i=0; i<data.length; i++){
	 					citySelect.append("<option value=" + data[i].value + ">" + data[i].label + "</option>");
					}
	 			}
	 		});
		}
	}
	
	function changeAreaList(obj) {
//		alert($(obj).val());
		var areaSelect = $("#uArea");
		areaSelect.empty();
		areaSelect.append("<option value=''>请选择区/县</option>");
		if($(obj).val() != ''){
			$.ajax({
	 			type: "POST",
	 			 url: '...../getAreaListByCity.do?city=' + 
	 					 encodeURIComponent(encodeURIComponent($(obj).val())),
	 			async:false,
	 			dataType:'text',
	 			success: function(json) {
	 	//			var areaSelect = $("#uArea");
	 				var data = (eval('(' + json + ')')).root;
	 				for(var i=0; i<data.length; i++){
	 					areaSelect.append("<option value=" + data[i].value + ">" + data[i].label + "</option>");
					}
	 			}
	 		});
		}
		
	}
</script>
<div class="rfm">
			<table>
			<tr>
			<th><span class="rq">*</span><label for="369bQT">省:</label></th>
			<td>
				<select id="uProvince" onchange="changeCityList(this)" name="uProvince" style="width:230px">
					<option value="">请选择省份</option>
					<c:forEach items="${provinceList }" var="province">
						<option value="${province.value }">${province.label }</option>
					</c:forEach>
				</select>
			</td>
			</tr>
			</table>
			</div>
			<div class="rfm">
			<table>
			<tr>
			<th><span class="rq">*</span><label for="369bQT">市:</label></th>
			<td>
				<select id="uCity" name="uCity" onchange="changeAreaList(this)" style="width:230px">
					<option value="">请选择市</option>
				</select>
			</td>
			</tr>
			</table>
			</div>
			<div class="rfm">
			<table>
			<tr>
			<th><span class="rq">*</span><label for="369bQT">区:</label></th>
			<td>
				<select id="uArea" name="uArea" style="width:230px">
					<option value="">请选择区/县</option>
				</select>
			</td>
			</tr>
			</table>
			</div>

city-area.xml的部分内容(这里主要是说明一下它的格式)

 

<?xml version="1.0" encoding="UTF-8" ?>  
<root name="中国">  
	<province name="黑龙江" id="黑龙江">
    	<city name="大庆市">  
			<area name="萨尔图区"/>
			<area name="龙凤区"/>
			<area name="让胡路区"/>
			<area name="红岗区"/>
			<area name="大同区"/>
			<area name="肇州县"/>
			<area name="肇源县"/>
			<area name="林甸县"/>
			<area name="杜尔伯特蒙古族自治县"/>
    	</city> 
    	<city name="七台河市">  
			<area name="桃山区"/>
			<area name="新兴区"/>
			<area name="茄子河区"/>
			<area name="勃利县"/>
    	</city>
	</province>
</root>

 

JDBC连接PostgreSQL

阅读数 111

没有更多推荐了,返回首页