见过有自动生成Seter和Geter方法的工具,不过好象不能解决你的问题!!!关注中!!!

解决方案 »

  1.   

    提供一种方法 :
    jsp中如:
       <html:text property="data(name)" />
       <html:text property="data(password)" />actionform 中
       public DataForm extends ActionForm {
          Map data = new HashMap();      public void setData(Map data) {this.data = data; }
          public Map getData() {return this.data; }      public Object getVal(String key) {
              return data.get(key);
          }
       } action中
        public testAction extends Action {
            public ActionForward execute(....) {
                String name      = (String)((DataForm)form).get("name");
                String password  = (String)((DataForm)form).get("password");            ....
            }
        }
      

  2.   

    这样整个web application就可以用同一个actionForm.
    扩展性很好.
      

  3.   

    不好意思 :
    action中 :
        String name = (String)((DataForm)form).getVal("name");这样做 
    优点:
       jsp页面和DataForm可以分开来了,添加新的jsp页面不必改动DataForm.
    缺点:
       jsp中的javascript难写.
       整个web application中的效率比较低,因为到处是map的cast.自己斟酌...
      

  4.   

    不知道你这样做是否有待欠缺~Form是映射jsp的,如果在Form用Map来通用页面参数的话!
    过多的页面和参数将为你带来不堪重负,使程序变得阅读困难。
    也许你现在没有发现,但当请求过多的时候,你就会发现。如果你仅仅是嫌Form里面的getset方法繁琐的话,可以申明个Bean!
    在form页面生成这个bean的getset方法。页面应用的的时候就beanName.beanProperty。更重要的一点是,页面显示和form,bean生成的字段都是对应数据库的。
    极少数情况下,或者你有别的用途。这样增加字段只是对应数据库表的字段,而数据库的表结构应该是已经设计好的。
    也就是说是固定的,那么声明这个实体Bean对应数据库的表字段不就行了么。多的也就不说了,多参看一些这方面的例子,看看。
    我想,对于你遇到的问题可能已经有了解决的方法。
    不要过于冥思苦想!学会接受,相信你会有更大的收获。
      

  5.   

    回楼上 :Form是映射jsp的,如果在Form用Map来通用页面参数的话!
    过多的页面和参数将为你带来不堪重负,使程序变得阅读困难。
    ----------------------------------------------------------
    程序的阅读不是什么问题,相反在定义actionform时不必去查这个
    字段有没有定义setter和getter方法。actionform的结构也清晰,
    没有成百的setter,getter方法。也没有冗余的actionform。因为
    整个的application中只有一个actionform,使你可以更关注于业务
    逻辑。更重要的一点是,页面显示和form,bean生成的字段都是对应数据库的。
    ---------------------------------------------------------------
    这个也不是什么问题.因为用这种参数的方法参数名字本身就可以是数据
    库的字段名。只要记住这个字段名,action中照常用。这样增加字段只是对应数据库表的字段,而数据库的表结构应该是已经设计好的。
    也就是说是固定的,那么声明这个实体Bean对应数据库的表字段不就行了么。
    ---------------------------------------------------------------
    你不觉得持久层和表示层的分离用参数的方法不是更好吗?个人意见 
    ^_^
      

  6.   

    奇怪。。DynaActionForm不能满足你的要求吗?
      

  7.   

    我也觉得DynaActionForm
    就是楼主要找的
      

  8.   

    DynaActionForm无法实现我所要的,如果我在前台页面新增一个属性项,那么就得去配置struts-config.xml,那不很麻烦。
      

  9.   

    to:
     sagittarius1979你的回答正是我所想要的,但是我还有一个问题,那就是如何操作一个对象。例如,我原先在actionForm里有这样一代码:
      Person person=null;
      public void setPerson(Person person)
    {
      this.person=person;
    }
    public Person getPerson()
    {
      return person;
    }
    在我的JSP页面里有:
    <html:text property="person.age"/>
    那么在你的方法里面如何实现类似上面的例子。
    Thank you.
      

  10.   

    struts就是这样设计的,你如果不喜欢就自己写一个框架吧。
    另外,你的系统“页面显示和form,bean生成的字段都是对应数据库的。”
    就说明你的系统设计有问题,怎么可能把所有数据库的字段原封不动的搬到界面上让用户输入?
      

  11.   

    一个对象就干一件事,这是oo编程的基本思想,你要一个form完成整个系统的,根本不符合oo的思想
      

  12.   

    <html:text property="person.age"/>
    ----------------------------------
    你的这种写法和我提供的方法是一样的,因为data(name) 等价于 data.name
    所以你的actionform中person也应该是一个map.你在jsp中如何操作一个类(除去java代码)?
    jsp上页面的属性只可能是String,boolean,file类型。不太了解你的逻辑.
      

  13.   

    楼主,你用Struts在邦定不就可以不管了,只要在数据库里加你的字段不就行了。对于所有的JSP只用一个actionform这样子不太好吧?没有这么做过,关注ing
      

  14.   

    to:sagittarius1979
    <html:text property="person.age"/>
    ----------------------------------
    你的这种写法和我提供的方法是一样的,因为data(name) 等价于 data.name
    所以你的actionform中person也应该是一个map.不行,这样字做,会报错.
      

  15.   

    这里person应该是一个map ,改成: 
    Map person=null;
      public void setPerson(Map person)
    {
      this.person=person;
    }
    public Map getPerson()
    {
      return person;
    }
      

  16.   

    不是的,你还是没有理解我的意思,person是Person对象,这个对象里面有类似age,sex,name这些属性,那么我原先的页面里面是
    <html:text property="person.age"/>
    <html:text property="person.sex"/>
    <html:text property="person.name"/>
    这样我就可以在action里面直接
    Person person=form.getPerson();
    person.getAge();person.getSex();person.getName();
    就可以获取到前台的传过来的值.现在做成Map后,原先的代码应改成:
    <html:text property="data(person.age)"/>
    <html:text property="data(person.sex)"/>
    <html:text property="data(person.name)"/>
    但是这样是错语的