您的位置:首页 > 编程语言 > Java开发

Java EE SSH框架之Struts2 (4)—— Struts2参数获取方式

2018-03-29 18:43 435 查看

一、Action生命周期

1.每次请求Action时,都会创建新的 Action实例对象。这与Servlet不同,Servlet只会创建一个,Servlet是单例模式;
2.Action是线程安全的,可以使用成员变量接收参数,而Servlet是线程不安全的。



二、参数获取方式

2.1、属性驱动获取参数

此方式是官方推荐的,现实开发中不用此种方式。 

Action准备与参数键同名属性。
例:jsp中表单:
<form action="${pageContext.request.contextPath}/DemoAction1">
用户名:<input type="text" name="name" /><br>
年龄:<input type="text" name="sex"/><br>
生日:<input type="text" name="birthday"/><br>
<input type="submit" value="提交">
</form>复习下:${pageContext.request.contextPath}是JSP取得绝对路径的方法,等价于<%=request.getContextPath()%>。 也就是取出部署的应用程序名或者是当前的项目名。

DemoAction1.javapackage com.zl.struts.action;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

public class DemoAction1 extends ActionSupport {
//准备与参数键名称相同的属性
//自动类型转换,只能转换为8大基本数据类型以及对应包装类
private String name;
private Integer age;
private Date birthday;//表单输入时要按照日期的格式,比如用-隔开

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
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 execute() throws Exception {
// TODO Auto-generated method stub
System.out.println("name值:"+name+"age值:"+age+"birthday值"+birthday);
return SUCCESS;
}
}
打印出来的结果不需要类型转化。

2.2、对象驱动获取参数

    Action准备与参数键同名属性。xxx.yyy
例子:
创建一个User.java类,添加name、age、birthday三个属性及对应的set、get方法的代码略掉,为了测试,添加一个如下的toString()方法:public String toString() {
return "User[name="+name+",age"+age+",birthday" +birthday;
}
jsp中添加表单:<form action="${pageContext.request.contextPath}/DemoAction2">
用户名:<input type="text" name="user.name" /><br>
年龄:<input type="text" name="user.sex"/><br>
生日:<input type="text" name="user.birthday"/><br>
<input type="submit" value="提交">
</form>DemoAction2.java:package com.zl.struts.action;

import com.opensymphony.xwork2.ActionSupport;

public class DemoAction2 extends ActionSupport {
//准备user对象
        private User user;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println(user);
return SUCCESS;
}

public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}

}

2.3、模型驱动获取参数

    1.实现ModelDriven接口;
    2.实现getModel方法,该方法要返回需要封装参数的对象。
例:
User类
a390
同上面的2.2中的User类
jsp同2.1中的jsp表单

DemoAction3.java
package com.zl.struts.action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class DemoAction3 extends ActionSupport implements ModelDriven<User>{
//准备与参数键名称相同的属性
//自动类型转换,只能转换为8大基本数据类型以及对应包装类
private User user;
@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
System.out.println(user);
return SUCCESS;
}

public User getModel() {
return user;
}
}

三、复杂参数封装

3.1、List集合

    提交键:list 或 list[index]
例:

    前台提交:<input type="text" name="list"/>        表示list中的第一个元素

              或: <input type="text" name="list[3]"/>   表示list中的第四个元素,第二、三个没有就是空

   后台声明:private  List<String> list;

   

3.2、Map集合:

    提交键:map['key']   

例:
    前台提交:<input type="text" name="map['name']">     需要指定键名,这里指定的键名为name       

    后台声明:private Map<String,String> map;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: