屬性驅動和模型驅動
屬性驅動
在action中宣告一些屬性,這些屬效能獲取到表單中的值。
步驟:
1、在action中宣告一些屬性,這些屬性和表單中的name屬性名字一樣。
2、這些屬性必須有setter和getter方法。
下面看程式碼:
Action:
頁面:public class PropertyDriver extends ActionSupport{ private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String test(){ System.out.println(this.getUsername()); System.out.println(this.getPassword()); return "property"; } }
<s:form action="property_test">
使用者名稱:<s:textfield name="username"></s:textfield>
密碼:<s:textfield name="password"></s:textfield>
<s:submit></s:submit>
</s:form>
提交表單後,可以看出後臺會輸出前臺輸入的內容。
屬性驅動的原理:
在訪問Action後,會先建立Action並將Action放到物件棧中,Action中定義的屬性(設定了setter方法)會出現物件棧中,然後經過一個攔截器ParametersInterceptor
該攔截器做的事情:
1、獲取表單頁面name和value的值
2、把上述name和value封裝成一個map
3、根據valueStack.setValue(name,value)來把頁面上的值設定到物件棧的屬性中。
___________________________________________________________________________________________
模型驅動
如果頁面上的元素太多,這個時候用屬性驅動實現,Action中的程式碼就會很龐大,這個時候可以考慮用模型驅動來實現。
步驟:
1、建立一個JavaBean,Bean中屬性和表單的name元素名稱對應。
2、Action類實現ModelDriver介面
3、在Action宣告第一步建立的JavaBean物件,如:
private Person model = new PerSon;
4、Action中實現getModel()方法:
public Person getModel(){
return this.model;
}
該方法返回驅動模型物件。
下面看程式碼:
模型物件Person:
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Action:
public class ModelDriver extends ActionSupport implements ModelDriven<Person>{
private Person model = new Person();
public Person getModel(){
return this.model;
}
public String test(){
System.out.println(this.getModel().getName());
System.out.println(this.getModel().getAge());
return "model";
}
}
頁面:
<s:form action="model_test">
使用者名稱:<s:textfield name="name"></s:textfield>
年齡:<s:textfield name="age"></s:textfield>
<s:submit></s:submit>
</s:form>
同樣後臺也會打印出頁面輸入的內容。
模型驅動的原理:
模型驅動會經過兩個攔截器:ModelDrivenInterceptor和ParameterInterceptor
ModelDrivenInterceptor攔截器的作用:
1、得到action
2、由action強制轉化成ModelDriver
3、由ModelDriver.getModel()獲取模型物件
4、把模型物件放入到棧頂
ParameterInterceptor的作用:
把form表單的資料封裝到相應的物件棧中的屬性中