首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

Vaadin Web应用开发课程(42):数据绑定-Property接口

2012-09-14 
Vaadin Web应用开发教程(42):数据绑定-Property接口Property接口为Vaadin数据模型的基本接口,它提供了读写

Vaadin Web应用开发教程(42):数据绑定-Property接口
Property接口为Vaadin数据模型的基本接口,它提供了读写单个数据对象的标准API。 一个Property对象总是有数据类型的,尽管它支持可选的数据类型转换。Property的数据可以为任意的Java对象,Property 也提供了监听数据变化的事件消息。
Property的读写方法为getValue()和setValue() 。getValue() 返回通用的Object 类型的对象,因此可以强制转换成所需的数据类型。Property的类型可以通过getType()取得。

Property值发生变化说触发ValueChangeEvent事件,可以通过ValueChangeListener监听这个事件。

使用Property接口,一是实现Property接口,而是使用Vaadin内置的两个Property接口实现:MethodProperty 主要用于Java Bean,而是ObjectProperty用于简单的Java对象。

与Property接口关系紧密的还有两个接口Property.Editor和Property.Viewer 可以用来显示和编译Property值,大部分的UI组件,尤其是Field组件实现了这两个接口,因此Field组件可以直接绑定到Property对象,用来显示或编辑Property数据。

下例使用Label 来显示一个ObjectProperty 对象

前面说过所有Field组件也实现了Property接口,因此也可以把Field组件绑定到实现了Property.Viewer接口的UI组件,如Label。下例把一个Label绑定到一个TextField,因此Label显示的内容会和TextField的值变化而变化。

class MyProperty implements Property {    Integer data     = 0;    boolean readOnly = false;        // Return the data type of the model    public Class<?> getType() {        return Integer.class;    }    public Object getValue() {        return data;    }        // Override the default implementation in Object    @Override    public String toString() {        return Integer.toHexString(data);    }    public boolean isReadOnly() {        return readOnly;    }    public void setReadOnly(boolean newStatus) {        readOnly = newStatus;    }    public void setValue(Object newValue)            throws ReadOnlyException, ConversionException {        if (readOnly)            throw new ReadOnlyException();                    // Already the same type as the internal representation        if (newValue instanceof Integer)            data = (Integer) newValue;                // Conversion from a string is required        else if (newValue instanceof String)            try {                data = Integer.parseInt((String) newValue, 16);            } catch (NumberFormatException e) {                throw new ConversionException();            }        else             // Don't know how to convert any other types            throw new ConversionException();        // Reverse decode the hexadecimal value    }}        // Instantiate the property and set its dataMyProperty property = new MyProperty();property.setValue(42);        // Bind it to a componentfinal TextField tf = new TextField("Name", property);




热点排行