- 浏览: 1336137 次
- 性别:
- 来自: 湖南澧縣
文章分类
最新评论
-
虾米小尹:
不行啊!2.2-0.25=1.9500000000000002 ...
JavaScript浮点数运算 —— 精度问题 -
heluping000000:
引用String a= "abc",首先在 ...
String,到底创建了多少个对象? -
mack:
谢谢分享matcher.appendReplacement(s ...
string.replaceAll()中的特殊字符($ \)与matcher.appendReplacement -
wzt3309:
完全理解,比网上其他资料都要详细
String,到底创建了多少个对象? -
u014771876:
Java中十六进制转换 Integer.toHexString()
JavaBean 中的属性
JavaBean 的属性与一般Java 程序中所指的属性,或者说与所有面向对象的程序设计语言中对象的属性是一个概念,在程序中的具体体现就是类中的变量。在JavaBean 的设计中,按照属性的不同作用又细分为四类:
- 单值属性
- 索引属性
- 关联属性
- 限制属性
一、 单值属性
它表示一个伴随有一对get/set 方法的变量。属性名与和该属性相关的get/set 方法名对应。例如:如果有setX 和getX 方法,则暗指有一个名为"X" 的属性。如果有一个方法名为isX ,则通常暗指"X" 是一个布尔属性(即X 的值为true 或false )。
二、 索引属性
它 表示一个数组值。使用与该属性对应的set/get 方法可取得数组中的成员数据值(需要有一个整数 索引参数 )或者一次设置或取得整个数组的值。 索引属性的设计模式如下:
访问整个索引属性 数组的方法
public <propertyType>[]get();
public void set<propertyName>([]value);
访问整个索引属性 中的单个值的方法
public <propertyType> get(int index);
public void set<propertyName>(int index,int value);
三、 关联属性
关联属性,也称之为束缚属性(Bound ), 它是 指当该种属性的值发生变化时,要通知其它的对象。每次的属性值改变时,这种属性就点火一个PropertyChange 事件。事件中封装了属性名、属性的原值、属性变化后的新值。这种事件是传递到其它的Bean ,至于接收事件的Bean 应做什么动作由其自己定义。
包含 关联 属性的Bean 必须具有以下的功能:
1 )允许事件监听器注册和注销与其有关的属性修改事件;
2 )当修改一个 关联 属性时,可以在相关的监听器上触发属性修改事件。
在java.beans 包中提供有PropertyChangeSupport 类,利用它创建出PropertyChangeSupport 类的对象,从而可以用于管理注册的监听器列表和属性修改事件通知的发送。
关联属性Bean的实现:
1、 产生变化的源需要增加 PropertyChangeSupport 的实例,传入 this 作为参数。
2、 在属性变化处进行点火。
3、 增加 addListener(),removeListener() 的方法
Listener 类操作的要点:
1、 继承 PropertyChangeListener 接口,实现 void propertyChange(PropertyChangeEvent e) 方法。
2、 创建Bean 实例。因为要监听 source ,所以 source 类的实例必须在 Listener 类中定义。
3、 调用 Bean 实例方法 addPropertyChangeListener(this) ,将 Listener 类加入成为监听者。
四、限制属性
限制属性( constrained )是指当这个属性的值要发生变化时,与这个属性已建立了某种连接的其它外部Java 对象可否决该属性值的改变(限制 属性的监听者通过抛出PropertyVetoException 来阻止该属性值的改变);当然Bean 本身也可以否决该Bean 属性值的改变。
注意:
限制属性实际上是一种特殊的关联 属性,只是它的值的变化可以被监听者否决掉。
一个 限制 属性有两种监听者:属性变化监听者和否决属性改变的监听者。否决属性改变的监听者在自己的对象代码中有相应的控制语句,在监听到有 限制 属性要发生变化时,在控制语句中判断是否应否决这个属性值的改变。
总之,某个 Bean 的
限制 属性值可否改变取决于其它的Bean 或者是其它外部Java 对象是否允许这种改变。允许与否的条件由其它的Bean 或Java 对象在自己的类中进行定义。
注意:
由于限制属性使用了错误处理,编程的时候要特别注意异常的处理方式。
package bean; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.beans.PropertyVetoException; import java.beans.VetoableChangeListener; import java.beans.VetoableChangeSupport; /* * Bean类似观察者模式里的主题角色或者是被观察者角色(Observable) */ public class SomeBean { protected PropertyChangeSupport propertySupport; //属性改变通知支持 protected VetoableChangeSupport vetoableChangeSupport; //反对属性改变支持 private String changableValue; public SomeBean() { //这里添加支持与像使用observer模式的实现接有口异曲同工之效 propertySupport = new PropertyChangeSupport(this);//使本对象有属性改变通知监听器的能力 vetoableChangeSupport = new VetoableChangeSupport(this);//使监听器有反对本对象属性改变的能力 } public void setChangableValue(String newValue) throws PropertyVetoException { //如果值发生了修改 if (!newValue.equals(changableValue)) { String oldValue = changableValue; //这个一定要在前调用,如果监听器拒绝会抛出异常 vetoableChangeSupport .fireVetoableChange("changableValue", oldValue, newValue); //如果未拒绝,则修改Bean属性 changableValue = newValue; //这个在后调用,属性修改后通知监听器 propertySupport.firePropertyChange("changableValue", oldValue, newValue); //如果两个监听器的次序调过来,你想想会有什么问题?你期待的效果没有达到哦~~~~~~~~~~~~~~~ } } public void addPropertyChangeListener(PropertyChangeListener listener) { propertySupport.addPropertyChangeListener(listener); } public void removePropertyChangeListener(PropertyChangeListener listener) { propertySupport.removePropertyChangeListener(listener); } public void addVetoableChangeListener(VetoableChangeListener listener) { vetoableChangeSupport.addVetoableChangeListener(listener); } public void removeVetoableChangeListener(VetoableChangeListener listener) { vetoableChangeSupport.removeVetoableChangeListener(listener); } public String getChangableValue() { return changableValue; } }
package bean; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyVetoException; import java.beans.VetoableChangeListener; /* * 监听器,用来监听Bean属性值的变化与拒绝属性的修改 * 监听器类似观察者模式观察者角色(Observer) */ public class SomeBeanPropertyListener implements PropertyChangeListener, VetoableChangeListener { public void propertyChange(PropertyChangeEvent evt) { //在这里处理监听到的事件 System.out.println("\"" + evt.getNewValue() + "\" is setted to replace the old value \"" + evt.getOldValue() + "\""); } public void vetoableChange(PropertyChangeEvent evt) throws PropertyVetoException { //如果设置的值为某个特殊值(这里为 invalidValue ),拒绝修改 if (evt.getNewValue().equals("invalidValue")) { System.out.println("\"" + evt.getNewValue() + "\" is try to replace the old value \"" + evt.getOldValue() + "\""); //抛出异常表示拒绝修改属性 throw new PropertyVetoException( "What you set \"invalidValue\" is a invalid value! operate fail!", evt); } } }
package bean; import java.beans.PropertyVetoException; /* * 测试类 */ public class TestBean { public static void main(String[] args) { SomeBean someBean = new SomeBean(); //添加观察者监听器 someBean.addPropertyChangeListener(new SomeBeanPropertyListener()); someBean.addVetoableChangeListener(new SomeBeanPropertyListener()); try { someBean.setChangableValue("someValue");//设置 someBean.setChangableValue("anotherValue");//修改 someBean.setChangableValue("invalidValue");//尝试修改成特殊值 } catch (PropertyVetoException e) { System.err.println(e.getMessage()); } } }
运行结果:
"someValue" is setted to replace the old value "null"
"anotherValue" is setted to replace the old value "someValue"
"invalidValue" is try to replace the old value "anotherValue"
What you set "invalidValue" is a invalid value! operate fail!
发表评论
-
Java正则表达式
2014-03-14 10:16 1759Java正则表达式详解 作者:jzj 文 ... -
类的初始化与清理
2013-06-24 22:20 1453初始化时内存清零 当创建一个对象时,首先将在堆上为这个对象分 ... -
protected,这个错了吗?
2013-06-24 22:17 1245这几天对protected修饰符有点迷糊,随便找同事要了一本 ... -
Java中BigDecimal的8种舍入模式
2013-06-21 18:42 2179java.math.BigDecimal不可变的、任意精度的 ... -
Tomcat性能参数设置
2010-12-27 15:35 34789默认参数不适合生产环境使用,因此需要修改一些参数 1、 ... -
Java 6 JVM参数选项大全
2010-12-14 11:16 1635http://kenwublog.com/docs/java6 ... -
对象的安全构造
2013-06-21 18:43 1540在构造期间,不要公布“this”引用 一种可以将数据争用引 ... -
Java断言(assert)—— 转
2010-06-20 10:36 12095一、概述 在C和C++语言中都有assert关键,表示断言。 ... -
eclipse调试
2010-06-04 00:11 8074eclipse远程调试 在eclipse3.4前,远程调试时 ... -
protected,你真的理解了吗?
2010-05-09 17:56 2141Java中的访问控制修饰符有四个级别,但属protected最 ... -
利用反射进行深层克隆
2010-05-05 21:02 3668最近在看《effective java ... -
类与类之间的几种关系
2010-05-03 13:49 2416类和类、类和接口、接 ... -
运行java
2010-05-03 13:47 1050用javac命令编译一个打包的类时,如果没有加参数" ... -
Java内存模型与volatile
2010-04-25 13:21 18737内存模型描述的是程序 ... -
中断线程
2010-04-24 21:19 8973中断线程 线程的thread.i ... -
java中的关键字、保留字、标示符
2010-04-07 23:48 3371关键字 Java的关键字对java的编译器有特殊的意义, ... -
Java中的浮点数剖析
2010-04-07 23:27 4708定点数表达法的缺点在于其形式过于僵硬,固定的小数点位置决定了固 ... -
线程间的同步与互斥
2010-03-23 21:29 2303线程间的同步(实指线程间的通信):一般来说,一个线程相对于另 ... -
UTF-16、UTF-16BE、UTF-16LE编码方式的区别
2010-03-23 21:20 9802import java.io.IOException; ... -
final、finally、finalize
2010-01-22 01:15 2416final关键字 先看看final关键字,它可以被用于以下几个 ...
相关推荐
"javafx之属性与绑定" JavaFX 是一种新的 Java 技术,用于处理动态画面,画面精美令人赞叹。了解 JavaFX 的属性和绑定是非常重要的。 JavaFX 的属性是基于 JavaBean 的模式,但做了扩展和改进。JavaFX 的属性经常...
每个界面组件(如文本框、下拉菜单)都可以绑定到相应的JavaBean属性,实现数据的双向绑定。 7. **事件处理**:JavaBean支持事件驱动编程,当用户在界面上触发某个操作(如点击按钮),相关的JavaBean可以通过监听...
- **JSP页面**: 负责展示分页界面,使用EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)来绑定PageBean的属性并处理用户交互。 **5. 实现步骤** 1. 用户请求指定页码。 2. JSP页面通过...
POJO,Plain Old Java Object,是一种简单的Java类,没有特定的框架或概念限制,它只是包含一些属性和对应的getter、setter方法。POJO的概念出现是为了区别于EJB(Enterprise JavaBeans)等复杂的企业级组件。虽然...
在使用Hibernate框架时,POJO经常被用来映射数据库表,使得对象属性与表字段一一对应。 #### JavaBean JavaBean是一种遵循特定编码规范的POJO,用于组件化和模块化Java应用程序。JavaBean必须是具体的、公共的类,...
4. 限制属性:有特定限制条件的属性,可能同时是绑定属性。 14.5 API支持 JavaBeans API提供了一系列的类和接口,如Introspector、PropertyDescriptor、EventSetDescriptor等,用于创建、操作和理解JavaBean的属性...
在这个例子中,`<bean:define>`定义了一个名为`myName`的变量,该变量与名为`user`的JavaBean对象的`userName`属性关联,并将其作用域限制为请求范围。这意味着`myName`变量只在当前HTTP请求内有效。然后,`...
属性分为简单、索引、绑定和限制属性。 - **方法**:访问方法(Accessor)如getXxx()和setXxx(),以及操作方法(Mutator)用于操作属性。 - **事件**:通过事件监听器,JavaBean可以触发或响应特定事件。 ### 3. ...
JSP中的EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)可以简化页面与后台数据的绑定和处理,提高开发效率。 3. JavaBean:JavaBean是符合特定规范的Java类,通常用于封装业务逻辑或...
4. **EL(Expression Language)**:EL用于在JSP页面中简洁地访问JavaBean的属性。例如,`${teacher.name}`可以获取名为`teacher`的JavaBean的`name`属性。EL表达式可以插入到HTML标签的属性中,或者在脚本元素内...
这个方法是BeanUtils库的核心功能之一,它允许我们轻松地将一个JavaBean对象的属性值复制到另一个JavaBean对象中。只需要两个对象的属性名相同,无需关心它们的实例是否相同。这对于数据绑定和对象复制非常有用。 ...
Struts2 面试题精要 Struts1 和 Struts2 是两个不同的 Web 应用程序框架,它们之间存在着许多区别。...在 Struts2 中,也可以使用标准 JSP 机制,但是也支持一个更强大和灵活的表达式语言来绑定值到页面中。
在上面的示例代码中,我们使用了 UpBean 这个 JavaBean 来处理文件上传。UpBean 中的 doUpload 方法将 HttpServletRequest 对象的表单原始数据写入到 test.txt 文件中。 在 Struts 2 框架中,我们可以使用 Commons ...
在处理用户输入时,Spring MVC支持数据绑定,能够自动将表单数据绑定到对应的JavaBean属性上。然而,对于特殊的数据类型,如日期,Spring MVC可能无法自动处理非标准格式的日期字符串。在这种情况下,我们需要自定义...
Structs1.x与Structs2.0的区别 本文对Structs1.x和Structs2.0进行了详细的对比,从Action类、线程模式、Servlet依赖、可测试性、捕获输入、表达式语言、绑定值到页面和类型转换等方面进行了分析,帮助读者了解两者...
- `jsp:useBean`:实例化或查找JavaBean并将其绑定到页面作用域。 - `jsp:setProperty`:设置JavaBean的属性值。 - `jsp:getProperty`:获取JavaBean的属性值。 - `jsp:param`:向请求参数中添加值。 - `jsp:...
- `<%@page%>`指令用于设置JSP页面的全局属性,它可以多次出现在同一个JSP页面中,但每个属性只能出现一次。 - `<%@page%>`指令可以放在JSP文件的任何位置,不过为了增强代码的可读性,通常建议将其放置在文件的...
EL是一种轻量级的脚本语言,它简化了JSP中的数据绑定,使得开发者能够更方便地访问和显示JavaBean中的属性。例如,我们可以用${user.name}来获取并显示用户的名字。 在交友系统中,用户可能需要查看其他用户的详细...