2009年10月21日
摘要: Struts2默認使用Jakarta的Common-FileUpload的文件上傳解析器。見struts.properties配置文件中:
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#指定使用COS的文件上...
閱讀全文
對于login方法的校驗,可以通過<ActionClassName>-<ActionAliasName>-validation.xml文件來校驗,即RegistAction-login-validation.xml文件進行校驗。同時,RegistAction-validation.xml的校驗規則仍舊對login方法有效。即login方法的校驗規則是Region-validation.xml和RegistAction-login-validation.xml的總和。
如果RegistAction繼承了BaseAction,那么對于BaseAction類的校驗規則也會被RegistAction類所繼承校驗。具體來說,其校驗規則的搜索文件規則如下:
BaseAction-validation.xml
BaseAction-別名-validation.xml
RegistAction-validation.xml
RegistAction-別名-validation.xml
對于Struts2所支持的內建校驗器,我們可以通過xwork.2.1.2.jar中的com/opensymphony/xwork2/validator/validators/default.xml文件查看。
除了配置文件,Struts2也支持Annotation。下面就是使用Annotation配置的RegistAction:
@Validation()
public class RegistAction extends ActionSupport {
private static final long serialVersionUID = -2113900523366315993L;
//該請求包含的4個請求參數
private String name;
private String pass;
private int age;
private Date birth;
public String getName() {
return name;
}
@RequiredStringValidator(type=ValidatorType.FIELD,key="name.required",message="")
@RegexFieldValidator(type=ValidatorType.FIELD,expression="\\w{4,25}",key="name.regex",message="")
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
@RequiredStringValidator(type=ValidatorType.FIELD,key="pass.required",message="")
@RegexFieldValidator(type=ValidatorType.FIELD,expression="\\w{4,25}",key="pass.regex",message="")
public void setPass(String pass) {
this.pass = pass;
}
public int getAge() {
return age;
}
@IntRangeFieldValidator(message="",key="age.range",min="1",max="150")
public void setAge(int age) {
this.age = age;
}
public Date getBirth() {
return birth;
}
@DateRangeFieldValidator(message="",key="birth.range",min="1900/01/01",max="2050/01/21")
public void setBirth(Date birth) {
this.birth = birth;
}
}

