`

zk5.0.2中基于注解对象图浏览的bug

    博客分类:
  • ZK
阅读更多

zk5.0中基于注解对象图浏览的bug

 

举例:列出用户所在部门的所有员工

 

<listbox model="@{indexWin.user.dept.users}">

    <listitem self="@{each=user}"  label="@{user.name}"

</listbox>

 

这里代码是没有任何问题的

 

但是如果开发人员在Dept类中未提供users的get方法,问题就出来了

 

1,在zk3.6.4中报错如下:

 

 

 

org.zkoss.zk.ui.UiException: java.lang.NoSuchMethodException: class com.xxxxx.xxxxx.web.zk.controller.IndexController: name=users args=null

sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)

sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

java.lang.reflect.Constructor.newInstance(Constructor.java:513)

org.zkoss.lang.Classes.newInstance(Classes.java:78)

........................................................................

 

 

 

2,但是在zk.5.xxx.xxx报错如下:

 

 

org.zkoss.zk.ui.UiException: Expects java.util.Set, java.util.List, java.util.Map, Object[], Enum Class, or BindingListModel only. class com.xxxxx.xxxxx.web.zk.controller.IndexController

org.zkoss.zkplus.databind.ListModelConverter.coerceToUi(ListModelConverter.java:57)

org.zkoss.zkplus.databind.Binding.myLoadAttribute(Binding.java:366)

org.zkoss.zkplus.databind.Binding.loadAttribute(Binding.java:336)

org.zkoss.zkplus.databind.DataBinder.loadAttrs(DataBinder.java:572)

 

 

zk3.6.4的异常时正确的,因为由于开发人员的疏忽,忘记写getUsers方法,报 java.lang.NoSuchMethodException异常正确反映了当前错误

 

 

但是zk.5.xx.xx呢,

 

报道异常却是org.zkoss.zk.ui.UiException: Expects java.util.Set, java.util.List, java.util.Map, Object[], Enum Class, or BindingListModel only

 

下面重点讲述一下为什么?

 

 

首先看一下<listbox model="@{indexWin.user.dept.users}">

    <listitem self="@{each=user}"  label="@{user.name}"

</listbox>

 

 

  • 在zk3.6.4中,它是这么解析的:首先找到indexWin组件,再从indexWin组件内查找getUser方法

 

 

然后从返回的user对象中,找getDept方法,最后从dept对象中查找getUsers方法

 

 

在查找的过程中,如果未找到,立即报错,报无匹配get方法错误

 

 

 

 

  • 在zk5.xxx.xxx中,首先找到indexWin组件,再从indexWin组件内查找getUser方法

     

     

    然后从返回的user对象中,找getDept方法,最后从dept对象中查找getUsers方法

     

     

    但与3.6.4不同的是:在查找的过程中,如果未找到get方法,zk5则返回上一个找到的对象

     

    举个例子:

    1,如在dept类中未提供getUsers方法,@{indexWin.user.dept.users}返回dept对象

    2,如在user类中未提供getDept方法,@{indexWin.user.dept.users}返回user对象

    3,如在indexWin类中未提供getUser方法,@{indexWin.user.dept.users}返回indexWin对象

     

     

     

再回过头来,看开始部分举得例子

<listbox model="@{indexWin.user.dept.users}">

 

    <listitem self="@{each=user}"  label="@{user.name}"

</listbox>

 

 

由于未提供getUsers方法,@{indexWin.user.dept.users}返回的结果为dept对象,但是listbox model属性接受的类型仅为 java.util.Set, java.util.List, java.util.Map, Object[], Enum Class, or BindingListModel ,因此在类型转换的时候报错

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论
1 楼 tsinglongwu 2011-02-12  
分析的太好了,今天正碰到这个问题,解决了!赞一个

相关推荐

    ZK 5.0.2 API

    ZK 5.0.2 API 是一个针对ZK框架的开发接口...通过阅读`zk.chm`帮助文件和`readme.txt`,开发者可以深入了解ZK 5.0.2 API的具体用法,包括各个组件的属性、方法、事件以及示例代码,从而更好地在实际项目中运用ZK框架。

    ZK Client Engine 5.0.2 API

    在ZK Client Engine 5.0.2中,`jsdoc`文件包含了API接口、类、方法和属性的详细说明,便于开发者查阅和理解API的使用方式。 总结起来,ZK Client Engine 5.0.2 API 提供了全面的客户端操作Zookeeper的工具,涵盖了...

    spring5.0.2中文官网文档.pdf

    本文档详细介绍了 Spring 5.0.2 中的核心技术,涵盖了 IoC 容器、Bean 的概述、依赖关系、范围、定制 Bean 的本质、Bean 定义继承、容器扩展点、基于注解的容器配置、类路径扫描和管理组件、使用 JSR 330 标准注释、...

    zk-bin-3.6.2.zip_zk_zk version 3_zk-bin-5.0.2

    【标题】"zk-bin-3.6.2.zip_zk_zk version 3_zk-bin-5.0.2" 涉及到的是ZooKeeper的两个不同版本,即3.6.2和5.0.2。ZooKeeper是一个分布式协调服务,广泛应用于大数据和分布式计算系统中,如Hadoop、HBase等。它提供...

    spring5.0.2中文官网文档

    它既可以加载XML文件中的配置信息,也可以加载基于注解或Java代码的配置。 除了IoC容器,Spring框架还提供了面向方面的编程(AOP)能力,它使得开发者可以定义“切面”来为跨多个点的对象提供额外的行为,而不必...

    spring 5.0.2官网文档-中文翻译

    最后,Spring Boot 2.0.x系列基于Spring 5.0.x,因此,Spring 5.0.2的改进也直接影响到Spring Boot的应用,让微服务开发变得更加流畅。 总的来说,Spring 5.0.2中文翻译版的文档是开发者深入理解和使用该版本的关键...

    spring-5.0.2中文注释版

    在5.0.2版本中,Spring提供了更丰富的注解支持,如`@Autowired`、`@Qualifier`等,使得依赖注入更加便捷。 2. **Bean容器**:Spring Bean容器是应用程序的主要入口点,负责创建、配置、管理和装配对象。`...

    spring-framework-5.0.2.RELEASE-中文注释版.zip

    源码中的测试类和注解可以作为实例,指导我们如何有效地编写测试用例。 七、Reactive编程 Spring 5.0引入了对Reactor库的支持,实现了对响应式编程模型的全面支持。Reactive Spring允许开发者编写非阻塞的、基于...

    Spring5.0.2 jar包

    8. **spring-test-5.0.2.RELEASE-javadoc.jar**:为Spring应用提供测试支持,包括测试注解、测试上下文框架和Mock对象,帮助开发者编写可测试的代码。 9. **spring-webflux-5.0.2.RELEASE-javadoc.jar**:处理...

    bugzilla5.0.2 最新版 简体汉化包

    使用这个汉化包,用户可以更轻松地理解和操作Bugzilla的各项功能,如创建新bug报告、分配任务、跟踪状态变化、设置优先级和严重性,以及参与讨论。简体中文界面对于中国开发者和项目经理来说,无疑降低了沟通和使用...

    Spring 5.0.2

    在5.0.2版本中,Spring Boot提供了更智能的自动配置,可以更快地启动和运行应用,并且提供了更好的健康检查和监控工具,有助于在生产环境中进行故障排查。 在数据访问层,Spring Data模块针对JPA、MongoDB等进行了...

    Spring Framework 5.0.2 下载

    I’m pleased to announce that Spring Framework 5.0.2 and 4.3.13 are available now, as a pair of refinement releases which are recommended as immediate upgrades for all Spring users. They will also be ...

    spring-framework-5.0.2.RELEASE-中文注释版-终极完美版.rar

    依赖注入允许开发者通过配置文件或注解来管理对象之间的依赖关系,降低了代码的耦合度。面向切面编程则提供了一种在不修改源代码的情况下,对程序进行功能增强的方式,比如日志记录、性能监控等。声明式事务管理使得...

    网络调试助手(netassist5.0.2)

    《网络调试助手——深入探索netassist5.0.2》 网络调试是IT行业中不可或缺的一环,它涉及到网络问题的定位、分析与解决,对于网络管理员和开发人员来说至关重要。而"网络调试助手(netassist5.0.2)"正是这样一款专...

    StarUML5.0.2.zip

    状态图展示了对象在其生命周期中的行为变化;活动图则关注过程或系统的控制流。 StarUML5.0.2提供了以下关键特性: 1. **丰富的图表绘制**:用户可以通过直观的界面创建各种UML图表,包括但不限于用例图、类图、...

    Lua 5.0.2 脚本语言

    Lua 5.0.2 是一种轻量级的脚本语言,因其简洁的语法和高效性能而被广泛应用于各种领域,包括游戏开发、嵌入式系统以及与编程语言的集成,如在DELPHI程序中的应用。Lua的设计目标是提供一个易学易用、灵活且高效的...

    spring-framework-5.0.2.RELEASE-dist.zip

    5.0版本增强了配置元数据支持,包括XML、Java注解以及基于Java的配置。 在数据访问层,Spring Framework 5.0.2.RELEASE改进了对JDBC、JPA、Hibernate等ORM框架的支持。它提供了更丰富的模板类,简化了数据库操作。...

    Safari 5.0.2 part2

    Safari 5.0.2 part2 Safari 5.0.2 part2

    Elasticsearch-5.0.2

    在 5.0.2 中,Elasticsearch 引入了更强大的数据流处理能力,包括实时分析和聚合,使得用户可以在数据被索引的同时进行复杂的数据分析,为实时监控和业务洞察提供了可能。 ### 6. 性能提升 此版本对内存管理、...

Global site tag (gtag.js) - Google Analytics