5.4.1 设置并获取基本和嵌套属性

使用setPropertyValue(s)getPropertyValue(s)可以设置并获取属性,两者都带有几个重载方法。在Spring自带的java文档中对它们有更详细的描述。重要的是要知道对象属性指示的几个约定。几个例子:

表 5.1. 属性示例

表达式 说明
name 表示属性name与方法getName()isName()setName()相对应
account.name 表示属性account的嵌套属性name与方法getAccount().setName()getAccount().getName()相对应
account[2] 表示索引属性account的第三个元素。索引属性可以是arraylist或其他自然排序的集合
account[COMPANYNAME] 表示映射属性account被键COMPANYNAME索引到的映射项的值

下面你会发现一些使用BeanWrapper来获取和设置属性的例子。

(如果你不打算直接使用BeanWrapper,那么下一部分对你来说并不重要。如果你仅使用DataBinderBeanFactory以及它们开箱即用的实现,你应该跳到关于PropertyEditor部分的开头)。

考虑下面两个类:

public class Company {

    private String name;
    private Employee managingDirector;

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Employee getManagingDirector() {
        return this.managingDirector;
    }

    public void setManagingDirector(Employee managingDirector) {
        this.managingDirector = managingDirector;
    }
}
public class Employee {

    private String name;

    private float salary;

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public float getSalary() {
        return salary;
    }

    public void setSalary(float salary) {
        this.salary = salary;
    }
}

以下的代码片段展示了如何检索和操纵实例化的CompaniesEmployees的某些属性:

BeanWrapper company = new BeanWrapperImpl(new Company());
// setting the company name..
company.setPropertyValue("name", "Some Company Inc.");
// ... can also be done like this:
PropertyValue value = new PropertyValue("name", "Some Company Inc.");
company.setPropertyValue(value);

// ok, let's create the director and tie it to the company:
BeanWrapper jim = new BeanWrapperImpl(new Employee());
jim.setPropertyValue("name", "Jim Stravinsky");
company.setPropertyValue("managingDirector", jim.getWrappedInstance());

// retrieving the salary of the managingDirector through the company
Float salary = (Float) company.getPropertyValue("managingDirector.salary");

results matching ""

    No results matching ""