PersonAction.javapublic PersonAction extends AbstractAction {
    private String name;
    //getter、setter
.............
}
在父抽象类中,如果预定义了name的getter方法,类似
AbstractAction.javapublic abstract AbstractAction extends com.opensymphony.xwork2.ActionSupport {
   public String getName() {
       return ...;
   }
}或public abstract AbstractAction extends com.opensymphony.xwork2.ActionSupport {
   public abstract String getName();
}那么在页面中action提交过来的name将不被获取,什么道理,还是有什么深奥的问题在里面,往高人指点。
如果去掉父类AbstractAction 的getName()方法声明,就恢复正常,PersonAction也能获取页面提交过来的name属性值。

解决方案 »

  1.   

    你只在父类有get方法,没有set??set和get是一对的,在struts2的,对于参数获取,通常都要同时使用set和get的。而且,你的get和set最好对应同一个对象,如都是xxx,不然,就会出现你所说的问题。原理:
    为属性x设置值a,相应于调用 你的action.getX().setA(),如果action.getX()没有,就会调用action.setX()设置一个新的X.
      

  2.   

    我只要在子类中实现getter和setter就行了,父类我要只声明一个abstract的getter。为什么在父类也必须要声明一个abstract的setter?代码上面都写清楚了,大家最好还是自己试试呵~~就一句简单的:子类都有getter、setter方法,但如果父类声明了abstract的getter,就会取不到值,把父类的这个abstract的声明去掉,别的都不动,就全好了。楼上没看清问题啊,如果是你说那种情况,那为什么我只是把父类的声明去掉就全好了?
      

  3.   

    现在代码不知道还有哪部分不清楚的,我再抄一遍下来好了:子类:package test;
    public PersonAction extends AbstractAction {
        private String name;
        public String getName(){
    return name;
    }
    public void setName(String name) {
       this.name = name;

    }父类(这样写法是有问题,页面Form提交的name属性取不到):package test;
    public abstract AbstractAction extends com.opensymphony.xwork2.ActionSupport {
       public abstract String getName();
    }父类(如果这样写就没问题):
    父类(这样写法是有问题,页面Form提交的name属性取不到):package test;
    public abstract AbstractAction extends com.opensymphony.xwork2.ActionSupport {
    }
      

  4.   

    上面写多了一句话,父类的第二个写法没问题。第一个写法有问题是因为多了一个getName()的方法。去掉这个getName()抽象方法就正确了。代码直接复制进eclipse肯定不会报错,不知道你还要求什么代码?
      

  5.   


    package test;
    public abstract AbstractAction extends com.opensymphony.xwork2.ActionSupport {
       public abstract String getName();
    }这个也没错啊,一样可以取值啊。
      

  6.   

    public abstract AbstractAction extends com.opensymphony.xwork2.ActionSupport {
       public abstract String getName();
    }
    在 myEclipe 显示有错误  改成
    public abstract AbstractAction extends com.opensymphony.xwork2.ActionSupport {
       public abstract String getName();
    }
    可用,测试了可以取到值
      

  7.   

    public abstract AbstractAction extends com.opensymphony.xwork2.ActionSupport {
      public abstract String getName();
    }
    补充楼上
      

  8.   

    oh my lady gaga
    继续修改
    public abstract class AbstractAction extends com.opensymphony.xwork2.ActionSupport {
      public abstract String getName();
    }
      

  9.   

    谢谢,没报错,只是取不到值而已,用断点查看是null
      

  10.   


    谢谢,可是看不到你写的前后两个有啥区别哈~~大家的都可以取值,看上去肯定就是我代码有问题了,可是别的地方全都一样,能否取到值差别仅是是否注释掉父类的这个getName()抽象方法了。
      

  11.   


    什么意思?这个和struts有关吗。我这样写的确是在父类中需要调用子类的name属性,所以就在父类这里声明了一下。
    现在还找不到原因,暂时做个折中的办法,把name及其getter和setter都挪到父类中来,子类就不写了。谢谢大家,再等等几天看看有没有更好的建议就结贴了。