日期:2014-05-20  浏览次数:20674 次

我们爱分享----struts2的get和set方法
虽然很久没弄过java了 ,(没办法 需求访谈了半年了还没结束,一直用ext开发demo,悲剧中...)但是看见这个活动就想顶一下,所以想起来以前见过的一些问题,就再这里写写了,今天说说struts2的get和set的问题.因为我很久没开发java了 所以现在不方便贴测试代码(因为没有o(╯□╰)o).
以前做项目的时候我有一个同事在一个action类里定义了一个get开头的方法,这个方法是action的默认方法调用的,但是他在测试的时候这个方法老是先执行,也就是说还没调用就自己执行了 ,因为自己执行一些参数没有传进来,所以就报错了,怎么测试也不对,也没发现问题.他就纠结了,来找我了. 我看了一下,调试了一下发现这个方法是在浏览器发出action请求之后,struts2的servlet拦截到aciton请求,然后在初始化这个action类的时候就执行了,换言之,也就是说和类属性的get、set方法一起执行了,他执行的之后参数没有有效的传进来 就报错了,我当时就纳闷了 怎么会没调用就其他类属性方法一起之执行了那?我在没查看源代码的时候就有一个猜测就是,struts2的实现原理可能就是在初始化action类之后就会调用已get和set开头的所有方法,我后来验证了一下自己的想法,果然是这样。由于工作原因不能带大家看代码了,很久没用struts2了不知道他们源代码改了没。以后大家如果遇到这样子的问题可以尝试给方法改个名字,特别是开头的几个字改改可能就不报错了。顺便提一嘴问一句,我ext的经验能发上来吗。ext搞半年了 是半年全天一直搞ext 我快疯了!当然收获也很丰富!

------解决方案--------------------
这个确实是有这个问题,所以在struts2里面,方法名,不要以get,set打头,否则他会以为是某个属性的getter() setter()方法。Ext经验当然也可以发上来分享啊
------解决方案--------------------
ExtJS 一直想学呢~
------解决方案--------------------
嗯 学习了···
------解决方案--------------------

------解决方案--------------------
学习学习
------解决方案--------------------
good good study
------解决方案--------------------
前做项目的时候我有一个同事在一个action类里定义了一个get开头的方法,这个方法是action的默认方法调用的,但是他在测试的时候这个方法老是先执行,也就是说还没调用就自己执行了 ,因为自己执行一些参数没有传进来,所以就报错了,怎么测试也不对,也没发现问题.他就纠结了,来找我了. 我看了一下,调试了一下发现这个方法是在浏览器发出action请求之后,struts2的servlet拦截到aciton请求,
------解决方案--------------------
Ext想学,但一直没有时间,唉
------解决方案--------------------

------解决方案--------------------
仅仅是猜测而已,要看源码实现~
Java code

//总控制器Dispatcher类中的部分代码片段
  private static ThreadLocal<Dispatcher> instance = new ThreadLocal();

  public static Dispatcher getInstance()
  {
    return (Dispatcher)instance.get();
  }

  public static void setInstance(Dispatcher instance)
  {
    instance.set(instance);

    if (instance != null) {
      Container cont = instance.getContainer();
      if (cont != null)
        ObjectFactory.setObjectFactory((ObjectFactory)cont.getInstance(ObjectFactory.class));
      else
        LOG.warn("This dispatcher instance doesn't have a container, so the object factory won't be set.");
    }
    else {
      ObjectFactory.setObjectFactory(null);
    }
  }

------解决方案--------------------
来学经验了 。。。
------解决方案--------------------
extJs 学了半途而废了,很想学..
------解决方案--------------------
学习了
------解决方案--------------------
x
------解决方案--------------------
学习了~
------解决方案--------------------
学习 .....
------解决方案--------------------
学习。
------解决方案--------------------
学习,路过
------解决方案--------------------
学习了!!!
------解决方案--------------------
这个经验很有用啊!