首页 新闻 会员 周边 捐助

java中为实体对象的动态属性赋值

1
悬赏园豆:40 [已解决问题] 解决于 2014-08-04 10:37

例如: User 对象中有100个属性,从jsp页面传过来的参数对应了其中的某一个属性,根据User中的set方法为具体的属性赋值。

怎么样根据set方法或者其他的方法为对应的不确定的属性赋值!

  public class User{

   private String field1;
    private String field2;
    private String field3;
    private String field4;
    private String field5;
    private String field6;
    private String field7;
    private String field8;
    private String field9;
    private String field10;
    private String field11;
    private String field12;
    private String field13;
    private String field14;
    private String field15;
    private String field16;
    private String field17;
    private String field18;
    private String field19;
    private String field20;

  ..//get、set方法省略

  }

 

String param = request.getParameter(" field ? ");

 

其中? 根据json返回的数据自动生成的文本框,获取到的属性名称,对应了User中的具体某个属性。比如:?为1,则获取到field1 的值,然后将其赋值给User。

如何解决以上,为User多个属性动态赋值。

snow__wolf的主页 snow__wolf | 初学一级 | 园豆:132
提问于:2014-08-02 10:35
< >
分享
最佳答案
1

下面是User类:

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;

public class User {

    private Map<String, String> map = new HashMap<String, String>();
    

    
    public boolean contains(String key) {
        Class<FieldString> fieldClass = User.FieldString.class;
        Field[] fields = fieldClass.getFields();
        for (Field f : fields) {
            if (key.equals(f.getName())) {
                return true;
            }
        }
        
        return false;
    }
    
    public void putParam(String key, String value) {
        map.put(key, value);
    }
    
    public String getParam(String key) {
        return map.get(key);
    }
    
    private class FieldString {
        public String field1;
        public String field2;
        public String field3;
        public String fiels4;
    }
    
}

进行测试:

public class Test {

    public static void main(String[] args) {
        String key = "field1";
        String value = "hello";
        User user = new User();
        
        if(user.contains(key)) {
            user.putParam(key, value);
        }
        
        System.out.println(user.getParam(key));
    }
}
收获园豆:36
平睦 | 菜鸟二级 |园豆:239 | 2014-08-03 14:37

如果我没有理解错你的问题的话,上面的额代码可以满足你的需求,如果有问题请联系我。

平睦 | 园豆:239 (菜鸟二级) | 2014-08-03 14:40

@平睦: 谢谢了,已解决!

snow__wolf | 园豆:132 (初学一级) | 2014-08-04 10:36
其他回答(2)
0
收获园豆:2
爱编程的大叔 | 园豆:30844 (高人七级) | 2014-08-02 10:51
0

这个很显然得利用Java反射来解决了。

setValue(Class beanClass,HttpServeltRequest request){

Object user=beanClass.newInstance();

Field[] fields=bean.getDeclaredFields();

for(int i=0; i<i.length; i++){

field.setValue(user,request.getParameter(fileds[i].getName));

}

return user;

}

收获园豆:2
乐享程序员 | 园豆:930 (小虾三级) | 2014-08-03 20:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册