java bean 绑定类_JavaBean的绑定属性及约束属性[转]

1.JavaBean的分类:可视化JavaBean和非可视化JavaBean。

2.JavaBean属性的分类:

JavaBean是可复用的平台独立的软件组件,开发者可以在软件构造器工具中其直接进行可视化操作。

1)简单属性(简单属性的JavaBean只是负责设置或获取单个的属性值)

2)绑定属性

3)约束属性

4)索引属性(获取和设置数组时使用的属性,要运用索引属性,需要提供两对get/set方法,一对用于数组另一对用于数组中的元素)

private String[] arr;

public String[] getArr(){return arr;}

public void setArr(String[] arrs){this.arr=arrs;}

public String getArr(int i){return arr[i];}

public void setArr(int i,String new){arr[i]=new;}

3.如果是可视化的JavaBean,就必须扩展java.awt.Component类。

软件构造器工具可以是Web页面构造器、可视化应用程序构造器、CUI设计构造器或服务器应用程序构造器。有时,构造器工具也可以是一个包含子一些bean的复合文档的文档编辑器。JavaBean可以是简单的CUI要素,如按钮或滚动条;也可以是复杂的可视化软件组件,如数据库视图,有些JavaBean是没有GUI表现形式的,但这些JavaBean仍然可以使用应用程序构造器可视化地进行组合。 一个JavaBean和一个Javaapplet相似,是一个非常简单的遵循某种严格协议的Java类。每个JavaBean的功能都可能不一样,但它们都必须支持以下特征。

一个bean没有必须继承的特定的基类或接口。可视化的bean必须继承的类是java.awt.Component,这样它们才能添加到可视化容器中去,非可视化bean则不需要继承这个类。有许多bean,无论是在应用程序构造器工具中,还是在最后创建好的应用程序中,都具有很强的可视化特征,但这并非每个bean必须的特征。

在使用Java编程时,并不是所有软件模块都需要转换成bean。Bean比较适合于那些具有可视化操作和定制特性的软件组件。

从基本上说,JavaBean可以看成是一个黑盒子,即只需要知道其功能而不必管其内部结构的软件设备。黑盒子只介绍和定义其外部特征和与其他部分的接口,如按钮、窗口、颜色、形状、句柄等。

Bean主体类

import java.beans.PropertyChangeListener;

import java.beans.PropertyChangeSupport;

import java.beans.VetoableChangeListener;

import java.beans.VetoableChangeSupport;

public class MyJavaBean {

private String sex="male";

//支持绑定 (bound) 属性的 bean 可以使用该类。可以使用此类的实例作为 bean 的成员字段,并将各种工作委托给它。

PropertyChangeSupport propertySupport;

//支持约束 (constrained) 属性的 bean 可以使用此类。可以使用此类的实例作为 bean 的成员字段,并将各种工作委托给它。

VetoableChangeSupport vetoableSupport;

public MyJavaBean() {

//绑定本bean

propertySupport = new PropertyChangeSupport(this);

//约束本bean

vetoableSupport = new VetoableChangeSupport(this);

}

public void setSex(String newSex) {

if (!newSex.equals(sex)) {

String oldValue = sex;

// 属性验证֤

try {

//向所有已注册的侦听器报告 vetoable属性更新。如果任何人禁止更改,则触发一个新的事件,

//该事件将每个人的属性还原为旧值,然后再次抛出 PropertyVetoException。

//如果新属性和旧属性相等并且是非 null 的,则不会触发事件。

vetoableSupport.fireVetoableChange("changesex", sex, newSex);

// 没被阻止

sex = newSex;

} catch (Exception e) {

System .out.println("禁止修改");

}

//报告所有已注册侦听器的绑定属性更新。如果新属性和旧属性相同并且是非 null 的,则不会触发事件。

propertySupport.firePropertyChange("changesex", oldValue, newSex);

}

}

public String getSex()

{

return this.sex;

}

public void addPropertyChangeListener(PropertyChangeListener listener) {

propertySupport.addPropertyChangeListener(listener);

}

public void removePropertyChangeListener(PropertyChangeListener listener) {

propertySupport.removePropertyChangeListener(listener);

}

public void addVetoableChangeListener(VetoableChangeListener listener) {

vetoableSupport.addVetoableChangeListener(listener);

}

public void removeVetoableChangeListener(VetoableChangeListener listener) {

vetoableSupport.removeVetoableChangeListener(listener);

}

}

事件类

import java.beans.PropertyChangeEvent;

import java.beans.PropertyChangeListener;

import java.beans.PropertyVetoException;

import java.beans.VetoableChangeListener;

public class MyJavaBeanPropertyListener implements PropertyChangeListener,VetoableChangeListener{

@Override

public void vetoableChange(PropertyChangeEvent evt)throws PropertyVetoException {

if (evt.getNewValue().equals("female")){

// 处理监听到的事件

System.out.println("\"NewValue:\"" + evt.getNewValue() + "\"OldValue:\"" + evt.getOldValue() + "\"");

throw new PropertyVetoException("禁止变性", evt);

}

}

@Override

public void propertyChange(PropertyChangeEvent evt) {

System.out.println("\"NewValue:\"" + evt.getNewValue() + "\"OldValue:\"" + evt.getOldValue() + "\"");

}

}

JSP文件

Insert title here

myBean.addPropertyChangeListener(new MyJavaBeanPropertyListener());

myBean.addVetoableChangeListener(new MyJavaBeanPropertyListener());

%>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值