这里不是说post和get方法,而是指struts2前后台交互的、jsp页面传递数据,后台action接收数据的方式。
–常用的方式有两种,一种用于简单少量的数据。一种用于相对大量的数据。还有一种方式我还没有在实际项目中使用到。
- 在Action类中定义表单属性,两者属性名称必须一致。
- 表单传递过来的参数封装成一个类,然后调用其中的属性.
对于第一种方法 1. 在Action类中定义表单属性,两者属性名称必须一致。要求在action类里为这些属性写上相同的getter和setter方法。
.jsp代码:
<form action="login" method="post" name="form1">
用户名:<input type="text" name="student.username"/><br/>
密 码:<input type="password" name="student.password"/><br/>
<input type="input" value="提交"/>
</form>
--------------
axtion代码:
public class loginAction extends ActionSupport{{
private String username;
private String password;
/**提供setter和getter方法**/
public void login(...){
//直接可以打印前台穿来到值。这是反射和注入实现的。
syso..(username);
}
}
这种方式的1.要点是(提供前后台一致的属性名,并在action类里写好相应的getter和setter方式)2.优点是简单粗暴,不用过多的工作,不用获取request对象去getparameter来获取。3.缺点是,当前台传递的数据量过多的时候,我们的action类,就充斥了各种setergetter方法。比如当用户输入的数据详细个人信息(个人资料,毕业学校,爱好等),那么这种方式用起来就不那么方便。所以我们开始采用第二种方法来做。在前台传对象。
第二种方式和第一种方式在本质上是类似的。1)前台标签的name属性为(对象名.属性名)。2)后台action中提供对象的引用,并写出对象个getter和setter方法。对象对应的类是pojo类(提供各个字段的getter和setter方法。)
方式二 .jsp代码:
<form action="login" method="post" name="form1">
用户名:<input type="text" name="student.username"/><br/>
密 码:<input type="password" name="student.password"/><br/>
<input type="input" value="提交"/>
</form>
方式二 java的pojo类:
public class student{
private string username;
private string sex;
private int age;
private string school;
private string grade;
//接下来是各个属性的getter和setter方法
.....getUsername(){...};
}
方式二 axtion代码:
public class loginAction extends ActionSupport{{
private Student student;
/**提供setter和getter方法**/
public Student getUsers(){
return student;
}
public void setUsers(Student student){
this.student=student;
}
public void login(...){
//直接可以打印前台穿来到值。这是反射和注入实现的。
syso..(student.username);
}
}
第二种方法是最常用的方法。要点是(1前台设值和后台取值都是通过student.username来实现。2提供pojo类。3action中写出对象的setter和getter方法。)
一种我在实际项目开发中还没有用过的传值方式:
三.action实现ModelDriven接口来接收表单数据
首先Action类必须实现ModelDriven接口,同样把表单传来的数据封装起来,Action类中必须实例化该对象,并且要重写getModel()方法
public class loginAction extends ActionSupport implements ModelDriven<Users>{
private Users users =new Users();
public Users getModel(){
return users;
}
/*
表单传来的参数封装在users对象中
表单属性名不需要加上引用users对象,直接传参数名
*/
}
小结:相对于传统的servlet和jsp传值,我们要做的是把属性的名称设定一致就行了。不再需要我们通过request.getParameter(stuent.username);
的方式去获取。struts2框架已经帮我们做好了,它底层采用反射机制帮我们设定好了的。直接使用就可以。
//下一步写springmvc的传值和传统传值方式总结