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


一、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.java

package 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类同上面的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;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值