struts2接收参数的3种方法

struts2接收参数有3种方法
1、第一种:action 设置 相应的变量
  在相应的action中设置与将要传进来的参数名相同的变量 
    eg: 前台传给后台两个参数 name=chance & age = 1,那么后台的action中 要设定这样的变量:private String name; private int age;同时,必须设置set,和 get方法
  那么在访问action过程中,struts会自动的为action中的这两个变量设置前台传来的值
  (深度解析:实际上,当前台想后台的一个action发出请求的时候,struts会相应的new出来一个action对象,并调用action中的setXXX方法,注意其实action中设置的变量名 可以不和前台传来参数名向同,但setXXX,这个XXX必须与前台的参数名相同,就这样 struts通过这个set方法将前台传来的值赋给了 action中的变量)


2、第二种:DomainModule
  domainmodule 中文解释:域模型,domainmodul接收参数的方式就是,在action中设一个module对象
  例如,一个bbs系统,实现用户注册模块,那么后台module中 我们就会相应的建立一个 User类,这个user类就是我们前面说过的module,
分析下为什么要用DomainModule来接收参数,我们从前台向后台的action中传递参数,action做的处理无非是紧接着再把这个参数传递给对应的module,那么假如我们的module有100个变量(假如),那么我们用第一种方法接收参数时就要在action中设置100个变量,但如果我们用domainmodule的话就简单的多
eg:有一个用户登录系统,前台需要向后台传递一个user的name 和 password 两个属性,那么我们可以这么处理,首先在相应的action 设一个private User user; 变量(假如我们已经有了User这个Module了),好那么前台传递参数的时候可以这么来写,
    action?user.name=chance&user.password=123
  注意:我们依然需要继续给user设置 set get方法
  另外需要注意的是,在action中设置的变量 无论是基本类型,还是引用类型,我们只需要声明,但不需要定义(简单的说,就是我们不需要去 new 一个变量)
  new的过程 由struts来帮我们完成


  下面我们在来考虑一个问题,还拿上面的用户登录系统来举例,通常用户登录的时候 除了用户名,密码,还会填写一个 确认密码(其实这个工作完全可以交给客户端的js来处理,这里只是为了说明问题),但是在 User Module抽象封装的过程它是不会有 confimPassword这一项的,这样我们就不能用domainModule来解决这个问题,怎么办?


  解决方法就是引入 DTO(又交 do,或vo)data transform object,它的工作就两点:接收一下,传递一下;


  接收一下:前台传过来的user对象,我们不直接传递给usermodule 而是传递给 dto对象,例如userDto(它里面会有一个confimPassword变量)


  传递一下:dto接收来参数后 进过一番数据处理,确认密码输入正确那么就会 把 必要的参数变量传递给 usermodule 
3、第三种方式比较特殊,它是Struts2种独有的一种接收用户输入的机制,想在项目中使用模型驱动


(ModelDriven)需要让Action实现com.opensymphony.xwork2.ModelDriven 接口,使用它


的getModel()方法来通知Struts2要注入的属性类型,并且声明属性时一定要实例化,但不需get,


set方法(这是与第二种方式的区别)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值