属性驱动和模型驱动

属性驱动

在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表单的数据封装到相应的对象栈中的属性中



你可能感兴趣的:(struts2,模型驱动,属性驱动)