zoukankan      html  css  js  c++  java
  • JavaBean的绑定属性及约束属性[转]

    转自:http://www.cnblogs.com/abllyboy/archive/2010/12/19/1910543.html

    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文件

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    <%@page import="com.myservlet.bean.MyJavaBeanPropertyListener"%>
    <jsp:useBean id="myBean" class="com.myservlet.bean.MyJavaBean" scope="page"></jsp:useBean>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    <%
    	myBean.addPropertyChangeListener(new MyJavaBeanPropertyListener());
    	myBean.addVetoableChangeListener(new MyJavaBeanPropertyListener());
    %>
    <jsp:getProperty property="sex" name="myBean"/>
    <jsp:setProperty property="sex" name="myBean" value="female"/>
    <br/>
    <jsp:getProperty property="sex" name="myBean"/>
    </body>
    </html>
    
  • 相关阅读:
    Struts2-result配置结果视图
    Struts2 -action处理业务请求
    struts 2
    mvc模式
    vue之webpack安装配置vue
    vue之webpack
    文件上传
    LinkedList详解
    ArrayList详解
    HashMap详解
  • 原文地址:https://www.cnblogs.com/wen12128/p/2054117.html
Copyright © 2011-2022 走看看