DBMNG数据库管理与应用

书籍是全世界的营养品。生活里没有书籍,就好像没有阳光;智慧里没有书籍,就好像鸟儿没有翅膀。
当前位置:首页 > 经验分享 > Java开发

Struts2的三种接受参数的方式

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 


  搞定!


第三种方式比较特殊,它是Struts2种独有的一种接收用户输入的机制,想在项目中使用模型驱动


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


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


set方法(这是与第二种方式的区别)。


[java] view plaincopyprint?
package com.lsc.alan.action;  
  
import com.lsc.alan.vo.User;  
import com.opensymphony.xwork2.ModelDriven;  
/** 
 * 使用模型驱动来接受用户输入,需要实现ModelDriven接口 
 * @author Alan 
 * 时间:2009年7月10日 
 */  
public class LoginAction3 implements ModelDriven<User>{  
    /** 领域模型User对象 **/  
    private User user = new User();  
      
    public User getModel() {  
        return user;  
    }  
    public String execute(){  
        if (user.getUsername().equals("Alan") && user.getPassword().equals("Alan")){  
            return "success";  
        } else {  
            return "failure";  
        }  
    }  
}  

本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号