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