對于不能通過內置校驗器進行校驗的邏輯,則可通過重寫validate()方法來實現。如果一個Action中存在多個邏輯處理,則需要通過validateXxx()方法來分別進行校驗,其中Xxx代表方法名。如login()方法對應的校驗方法為validateLogin()。
Struts2的輸入校驗流程:
1。類型轉換器負責對字符串的請求參數執行類型轉換,并將這些值設置成Action的屬性值。
2。在執行類型轉換過程中,如果發生異常,則將異常保存到ActionContext中,并由conversionError攔截器負責將其封裝到fieldError里。然后執行第3步;如無異常,直接執行第3步。
3。調用Struts2內置的輸入校驗規則進行輸入校驗
4。通過放射調用validateXxx()方法。
5。調用validate()方法。
6。如果上述都未發生fieldError,將調用Action里處理用戶請求的處理方法;如果出現了fieldError,則轉入input邏輯視圖所指定的視圖資源。
摘要: Struts2提供了基于驗證框架的輸入校驗,在這種校驗方式下,所有的輸入校驗只需要通過指定的配置文件即可。Struts2中每個Action都有一個校驗文件,其規則為:<Action名字>-validation.xml。如:
Code highlighting produced by Actipro CodeHighlighter (freewar...
閱讀全文
摘要: Ext.data.Connection
Ext.data.Connection是對Ext.lib.Ajax的封裝,它提供了配置使用Ajax的通用方式,它在內部通過Ext.lib.Ajax實現與后臺的異步調用。與底層的Ext.lib.Ajax相比,Ext.data.Connection提供了更簡潔的配置方式,使用起來更方便。
 ...
閱讀全文
摘要: 簡單菜單
//創建工具條
var tb = new Ext.Toolbar();
tb.render('toolbar');
//為工具條添加按鈕
tb.add({
text:'新建',
//對應的事件處理函數
...
閱讀全文
摘要: 布局概述
在EXT中,所有的布局都是從Ext.Container開始的,Ext.Container的父類是Ext.BoxComponent。Ext.BoxComponent是一個盒子組件,可以定義寬度,高度和位置等屬性。作為子類,Ext.Co...
閱讀全文
Ext.MessageBox
1
//Ext.MessageBox.alert()
2
Ext.MessageBox.alert('標題','內容',function(btn)
{
3
alert('你剛剛點擊了' + btn);
4
});
5
6
//Ext.MessageBox.confirm()
7
Ext.MessageBox.confirm('選擇框','你到底是選擇Yes還是No?', function(btn)
{
8
alert('你剛剛點擊了' + btn);
9
});
10
11
//Ext.MessageBox.prompt()
12
Ext.MessageBox.prompt('輸入框','隨便輸入一些東西', function(btn,text)
{
13
alert('你剛剛點擊了' + btn + ", 剛剛輸入了" + text);
14
});
對話框的更多配置
1
//可以輸入多行的輸入框
2
Ext.MessageBox.show(
{
3
title:'多行輸入框',
4
msg:'你可以多輸入好幾行',
5
width:300,
6
buttons:Ext.MessageBox.OKCANCEL,
7
multiline:true,
8
fn:function(btn,text)
{
9
alert('你剛剛點擊了' + btn + ", 剛剛輸入了" + text);
10
}
11
});
12
13
//自定義對話框的按鈕
14
Ext.MessageBox.show(
{
15
title:'隨便按個按鈕',
16
msg:'從三個按鈕里隨便選擇一個',
17
buttons:Ext.MessageBox.YESNOCANCEL,
18
multiline:true,
19
fn:function(btn)
{
20
alert('你剛剛點擊了' + btn);
21
}
22
});
Ext.MessageBox中預設的4個按鈕分別是OK,Yes,No,Cancel。如果不使用YESNOCANCEL這種預設變量,也可以直接使用{ok:true, yes:true, no:true,cancel:true}的形式,這樣4個按鈕都會顯示在對話框中。
進度條
1
Ext.MessageBox.show(
{
2
title:'請等待',
3
msg:'讀取數據中',
4
width:240,
5
progress:true,
6
closable:false //隱藏對話框右上角的關閉按鈕,從而禁止用戶關閉進度條
7
});
8
9
//也可以直接使用Ext.MessageBox.progress()
10
Ext.MessageBox.progress('請等待',msg:'讀取數據中');
11
上述的進度狀態時不會發生變化的,我們需要調用Ext.MessageBox.updateProgress()函數,如以下為每秒變化,10秒后隱藏:
1
var f = function(v)
{
2
return function()
{
3
if (v == 11)
{
4
Ext.MessageBox.hide();
5
} esle
{
6
Ext.MessageBox.updateProgress(v/10,'正在讀取第' + v + '個,一共10個');
7
}
8
};
9
};
10
for (var i = 1 ; i < 12 ; i++)
{
11
setTimeout(f(i) , i*1000);
12
}
還可以使用一種自動變化的進度條提示框,如Ext.MessageBox.wait('請等待', msg: ' 讀取數據中');
動畫效果
可以為對話框這是彈出和關閉的動畫效果,使用animEl參數指定一個HTML元素,對話框就會依據指定的HTML元素播放彈出和關閉的動畫。
窗口分組
1
<script type="text/javascript">
2
var i = 0 , mygroup;
3
4
function newWin()
{
5
var win = new Ext.Window(
{
6
title:'窗口'+ i++,
7
width:400,
8
height:300,
9
maximizable:true,
10
manager:mygroup
11
});
12
win.show();
13
}
14
15
function toBack()
{
16
mygroup.sendToBack(mygroup.getActive());
17
}
18
19
function hideAll()
{
20
mygroup.hideAll();
21
}
22
23
Ext.onReady(function()
{
24
mygroup = new Ext.WindowGroup();
25
26
Ext.get("btn").on("click",newWin);
27
Ext.get("btnToBack").on("click",toBack);
28
Ext.get("btnHide").on("click",hideAll);
29
});
30
</script>
31
32
<BODY>
33
<input id="btn" type="button" name="add" value="新窗口"/>
34
<input id="btnToBack" type="button" name="btnToBack" value="放到后臺"/>
35
<input id="btnHide" type="button" name="btnHide" value="隱藏所有"/>
36
</BODY>
示例中,所有通過newWind()方法產生的窗口都屬于mygroup窗口組
摘要: 先看最簡單的拖放:
1new Ext.dd.DDProxy('block');
2//對應的HTML部分代碼
3<div id="block" style="background:red;"> </div>
拖放組件的體系
簡單來說,左面4個組件都是...
閱讀全文
摘要: 基本輸入控件Ext.form.Field
Ext.form.Field是所有表單輸入控件的基類,其他的輸入控件都是基于它擴展的來的。其定義了輸入控件通用的屬性和功能函數,這些通用的屬性和功能函數大致分為3大類:頁面顯示樣式、控件參數配置和數據有效性校驗。
頁面顯示樣式:clearCls, cls, ...
閱讀全文
摘要: 制作一個簡單的Grid
1var cm = new Ext.grid.ColumnModel([
2 {header:'編號',dataIndex:'id'},
3 {header:'名稱',dataIndex:'name...
閱讀全文