1. 程式人生 > >屬性驅動和模型驅動

屬性驅動和模型驅動

屬性驅動

在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表單的資料封裝到相應的物件棧中的屬性中