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