util.js工具包包含了一些實用函數來幫助你用javascript操作從服務器返回的數據數據,以便來更新web頁面。 也可以在DWR以外使用它,因為它不依賴于DWR的其他部分。下面介紹這個工具的主要函數。
7.13.1 $()函數
$()
函數實現的功能相當于 document.getElementById方法。 因為在Ajax程序中,經常需要寫很多這樣的語句,所以使用 $()
會更簡潔。它通過指定的id來查找當前HTML文檔中的元素,如果傳遞給它多個參數,它會返回找到的元素的數組。所有非String類型的參數會被原封不
動的返回。這個函數的靈感來至于prototype庫,但是它可以在更多的瀏覽器上運行。
$() 函數的使用方法為:
var searchexp = $("searchbox").value
<!—對應HTML表單的ID-->
<input id="searchbox"/>
7.12.2 addOptions與 removeAllOptions函數
在DWR項目應用中,經常需要根據所選項來填充選擇列表。這現這種功能可能通過調用addOptions與 removeAllOptions函數來填充或移除列表。例如,如果希望在更新了select以后,它仍然保持更新前的選擇項,實現方法如下:
var sel = dwr.util.getValue(id);
dwr.util.removeAllOptions(id);
Array array = new Array[ 'Africa', 'America', 'Asia', 'Australasia', 'Europe' ];
dwr.util.addOptions("id ",array);
dwr.util.setValue(id, sel);
如果想加入一個初始的"請選擇..." 選項,那么可以直接加入下面的語句:
dwr.util.addOptions(id, \["請選擇 ..."]);
dwr.util.addOptions有5種模式,分別為:
? 數組模式:dwr.util.addOptions(selectid, array) 會創建多個option,每個option的文字和值都是數組元素中的值。
? 對象數組模式:(指定text): dwr.util.addOptions(selectid, data, prop) 用數組中的每個元素創造一個option,option的值和文字都是在prop中指定的對象的屬性。例如:
dwr.util.addOptions( "demo",
[{ name:'Africa', id:'AF' },
{ name:'America', id:'AM' },
{ name:'Asia', id:'AS' },
{ name:'Australasia', id:'AU' },
{ name:'Europe', id:'EU' } ],'id','name');
?
對象數組模式: (指定text和value值): dwr.util.addOptions(selectid, array,
valueprop, textprop)
用數組中的每個元素創造一個option,option的值是對象的valueprop屬性,option的文字是對象的textprop屬性。
這種情況下,你需要指定要顯示 beans 的 property 以及 對應的 bean 值,例如:
public class Person {
private String name;
private Integer id;
public void set(){……}
public String get(){……}
}
dwr.util.addOptions("demo",array,'id','name');
其中id指向及bean的id屬性,在optiong中對應value,name指向bean的name屬性,對應下拉框中顯示的哪個值。
?
對象模式: dwr.util.addOptions(selectid, map,
reverse)用每個屬性創建一個option。對象的屬性名用來作為option的值,對象的屬性值用來作為屬性的文字,如果reverse參數被設
置為true,那么對象的屬性值用來作為選項的值。
? 對象的Map模式:dwr.util.addOptions(selectid,
map, valueprop, textprop)
用map中的每一個對象創建一個option。用對象的valueprop屬性做為option的value,用對象的textprop屬性做為
option的文字。
? ol 或 ul 列表模式:dwr.util.addOptions(ulid, array) 用數組中的元素創建多個li元素,它們的innerHTML是數組元素中的值。這種模式可以用來創建ul和ol列表。
7.13.3 addRows與 removeAllRows函數
在
DWR應用中,通過addRows與
removeAllRows這兩個函數來操作table表格,這個函數的第一個參數都是table、tbody、thead、tfoot的id。一般來說
最好使用tbody,因為這樣可以保持header和footer行不變。它們的用法如下:
? dwr.util.removeAllRows()
dwr.util.removeAllRows(id);
通過table元素的id刪除table中所有行。
如果要刪除表格中的某一行,則可用如下方法:
function deleteRows(id)
{
var tbody=document.getElementById("tb1");// tbody 的id
var trow=document.getElementById(id);//要刪除的行號
if(confirm("確定刪除?"))
{
tbody.removeChild(trow);
}
}
? dwr.util.addRows()
dwr.util.addRows(id, array, cellfuncs, [options]);
這行語句向指定id的table元素添加行。它使用數組中的每一個元素在table中創建一行。然后用cellfuncs從傳遞過來的行數據中提取單元格數據。其中參數:
? id: table元素的id(最好是tbody元素的id)
? array:數組或對象,做為更新表格數據。
? cellfuncs: 函數數組,從傳遞過來的行數據中提取單元格數據。
?
options: 一個包含選項的對象,選項包括一個用來創建行的函數rowCreator(例如希望給tr加上css),
默認值是返回一個document.createElement("tr")。一個用來創建單元格的函數cellCreator(例如用th代替td)。
默認返回一個document.createElement("td")。下面就是一個向table元素添加行的應用例子,代碼如下:
var cellFuncs = [
function(data) { return data; },
function(data) { return data.toUpperCase(); },
function(data) {
return "<input type='button' value='提交' onclick='alert(\"測試\");'/>";
},
function(data) { return count++; }
];
var count = 1;
dwr.util.addRows( "t1", , cellFuncs, { escapeHtml:false });
<!—對應的HTML內容-->
<table border="1" width="110%" id="table17" name="table17" height="27">
<tbody id="t1" name="t1">
</tbody>
</table>
7.13.4 getText函數
getText(id)和getValue(id)相似。用它可以得到select列表項目的顯示的文本,而不是當前選項的值。
7.13.5 getValue函數
dwr.util.getValue(id)
可以從HTML元素中取出其中的值,這個函數能操作大多數HTML元素,其中包括select(去處當前選項的值而不是文字)、input元素(包括
textarea)、div和span。下面就是一個getValue函數的應用例子,實現代碼如下:
<html>
<head>
<title></title>
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/engine.js"></script>
<script>
function getValue()
{
var cnId = dwr.util.getValue("myId");
var cnValue = dwr.util.getValue("myValue");
alert(dwr.util.getValue("myId"));
}
</script>
</head>
<body>
<input type="text" value="" id="myId" />,
<input type="text" value="" id="myValue" />
<input type="button" value="setValue" onclick="getValue();" />
</body>
</html>
7.13.6 getValues函數
getValues()
得到的是包含name/value對的javascript對象。name是HTML元素的ID,value會被更改為這些ID對象元素的內容。
getValues()可以傳入一個HTML元素(一個DOM對象或者id字符串)象。這個函數不會返回對象,它只更改傳遞給它的值。下面就是一個
getValues函數的應用例子,實現代碼如下:
var person = { id:1, name:'tfnew21', address:'北京', salary:10000 };
dwr.util.getValues(person);
alert(person.name); //訪問person對象的屬于,運行后會在窗口中顯示’tfnew21’字符串
dwr.util.getValues({textarea:null,select:null,text:null,password:null,button:null})
alert(textarea.value);// 執行后textarea.value的值為"test"
//HTML中的代碼
<input type="textarea" id="textarea" value="test" />
<input type="text" id="text" value="tfnew21" />
<input type="password" id="password" value="12345" />
<select id="select">
<option value="1" select>
香蕉
</option>
</select>
7.13.7 onReturn函數
定
義在輸入框中按回車的響應,防止執行submit。當使用Ajax時,往往需要的觸發一些Javscript。
不幸的是不同的瀏覽器處理這個事件的方式不一樣。所以dwr.util.onReturn修復了這個差異。如果需要在一個表單元素中按回車時觸發一些
Javscript,實現代碼如下:
<input type="text" onkeypress="dwr.util.onReturn(event,submitFunction)"/>
<input type="button" onclick="submitFunction()"/>
這個函數的工作原理與onSubmit()事件相似,只能存在于<FORM >元素中。
7.13.8 selectRange函數
selectRange用于選擇一個輸入框中的一定范圍的文字。 調用方法如下:
dwr.util.selectRange(ele, start, end)//ele輸入ID,start開始位置,end結尾位置
例如:<input type="text" id="sel-test" value="0123456">
dwr.util.selectRange("sel-test", 2, 5);
7.13.9 setValue函數
dwr.util.setValue(id,
value)根據第一個參數中指定的id找到相應元素,并根據第二個參數改變其中的值。
這個函數能操作大多數HTML元素,包括select、input元素(包括textarea)、div和span。例如:下面就是一個getValue
函數的應用例子,實現代碼如下:
<html>
<head>
<title></title>
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/engine.js"></script>
<script>
function setValue()
{
var cnId = dwr.util.getValue("myId");
var cnValue = dwr.util.getValue("myValue");
dwr.util.setValue(cnId, cnValue);
alert(dwr.util.getValue("myId"));
}
</script>
</head>
<body>
dwr.util.setValue(
<input type="text" value="" id="myId" />,
<input type="text" value="" id="myValue" />
)
<input type="button" value="setValue" onclick="setValue();" />
</body>
</html>
7.13.10 setValues函數
setValues()
和setValue()非常相似,但它傳入的參數是一個擁有多個屬性的javascript
object,屬性名稱是html頁面元素的id,屬性value為html頁面元素的value。下面就是一個setValues函數的應用例子,實現
代碼如下:
<html>
<head>
<title></title>
<script type="text/javascript" src="dwr/util.js"></script>
<script type="text/javascript" src="dwr/engine.js"></script>
<script>
function setValue()
{
var cnId = {myAreaText:"tfnew21",myDiv:"ddr"};
dwr.util.setValues(cnId);
}
</script>
</head>
<body>
<input type="button" value="setValue" onclick="setValue();" />
<br />
id=myAreaText
<textarea id="myAreaText" value=""></textarea>
<br />
id=myDiv
<div id="myDiv"></div>
</body>
</html>
7.13.11 toDescriptiveString函數
toDescriptiveString函數是帶debug信息的toString,第一個為將要debug的對象,第二個參數為處理等級。等級如下:
0:單行調試
1:不分析子元素的多行調試
2: 最多分析到第二層子元素的多行調試
調用方法如下:
<input type="text" id="text">
dwr.util.toDescriptiveString("text",0);
7.13.12 useLoadingMessage函數
useLoadingMessage函數作用是當發出ajax請求后,頁面顯示的提示等待信息,調用方法如下:
function searchUser(){
var loadinfo = "loading....."
try{
regUser.queryAllUser(userList);
dwr.util.useLoadingMessage(loadinfo);
}catch(e){
}
}
以上介紹了DWR的工用原理就實現方法,同時介紹了兩個工具包的常用函數的用法,有關DWR的在項目中的具體應用,將在后面的在線書店電子商務系統中詳細介紹,本節不在介紹。