srtus2获得表单参数
获得参数的方式有三种,这三种没有什么优劣之分,都有人用。
- 方式一:属性驱动。
表单:写法正常,就是根据name属性来对应
<form action="${pageContext.request.contextPath }/Demo8Action" method="post">
用户名:<input type="text" name="myname"><br>
年龄:<input type="text" name="age"><br>
生日:<input type="text" name="birthday"><br>
<input type="submit">
</form>
对应的action
//struts获得参数参数,方式一
//原理:每次请求action时都会创建新的action实例对象
public class Demo8Action extends ActionSupport{
//准备与参数名字一样的属性,要有get和set方法
private String myname;
private Integer age;
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getMyname() {
return myname;
}
public void setMyname(String myname) {
this.myname = myname;
}
//获得参数,属性驱动,自动完成类型转换
//只能转换8大基本类型以及对应的包装类
//支持特定的字符串转换为Date类型,如:yyyy-MM-dd
public String execute() throws Exception {
System.out.println("myname:"+myname);
System.out.println("age:"+age);
System.out.println("birthday:"+birthday);
return "success";
}
}
- 方式:对象驱动。可以将数据封装到对象中。
先创建一个User,里面有对应的属性:
public class User {
private String myname;
private Integer age;
private Date birthday;
public String getMyname() {
return myname;
}
public void setMyname(String myname) {
this.myname = myname;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User [myname=" + myname + ", age=" + age + ", birthday=" + birthday + "]";
}
}
表单写法,注意:name属性要写成像 user.age 这样,user为action中的一个User对象属性,要有get,set方法才称为属性。
<form action="${pageContext.request.contextPath }/Demo9Action" method="post">
用户名:<input type="text" name="user.myname"><br>
年龄:<input type="text" name="user.age"><br>
生日:<input type="text" name="user.birthday"><br>
<input type="submit">
</form>
action写法:
//struts获得参数,封装到对象中,方式二
public class Demo9Action extends ActionSupport{
//准备一个User对象 属性,要有get和set
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
//对象驱动,页面写法 : name="user.myname"
public String execute() throws Exception {
System.out.println(user);
return "success";
}
}
- 方式:模型驱动。可以将数据封装到对象中。
先创建一个User类,与上面的一样
表单写法:与正常的一致,同样时通过name属性来对应。
<form action="${pageContext.request.contextPath }/Demo8Action" method="post">
用户名:<input type="text" name="myname"><br>
年龄:<input type="text" name="age"><br>
生日:<input type="text" name="birthday"><br>
<input type="submit">
</form>
action写法:这里分三步走,代码中已经标好了。
//struts获得参数,封装到对象中,方式三
//1.实现接口,泛型写要封装到的类
public class Demo10Action extends ActionSupport implements ModelDriven<User>{
//3.准备一个User 成员变量,这里要初始化
private User user = new User();
//模型驱动,页面写法不变
public String execute() throws Exception {
System.out.println(user);
return "success";
}
//2.实现方法
public User getModel() {
// TODO 自动生成的方法存根
return user;
}
}