分類  >  Web前端 >

java web開發過程中出現的一些詭異有關問題(2)

tags:    時間:2014-05-04 12:06:00
java web開發過程中出現的一些詭異問題(2)

接著上一篇博客:http://hw1287789687.iteye.com/blog/2053907

(1)我們上周做一個web項目,修改bug后發增量包(補丁包),其實我喜歡發全量包,但是領導要求增量包(補丁包),沒辦法.

有次發增量包(補丁包),修改了一個常量類,發布后,仍然測出問題.納悶:明明修改了常量類啊.反編譯常量類,確實是修改過之後的,沒問題.那麼問題出在哪兒呢?

給大伙兒重現一下:

我這裡有兩個類

public class Constant { 	public static final String WHO="黃威"; 	public static final int AGE=26; }  public class Hello{  	public static void main(String[]args) 	{ 		System.out.println("Hello,"+Constant.WHO); 	} } 

 在命令行中進行編譯:

 運行:

 

然後我發一個增量包:只修改Constant類,修改Constant類的WHO變數:

public class Constant { 	public static final String WHO="黃威22222222222222"; 	public static final int AGE=26; }

 單獨編譯Constant:,然後運行Hello:

 奇怪!!!為什麼結果沒有變呢?

預期的結果應該是:

Hello,黃威22222222222222

原因是:對於含有常量的類,javac編譯時直接把常量的值替換進去了.

所以我們還得重新編譯Hello:

 測試代碼見附件

 

(2)對於js動態增加的表格tr,IE瀏覽器不識別

我使用如下代碼動態增加表格的行(tr):

var queryResultTable_obj=getTable(); 			dataLength=tableContent.length; 			for(var i=0;i<dataLength;i++){ 				var oneTr=tableContent[i]; 				//alert(oneTr.realName); 				var newTr = document.createElement("tr"); 			     var newTd0 = document.createElement("td"); 			     var newTd1 = document.createElement("td"); 			     var newTd2 = document.createElement("td"); 			     var newTd3 = document.createElement("td"); 			     var newTd4 = document.createElement("td");  			     newTd0.innerHTML =oneTr.realName; 			     newTd1.innerHTML =oneTr.email; 			     newTd2.innerHTML =oneTr.aaa; 			     newTd3.innerHTML =oneTr.bbb; 			     newTd4.innerHTML ="<a target='_blank' href=\""+"../mgmt/personDetail.action?realName="+oneTr.realName+"&email="+oneTr.email+"&query_time="+query_time+"\" >簽到詳情</a>" 			      			     newTr.appendChild(newTd0); 			     newTr.appendChild(newTd1); 			     newTr.appendChild(newTd2); 			     newTr.appendChild(newTd3); 			     newTr.appendChild(newTd4); 			      			     queryResultTable_obj.appendChild(newTr); 			      			} 

 在IE中使用queryResultTable_obj.rows.length 獲取表格行的個數時竟然是0,但是在火狐和谷歌瀏覽器中都沒有問題.

說明:queryResultTable_obj 是表格對象

 那麼在IE中如何獲取表格的行(tr)呢?

通過 var trs=queryResultTable_obj.getElementsByTagName("tr");//獲取表格所有的行tr

如何動態刪除表格的所有行(除了表頭)呢?

//判斷是否是IE瀏覽器 var userAgent = navigator.userAgent.toLowerCase(); 	var browser=navigator.appName; 	var b_version=navigator.appVersion; 	//var version=b_version.split(";"); 	//var trim_Version=version[1].replace(/[ ]/g,"");//firefox error  	var isIE9test=userAgent.indexOf("windows nt ")>0&&userAgent.indexOf("trident")>0&&browser=="Microsoft Internet Explorer";  	 //刪除行 	 function deleteRow(){ 		 	var queryResultTable_obj=getTable(); 		    		   if(isIE9test){//如果是IE瀏覽器 			   var trs=queryResultTable_obj.getElementsByTagName("tr");//獲取表格所有的行tr 				  for(var i=1;i<trs.length;){ 					  var trOne=trs[i];//表格的每一行 					  queryResultTable_obj.removeChild(trOne);//從表格中刪除tr 				  } 		   }else{ 			   var length= queryResultTable_obj.rows.length ; //表格最後一行索引 			   			  while(length > 1){ 				  length--; 				  if(length<1){ 					  break; 				  } 				  queryResultTable_obj.deleteRow(length); 			   } 			  		   } 	 } 

 

1 樓 502220545 前天  
諾諾的問一句: 什麼是增量包 什麼是全量包啊 能舉個例子嗎
2 樓 hw1287789687 前天  
全量包就是整個web項目,比如 xxx.war.
增量包只包含修改的類(class文件)和資源文件
3 樓 weijiewell 前天  
public static final 類型的,編譯器在編譯的時候是按常量處理的。
修改這種類型的值,所有引用過的該類的class文件都要替換。否則相當於沒變。
真正需要經常修改的最好用配置文件,不建議使用這種public static final類型
4 樓 houyujiangjun 前天  
IE要使用Tbody...
5 樓 freezingsky 昨天  
增量包,看了才知道,其實說到底就是一個補丁包,暈。另外,對於IE的一些代碼操作,我以為現在都是用jquery來提高開發效率的。。。。
6 樓 linginfanta 昨天  
用法 很怪異
7 樓 hw1287789687 昨天  
freezingsky 寫道
增量包,看了才知道,其實說到底就是一個補丁包,暈。另外,對於IE的一些代碼操作,我以為現在都是用jquery來提高開發效率的。。。。

企業裡面基本上是用jquery,但是並不是所有的地方都用jquery,比如你只要實現個小小的功能,可能就不需要引入整個jquery的js依賴

推薦閱讀文章

Bookmark the permalink ,來源:互聯網