`
apusiczhang
  • 浏览: 16932 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

IoVC实例分析:Hello Duke!

阅读更多

本文用一个非常简单的例子“helloDuke",介绍IoVC编程模型的一种实际场景。

 

在IoVC编程模型下的HelloDuke版本,功能没做任何增减,依然如下图所示:

 

 

但由于在程序中用到了IoVC思想,及facelets技术,因此,整个程序的目录结构更改如下:

 

helloDuke
  --duke.gif
  --greeting.xhtml
  --sameName.xhtml
  --WEB-INF
      --web.xml
      --faces-config.xml
      --operamasks.xml
      --classes
        --helloduke
          --GreetingBean.class

 

下面就让我们来完成此应用。

 

 

首先,我们来看一下老版本的greeting.jsp是怎样的:

 

 

那么,在AOM 2.0(即Apusic OperaMasks 2.0)版本下,并且在IoVC编程思想下,greeting.xhtml又是怎样的呢?

 

<f:view xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
  xmlns:w="http://www.apusic.com/jsf/widget" xmlns:layout="http://www.apusic.com/jsf/layout"
  renderKitId="AJAX" xmlns:h="http://java.sun.com/jsf/html">
  <w:page title="helloDuke">
    <w:form>
      <h2>Hello, my name is Duke. What is yours?</h2>
      <img src="duke.gif" />
      <hutputText id="result"/><br/>
      <w:textField id="name"/>
      <w:button id="sayHello" />
    </w:form>
  </w:page>
</f:view>

  

 

我们的注意力不要被<w:>还是<h:>所影响,我们先假设这两者都是等价的。我们主要观察<h:outputText>、<w:textField> 以及<w:button> 这三个主要UI控件的写法。我们可以看到,在新版本中,<h:outputText> 和<w:textField>并没有指定value,而<w:button>也没有指定action,但这三者都有不同的id,并且,整个页面全部都是展现层相关信息,没有任何代码片断或 EL 表达式的引入。

 

那么,这三者的值以及动作事件,又是怎样和后台的JavaBean关联起来的呢?

 

首先,我们也是先熟悉一下老版本中的UserBean(在新版本中,它的名称改为GreetingBean)。

 

package helloduke;
public class UserBean {
private String name;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getResult() {
    if(this.name == null || "".equals(name.trim())) return "Please input your name.";
     else return "Hello " + name;
  }
  public Object sayHello() {
    if("duke".equalsIgnoreCase(name)) return "duke";
    return null;
  }
}

 

那么,在新版本中,上述逻辑变成怎样的呢?如下所示:

 

package helloduke;
@ManagedBean(name="GreetingBean", scope=ManagedBeanScope.SESSION)
public class GreetingBean {
  @Bind(id="result")
  private String result;
  @Bind(id="name")
  private String name;
  @Action(id="sayHello")
  public Object sayHello(){
    if("duke".equalsIgnoreCase(name)) return "/sameName.xhtml";    return null;
  }
  @BeforeRender
  private void settingValues(boolean isPostBack){
    if(this.name == null || "".equals(name.trim())) {
         result = "Please input your name.";
     }
    else {
      result = "Hello " + name;
     }
  }
}

 

我们可以观察到,在result属性上,有一个@Bind(id="result")的annotation声明;同样,在name上,也有@Bind(id="name") 的声明,而在sayHello方法上,则有@Action(id="sayHello") 的声明。至此,我们恍然大悟:通过这样一些声明,<h:outputText>的值自动和result属性关联,<w:textField>的值自动和name属性关联,而<w:button> 的Action事件,则和sayHello方法关联。

 

等一下,这里有个问题:针对result属性和name属性,在AOM 2.0下,连setter/getter方法都没有?是的,完全可以忽略。

 

那么,result的值是在哪里设置的?请注意settingValues方法,它有一个@BeforeRender的声明,意思就是说:当页面在渲染前,请调用此方法。这就相当于一个回调函数,因此,对result属性的设置,我们就可以在此处进行处理。

 

好像一切都很完美,但是,还有一个问题,greeting.xhtml页面,是怎样和GreetingBean对应起来的?目前,你可以假设认为:这是通过命名规则获得的,但这部分内容已经超过本文所要介绍的范围, 请允许我在下一篇文章中介绍。

 

评论
8 楼 Joo 2008-06-02  
广告都做到这里来了阿呵呵
有空可以看看我的
http://www.iteye.com/topic/199389
7 楼 cloudxman 2008-03-28  
可能很多人还不知道,国产Apusic应用服务器不知不觉在国内已经占据10%以上市场份额,仅次于IBM Webshpere和BEA的 Weblogic。
Kingdee没有IBM和BEA那么强势,会在JDK层次做自己产品的功能扩展,所以Apuisc在对J2EE标准的实现上更加中规中矩,完全符合最新的J2EE 5.0标准,保持最大的兼容性。
Apusic 可以自由下载用用,比Tomcat稍大,启动速度也跟Tomcat差不多,配置较简单,但是是支持J2EE 5.0的完整实现。有对EJB3.0和JSF感兴趣的朋友强烈推荐用用。
6 楼 cloudxman 2008-03-28  
可能很多人还不知道,国产Apusic应用服务器不知不觉在国内已经占据10%以上市场份额,仅次于IBM Webshpere和BEA的 Weblogic。
Kingdee没有IBM和BEA那么强势,会在JDK层次做自己产品的功能扩展,所以Apuisc在对J2EE标准的实现上更加中规中矩,完全符合最新的J2EE 5.0标准,保持最大的兼容性。
Apusic 可以自由下载用用,比Tomcat稍大,启动速度也跟Tomcat差不多,配置较简单,但是是支持J2EE 5.0的完整实现。有对EJB3.0和JSF感兴趣的朋友强烈推荐用用。
5 楼 galaxystar 2008-03-27  
apusic收费吗
4 楼 yananay 2008-03-27  
下载了最新的,用ide运行的时候,出现这个错误:

008-03-27 17:22:07 ERROR [apusic.web.helloduke./helloduke] ?行Servlet??生??。
com.sun.facelets.FaceletException: Error Parsing /greeting.xhtml: Error Traced[line: 10] The prefix "h" for element "h:outputText" is not bound.

3 楼 quaff 2008-03-27  
难道Duke是指陈登*?
2 楼 yananay 2008-03-27  
引用

需要注意的是,AOM有些特性是依赖应用服务器底层支持的,譬如,将一个 EJB3 对象自动转换成一个 ManagedBean,并能够在EJB对象中进行视图的绑定,这需要对应用服务器的实现进行适当的调整。针对这样一些高级特性, 无疑需要更改应用服务器的代码。 我们从不否认AOM是由金蝶中间件公司力推的技术,那么,在这样一些高级特性上, 也只有Apusic应用服务器能够支持(Apusic应用服务器是金蝶中间件公司的产品,AOM开发团队自然可以影响到 Apusic 应用服务器的发展,但 AOM开发团队目前却无法影响到其它应用服务器的技术特性)。

幸运的是,这些只有Apusic应用服务器才能够支持的高级技术特性并不常见,绝大部分的 AOM 的技术特性,都能够无缝的在各个应用服务器中获得支持。

AOM开发团队的开放心态永远不变!


一个框架为什么要绑定到一个服务器上。。。埃
1 楼 yananay 2008-03-27  
必须使用 Apusic 服务器?对Apusic系列不太了解。。。

相关推荐

    Java EE 7 Tutorial: The Duke's Bookstore

    通过分析和研究Duke's Bookstore的源代码,开发者可以深入理解Java EE 7的架构和设计模式,以及如何将这些技术整合到实际项目中。这不仅有助于提升个人技能,也为团队协作和项目开发打下坚实基础。

    Duke-Gizmo.github.io:史诗青蛙!

    史诗青蛙游戏 箭头键移动玩家船 你有3条生命,不要击中任何敌舰! 拿起盾牌可以保护玩家船免受敌船的伤害。 每次玩家到达另一边并随后返回时,敌人会变得更快,而更多的敌人会慢慢添加。 当玩家返回时,另一个...

    基于Java的实例源码-重复数据删除 Duke.zip

    本实例源码“基于Java的实例源码-重复数据删除 Duke.zip”提供了一个使用Java语言实现的解决方案,名为Duke。Duke是一个开源的数据清洗工具,特别设计用于检测和删除数据集中的重复记录。 Duke的核心功能是通过比较...

    重复数据删除工具 Duke

    4. **查看结果**:分析 Duke 生成的输出报告,确认重复记录并采取相应行动。 ### 功能特性 - **灵活的比较规则**:Duke 支持多种比较策略,如全匹配、模糊匹配和基于分段的比较。 - **多种数据源支持**:可以处理...

    duke:Duke项目的入门代码

    公爵项目模板这是未开发的Java项目的项目模板。 它以Java吉祥物Duke命名。 下面给出了有关如何使用它的说明。... 如果设置正确,您应该看到类似以下的内容: Hello from ____ _ | _ \ _ _| | _____ | | | |

    duke200_ktmduke_duke_

    标题中的"duke200_ktmduke_duke_"暗示了我们正在讨论的是KTM公司的Duke 200摩托车。这款车型以其强大的性能和轻量化的车身设计在摩托车爱好者中享有盛誉。KTM Duke 200是一款200cc级别的街车,以其紧凑的尺寸、卓越...

    java源码:重复数据删除 Duke.zip

    这个名为"java源码:重复数据删除 Duke.zip"的压缩包提供了一种经典的方法来解决这个问题。Duke项目,版本0.6,是一个用于数据清洗和去重的开源工具,它在数据科学和大数据处理中具有广泛的应用。 Duke的核心功能是...

    Duke

    【Duke字体详解】 在IT领域,字体设计是视觉传达中的关键元素,它不仅影响着信息的可读性,还对整体设计风格和用户体验产生深远影响。"Duke"是一款独特的字体,它以其特殊的风格和设计特点,在众多字体中脱颖而出。...

    DukeViewer:Duke Nukem 3D地图查看器-开源

    《DukeViewer:深入探索Duke Nukem 3D地图查看器的开源世界》 DukeViewer,一个专为游戏爱好者打造的Windows应用程序,它为玩家提供了深度探索经典第一人称射击游戏Duke Nukem 3D地图的可能。这款工具允许用户在...

    台湾P-DUKE(博大)电源产品资料.rar

    台湾P-DUKE,又名博大电源,是一家在电源解决方案领域有着深厚技术积累和丰富经验的公司。该公司主要专注于研发、生产和销售各种类型的电源产品,包括但不限于工业级电源、服务器电源、通信电源以及定制化的电源解决...

    基于java的重复数据删除 Duke.zip

    在数据库或数据仓库中,重复数据可能导致不必要的存储开销,影响查询性能,并可能产生不准确的分析结果。因此,通过算法来检测和消除这些重复记录是必要的。 Duke项目的核心是其匹配引擎。这个引擎采用规则和相似度...

    Android框架_Duke

    2. **Profiling**:使用Android Studio的性能分析工具,监控CPU、内存、网络等性能。 3. **懒加载和按需加载**:优化UI显示和数据加载速度。 九、安全实践 1. **加密通信**:使用HTTPS确保网络通信安全。 2. **...

    selfstudy:docs..duke ..

    3. **Duke应用**:通过实例展示如何使用Duke进行数据导入、清洗、分析和可视化。 4. **案例研究**:可能包含一些实际问题的解决过程,展示Duke在实际项目中的应用。 5. **进阶主题**:可能涉及更复杂的技术,如...

    fastscan duke大学教程

    根据给定的文件信息,以下是对“fastscan Duke大学教程”的详细解读,涵盖其关键知识点、操作流程以及实例分析。 ### fastscan教程概览 **fastscan**是Mentor Graphics公司开发的一款自动测试模式生成工具...

    基于java的开发源码-重复数据删除 Duke.zip

    在IT领域,尤其是在软件开发中,重复数据删除是一项重要的任务,它涉及到数据库管理、数据存储优化和...通过对Duke的源码进行分析和实验,开发者不仅可以提升自己的技术能力,还能更好地应对实际项目中遇到的类似问题。

    J2EETutorial(包括duke在线银行实例)

    **J2EE教程——Duke在线银行实例** J2EE(Java 2 Platform, Enterprise Edition)是Java平台上的企业级应用开发框架,它为构建分布式、多层的企业级应用程序提供了全面的规范和技术支持。Sun Microsystems(现在已...

    Duke+Resume+Template.doc

    Duke+Resume+Template.doc

    Probability: Theory and Examples Rick Durrett, Duke U.

    ### 概率论:理论与实例 #### 一、概览 《概率论:理论与实例》是由杜克大学的瑞克·杜雷特(Rick Durrett)编著的一本经典教材。该书旨在为读者提供概率论的理论基础,并通过丰富的例子来加深理解。在1989年第一...

    多媒体的duke算法

    多媒体的Duke算法是一种在海量多媒体数据中进行相似性检测的有效方法,特别是在图像、音频和视频分析领域。这个算法主要用于解决“重复数据检测”(Duplicate Detection)问题,即找出数据库中内容相同或高度相似的...

    Probabilistic Machine Learning (Duke STA561)

    该课程由Sayan Mukherjee教授讲授,其电子邮件地址为sayan@stat.duke.edu。本课程材料最后更新于2015年11月19日,并受美国数学学会版权所有。 #### 课程目标与定义 在课程介绍中,Mukherjee教授首先回顾了机器学习...

Global site tag (gtag.js) - Google Analytics