`
sun4love
  • 浏览: 233453 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【zk开发】注解强化Composer

    博客分类:
  • zk
阅读更多

 

import java.text.DecimalFormat;
import java.text.ParseException;
import java.util.List;

import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.util.GenericAutowireComposer;
import org.zkoss.zkplus.databind.AnnotateDataBinder;
import org.zkoss.zkplus.databind.DataBinder;

import com.sun4love.common.web.zk.converter.SexRadiogroupConverter;

/**
 * 注解绑定类
 * <p>
 * 在GenericAutowireComposer基础上对注解进行增强, 因此你无需再页面上显式添加注解支持指令
 * 
 * <pre>
 * &lt;?init class="org.zkoss.zkplus.databind.AnnotateDataBinderInit"?&gt;
 * </pre>
 * <p>
 * 
 * @author sun4love
 * 
 */
abstract public class GenericDataBinderComposer extends GenericAutowireComposer {
	private static final long serialVersionUID = -8962566563467903754L;
	protected DataBinder binder;

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);
		binder = new AnnotateDataBinder(comp);
		comp.setAttribute("binder", binder);
	}

	protected void loadAll() {
		binder.loadAll();
	}

	protected void loadAttribute(Component comp, String attr) {
		binder.loadAttribute(comp, attr);
	}

	protected void loadComponent(Component comp) {
		binder.loadComponent(comp);
	}

	/**
	 * 绑定bean到ui组件上
	 * <p>
	 * 范例
	 * <hr />
	 * 
	 * <pre>
	 * <code>
	 * &lt;window id=&quot;userWin&quot; apply=&quot;GenericDataBinderComposerChild&quot;&gt;
	 *    &lt;textbox id=&quot;txtFirstName&quot; /&gt;
	 *    &lt;textbox id=&quot;txtlastName&quot; /&gt;
	 *    &lt;label id=&quot;lblFullName&quot; /&gt;
	 * &lt;/window&gt;
	 * GenericDataBinderComposerChild类
	 * 
	 * public GenericDataBinderComposerChild extends GenericDataBinderComposer{
	 * 		private Textbox txtFirstName;
	 * 		private Textbox txtLastName;
	 * 		private Label lblFullName;
	 * 
	 * 		public void doAfterCompose(Component comp) throws Exception {
	 * 			super.doAfterCompose(comp);
	 * 			binder.addBinding(txtFirstName, "value", "userWin$composer.user.firstName");
	 * 			binder.addBinding(txtLastName, "value", "userWin$composer.user.lastName");
	 * 
	 * 			//"txtLastName.onBlur"中的txtLastName是页面上&lt;textbox id=&quot;txtlastName&quot; /&gt;
	 * 			//userWin$composer中的userWin是页面上window的id,$.composer是固定格式
	 * 			addBinding(lblFullName, "value", "userWin$composer.user.fullName","txtLastName.onBlur" , null,null,null);
	 * 		}
	 * }
	 * </pre>
	 * 
	 * @param comp
	 *            ui组件
	 * @param attr
	 *            ui组件的属性,例如&lt;textbox value="@{user.name}"/&gt;中的value
	 * @param expr
	 *            表达式,例如,例如&lt;textbox value="@{user.name}"/&gt;中的user.name
	 * @param loadWhenEvents
	 *            加载bean到ui的时机,例如comp1.onClck、comp2、onBlur、comp3.onSelect,
	 *            等同于&lt;textbox id=&quot;txtFullName&quot;
	 *            value=&quot;@{user.fullName, load-when= 
	 *            'txtLastName.onBlur'}&quot;/&gt;中的txtLastName.onBlur
	 * @param saveWhenEvent
	 *            保存ui value到bean的时机,例如comp3.onBlur, 等同于&lt;textbox
	 *            id=&quot;txtFullName&quot; value=&quot;@{user.fullName,
	 *            save-when= 
	 *            'txtFullName.onBlur',}&quot;/&gt;中的txtFullName.onBlur
	 * @param access
	 *            访问安全性,允许保存ui value 到bean,还是是load bean到ui,还是两者都是,或者什么都不做,
	 *            可选值为none,save,load,both(save/load),
	 * @param converter
	 *            转换器,ui到bean之间的互相转换,类似hibernate jdbc type到db type或者struts中的转换器
	 *            ,样例见{@link SexRadiogroupConverter}
	 */
	protected void addBinding(Component comp, String attr, String expr,
			String loadWhenEvent, String saveWhenEvent, String access,
			String converter) {
		if (loadWhenEvent != null && "".equals(loadWhenEvent.trim())) {
			binder.addBinding(comp, attr, expr, (List) null, saveWhenEvent,
					access, converter);
		} else {
			binder.addBinding(comp, attr, expr, new String[] { loadWhenEvent },
					saveWhenEvent, access, converter);
		}
	
	}

	/**
	 * 绑定bean到ui组件上
	 * <p>
	 * 范例
	 * <hr />
	 * 
	 * <pre>
	 * 页面
	 * &lt;window id=&quot;userWin&quot; apply=&quot;GenericDataBinderComposerChild&quot;&gt;
	 *    &lt;textbox id=&quot;txtFirstName&quot; /&gt;
	 *    &lt;textbox id=&quot;txtlastName&quot; /&gt;
	 *    &lt;label id=&quot;lblFullName&quot; /&gt;
	 * &lt;/window&gt;
	 * GenericDataBinderComposerChild类
	 * 
	 * public GenericDataBinderComposerChild extends GenericDataBinderComposer{
	 * 		private Textbox txtFirstName;
	 * 		private Textbox txtLastName;
	 * 		private Label lblFullName;
	 * 
	 * 		public void doAfterCompose(Component comp) throws Exception {
	 * 			super.doAfterCompose(comp);
	 * 			binder.addBinding(txtFirstName, "value", "userWin$composer.user.firstName");
	 * 			binder.addBinding(txtLastName, "value", "userWin$composer.user.lastName");
	 * 
	 * 			//"txtLastName.onBlur"中的txtLastName是页面上&lt;textbox id=&quot;txtlastName&quot; /&gt;
	 * 			//userWin$composer中的userWin是页面上window的id,$.composer是固定格式
	 * 			addBinding(lblFullName, "value", "userWin$composer.user.fullName","txtLastName.onBlur" , null,null,null);
	 * 		}
	 * }
	 * </pre>
	 * 
	 * @param comp
	 *            ui组件
	 * @param attr
	 *            ui组件的属性,例如&lt;textbox value="@{user.name}"/&gt;中的value
	 * @param expr
	 *            表达式,例如,例如&lt;textbox value="@{user.name}"/&gt;中的user.name
	 * @param access
	 *            访问安全性,允许保存ui value 到bean,还是是load bean到ui,还是两者都是,或者什么都不做,
	 *            可选值为none,save,load,both(save/load),
	 */
	protected void addBinding(Component comp, String attr, String expr,
			String access) {
		binder.addBinding(comp, attr, expr, (List) null, (List) null, access,
				null);
	}

	/**
	 * 绑定bean到ui组件上
	 * <p>
	 * 范例
	 * <hr />
	 * 
	 * <pre>
	 * &lt;window id=&quot;userWin&quot; apply=&quot;GenericDataBinderComposerChild&quot;&gt;
	 *    &lt;textbox id=&quot;txtFirstName&quot; /&gt;
	 *    &lt;textbox id=&quot;txtlastName&quot; /&gt;
	 *    &lt;label id=&quot;lblFullName&quot; /&gt;
	 * &lt;/window&gt;
	 * GenericDataBinderComposerChild类
	 * 
	 * public GenericDataBinderComposerChild extends GenericDataBinderComposer{
	 * 		private Textbox txtFirstName;
	 * 		private Textbox txtLastName;
	 * 		private Label lblFullName;
	 * 
	 * 		public void doAfterCompose(Component comp) throws Exception {
	 * 			super.doAfterCompose(comp);
	 * 			binder.addBinding(txtFirstName, "value", "userWin$composer.user.firstName");
	 * 			binder.addBinding(txtLastName, "value", "userWin$composer.user.lastName");
	 * 
	 * 			//"txtLastName.onBlur"中的txtLastName是页面上&lt;textbox id=&quot;txtlastName&quot; /&gt;
	 * 			//userWin$composer中的userWin是页面上window的id,$.composer是固定格式
	 * 			addBinding(lblFullName, "value", "userWin$composer.user.fullName","txtLastName.onBlur" , null,null,null);
	 * 		}
	 * }
	 * 
	 * </pre>
	 * 
	 * @param comp
	 *            ui组件
	 * @param attr
	 *            ui组件的属性,例如&lt;textbox value="@{user.name}"/&gt;中的value
	 * @param expr
	 *            表达式,例如,例如&lt;textbox value="@{user.name}"/&gt;中的user.name
	 * @param loadWhenEvents
	 *            加载bean到ui的时机,例如comp1.onClck、comp2、onBlur、comp3.onSelect,
	 *            等同于&lt;textbox id=&quot;txtFullName&quot;
	 *            value=&quot;@{user.fullName, load-when= 
	 *            'txtLastName.onBlur'}&quot;/&gt;中的txtLastName.onBlur
	 * @param access
	 *            访问安全性,允许保存ui value 到bean,还是是load bean到ui,还是两者都是,或者什么都不做,
	 *            可选值为none,save,load,both(save/load),
	 * @param converter
	 *            转换器,ui到bean之间的互相转换,类似hibernate jdbc type到db type或者struts中的转换器
	 *            ,样例见{@link SexRadiogroupConverter}
	 */
	protected void addBinding(Component comp, String attr, String expr,
			String access, String converter) {
		binder.addBinding(comp, attr, expr, (List) null, (List) null, access,
				converter);
	}

}

 

分享到:
评论

相关推荐

    ZK开发文档中文HTML版

    在这个"ZK开发文档中文HTML版"中,你将找到关于如何使用ZK框架进行开发的详细指南。 首先,文档会介绍ZK的基本概念,包括组件系统、事件处理和布局管理。ZK的组件库丰富,涵盖了各种常见的UI元素,如按钮、表格、树...

    Laravel开发-composer-plugin

    在本文中,我们将深入探讨Laravel开发中的Composer插件,以及如何有效地利用它们来增强项目的功能和效率。Composer是PHP的一个依赖管理工具,它允许开发者声明项目所依赖的库,并自动处理这些库的安装和更新。在...

    ZK中文开发手册 html

    通过阅读和实践《ZK开发手册(中文)》,开发者不仅能掌握ZK框架的基本用法,还能深入了解其高级特性和最佳实践,从而更高效地开发出高质量的Web应用程序。对于那些希望提升Web应用用户体验、减少前端复杂性的开发者来...

    Laravel开发-composer

    Laravel开发-composer Rinvex Composer是一个直观的软件包,它利用Composer插件API支持安装过程中的其他操作,例如在默认供应商库外安装软件包,以及在安装、更新和卸载过程中运行自定义脚本。

    Composer-Setup php Composer安装包

    在PHP开发环境中,Composer起到了构建、部署和维护应用程序依赖关系的核心作用。本篇将详细介绍Composer-Setup.exe,它是Composer的Windows安装程序,以及如何在已安装PHP的基础上配置和使用Composer。 首先,让...

    Unity3D 真实地形插件WorldComposer和TerrainComposer

    Unity3D是一款强大的游戏开发引擎,广泛应用于游戏开发、虚拟现实和增强现实项目。在创建大规模、真实的3D环境时,地形系统是至关重要的部分。本文将深入探讨Unity3D中的两个知名地形插件——WorldComposer和Terrain...

    ZK框架:Ajax开发实战

    本实战教程将深入探讨如何利用ZK框架进行Ajax开发,旨在帮助开发者高效地构建交互性强、响应快速的Web应用。 在ZK框架中,Ajax的核心概念是事件驱动和组件模型。ZK通过事件监听和组件间的通信机制,使得Ajax请求...

    Composer windows安装版

    Composer是PHP开发中不可或缺的工具,它主要用于管理项目依赖,使开发者能够轻松地安装、更新和管理各种PHP库和框架。在Windows环境下,有时通过官方渠道下载Composer可能由于网络问题而遇到困难,因此这个Windows...

    Laravel开发-flow-composer-installers

    在本文中,我们将深入探讨`Laravel开发-flow-composer-installers`这个主题,这是一个与Laravel框架相关的开发工具,主要用于优化Composer的包安装过程。Composer是PHP中的依赖管理工具,而`composer-installers`则...

    Laravel开发-composer-about

    在这个"Laravel开发-composer-about"主题中,我们将深入探讨`composer.lock`文件以及如何获取和解析其中关于已使用包的信息。 `composer.json`文件是项目的核心配置文件,它定义了项目所需的包、版本约束和其他元...

    composer安装包以及ca证书

    总结起来,Composer是PHP开发中不可或缺的一部分,而正确配置PHP环境,尤其是OpenSSL扩展和证书,对于顺利安装和使用Composer至关重要。遇到问题时,检查PHP版本、启用OpenSSL扩展、配置正确的证书路径是解决问题的...

    TI开发工具Code Composer Studio (CCS) 在线安装包(2017版)

    Code Composer Studio (CCS) 集成开发环境 (IDE)官方安装包,注意是在线的,省去注册登录的麻烦。

    镜像Composer的安装

    在PHP项目开发中,合理利用Composer可以极大地提高开发效率,简化项目依赖管理的过程。此外,Composer还支持自更新功能,可以通过`composer self-update`命令随时获取最新版本的Composer,保持工具的新鲜度。

    Laravel开发-composer-bump

    在Laravel框架的开发过程中,`composer-bump`是一个非常重要的工具,它允许开发者通过Artisan命令行工具来轻松地更新`composer.json`文件中的版本号。`composer.json`是PHP项目的核心配置文件,用于定义项目的依赖...

    Laravel开发-laravel-composer

    本主题将深入探讨Laravel开发中的一个重要组件——`laravel-composer`,以及如何利用Artisan命令行工具来操作Composer。 首先,我们要明白Composer在PHP开发中的角色。Composer是PHP的一个依赖管理工具,它允许...

    NVIDIA FX Composer工具安装包

    NVIDIA FX Composer是一款强大的视觉效果和图形开发工具,主要用于创建、测试和调试复杂的实时图形应用程序。这款工具在游戏开发、专业可视化以及虚拟现实等领域有着广泛的应用。FX Composer提供了直观的界面,让...

    composer php composer

    1. **依赖管理**:Composer 使开发人员能够声明项目依赖的库,并自动下载和安装这些库及其依赖。这简化了项目的构建和维护,因为所有的库都会保持在最新且兼容的状态。 2. **自动加载**:Composer 生成一个自动加载...

Global site tag (gtag.js) - Google Analytics