刚学struts。想问一个比较愚蠢的问题在一个action类中,get和set方法何时调用?还有,form中的参数究竟映射的是action类中的什么值?

解决方案 »

  1.   

    前台form中有一个<input type="text" name="username"/>如果传到action。在action中应该有一个属性,名字也叫username
    而且这个username有get/set方法。当struts接受这个action请求时,struts调用 username的set方法把前台的值传到action中的username,当action处理完成,要返回到页面时。在生成jsp的过程中,你可以在页面中使用EL,
    ${username},这时调用username的get方法。
      

  2.   

    为什么要用get 和set 方法?
      

  3.   

    还有,get的命名,为什么一定要,比如参数a,get一定要命名为getA();geta()则不行。如果参数是A呢,get什么?
      

  4.   

    看来不只是初学struts,OOP有没有学啊??骆驼命名法知道吗?
      

  5.   


    骆驼命名法 跟 OOP有啥关系?
      

  6.   

    哥,关毛的骆驼命名法的事情啊?
    一个函数名而已,怎么写都可以调用。但问题是struts里面seta() 就没效果!
      

  7.   

    为什么get参数非得是 getA()。 这个才是我想知道的问题呀!一楼的回答确实让我受用,多谢了啊!
      

  8.   

    如果你知道什么是javaBean,你就知道属性abc的get/set方法为什么是setAbc/getAbc更深层次,你就应该了解Ioc,控制反转
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    public class T1 { public static void main(String [] args){

    try {

    //以前我们都是常规方法直接new 一个Bean,但是在一些情况下,我们外部程序并不知道Bean的内部结构。
    //而只知道这个Bean的属性名,属性类型 等。比如在配置Hb时,就配置属性名和类型,也就是这个原理

    Class c = Class.forName("Bean");
    Object object = c.newInstance();

    //访问普通Bean 的public方法  属性 id
    Field field = c.getDeclaredField("id");
    field.set(object, 1);
    System.out.println(field.get(object));

    /**
     * 由于username是私用字段,通过以上方式访问报错,只能通过以下方式
     * 
     * 在一般情况下我们只知道某个私有属性的名字,它不能直接访问,那要怎么访问呢,
    那就有一个java bean的标准,让我们知道 像属性username还可用方法 setUsername/getUsername来访问
    这里就说明了bean的set/get标准方法的意义
    */

    //写私有属性
    field = c.getDeclaredField("username");//字段名已知
    Method method = c.getDeclaredMethod("setUsername", field.getType());//方法名按java Bean的规定
    method.invoke(object, "name");

    //读私有属性
    method = c.getDeclaredMethod("getUsername",null);//方法名按java Bean的规定
    Object username = method.invoke(object, null);
    System.out.println(username);

    /**
     * 最后说明为什么不是把username直接写成public,
     * 因为在setUsernae或getUsername时,你还可以做一些操作,可以作一些业务逻辑。
     * 不然不真成了属性了。
     */

    } catch (Exception e) {
    e.printStackTrace();
    }


    }
    }class Bean{

    //普通公有属性
    public Integer id;

    //标准的java bean set/get方法
    private String username;
    public String getUsername() {
    return username;
    }
    public void setUsername(String username) {
    this.username = username;
    }




    }
      

  9.   

    以上代码仅仅想要说明,在不知道一个类的内部结构的情况下, 外部程序怎么通过一个标准引用这个类有实例中的资源,这个标准就是java bean的标准,标准包括标准的set/get方法相关的东西。
      

  10.   


    这个是开发struts的人定的标准,并没有特定的意义,只是为了让它规范化,有一个统一的标准。
      

  11.   

    楼主其实我感觉Action赋值主要就是根据页面里的name属性的值和setXxx方法来赋值的,比如name属性的值是id则会在Action中找有没有setId方法,有就执行这个方法,至于setId方法里给那个属性赋值就没什么关系了,你问为什么有setXxx方法,这只是一个标准。
      

  12.   


    +1规范是没有理由的,跟
    if(){
    ..
    }else{
    ..
    }
    一样,java语法就是这样定的,没有为什么
      

  13.   

    get set 是线性安全的吗?具体情况是怎么样 啊 楼主
      

  14.   

    一楼正解。但是其实,它应该是解析SetXxx方法,看看传过来的值有没有和Xxx相同的,比方你传name = aaa,而又一个setName,但是属性可以不是name,可以叫eman...