我用的是STRUTS, 表单上有十个INPUT框, 它们的NAME属性为 NAME1,NAME2,NAME3,NAME4,NAME5.....NAME10
然后我再ACTIONFORM中给这十个属性赋值,
其中POSITION代表的选的是第一个INPUT框,public void setNAMES(position,name)
{if(positon=1)
   form.setNAME1(name);
if(position=2)
  form.setNAME2(name); 
if(position=3)
  form.setNAME3(name); 
............
if(position=10)
   form.setNAME10(name); 
}这样会造成很多重复代码, 
谁能帮我把这一段代码重构一下呢?
或者给你想另外一种思路

解决方案 »

  1.   

    struts不是自己就能实现表单到对象的赋值么???你这个到底是什么意思呢???
      

  2.   

    name 是我从数据库中查出来的, 不可以设值进去吗
      

  3.   

    //obj就是你的form ,rs是你查数据库后得到的结果集
    public Object setNAMES(Object obj,ResultSet rs)  {
            try {
        Class cls = obj.getClass();
                while(rs.next()) {
                    Object obj = cls.newInstance();
                    Field[] fields = cls.getDeclaredFields();  //取出所有的字段
                    for (Field field : fields) {
                        String fieldName = field.getName();
                        Method method = cls.getDeclaredMethod("set"+  //取出setXXX() 方法
                                fieldName.substring(0,1).toUpperCase()+
                                fieldName.substring(1),
                                new Class[]{field.getType()});
                        method.invoke(obj,new Object[]{rs.getObject(fieldName)});
                    }
                }
            } catch (Exception ex) {
                System.out.println(ex);
            } 
            return obj;
        }
    这段代码可能有问题,这机子上没IDE,我用记事本敲的 ,你先试试看
    如果还有什么问题可以加我qq(459322436) 来一起学习 ,这段代码还是有缺陷的
    这段代码用到反射的技术 如果你懂反射,可以把这个方法设计的更完善些