`
yesjavame
  • 浏览: 688185 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

IoVC实例分析:Hello Duke!

阅读更多

IoVC实例分析:Hello Duke!

张勇

1.概述

本文用一个非常简单的例子“helloDuke",介绍 IoVC 编程模型的一种实际场景。在阅读本文前,建议您首先阅读这两篇文章:

Hello Duke!

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

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

2.应用的开发

2.1.greeting.xhtml

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

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<f:view>
<h:form>
<h2>Hello, my name is Duke. What is yours?</h2>
<h:graphicImage url="duke.gif"></h:graphicImage>
<h:outputText value="#{userBean.result}"/><br>
<h:inputText value="#{userBean.name}"></h:inputText>
<h:commandButton value="sayHello" action="#{userBean.sayHello}"/>
</h:form>
</f:view>

那么,在AOM 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="/articles/helloduck-iovc/html_single/duke.gif" />
<h:outputText id="result"></h:outputText><br />
<w:textField id="name"></w:textField>
<w:button id="sayHello" value="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关联起来的呢?

3.后台 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 对应起来的?目前,你可以假设认为:这是通过命名规则获得的,但这部分内容已经超过本文所要介绍的范围, 请允许我在下一篇文章中介绍。

4.Apusic Studio的支持

我们还可以做得更好,那就是 Apusic Studio 给予的全生命周期的开发支持。

那么,Apusic Studio 对 IoVC 又提供了怎样的支持?在这里,我们提出了称为"Smart DblClick"的技术,针对任何控件对其双击,将自动弹出该控件 IoVC 支持的向导,以<w:button>为例,双击的效果如下:

看上去还不错,那么,为何不立即体验一下呢?

5.注意

IoVC的支持仅限于 AOM 2.0 版本,并请注意 Apusic 应用服务器及 Apusic Studio的版本支持。在完成本文结束时,请使用 AOM 2.0 M1,Apusic 应用服务器 5.1 TP5,Apusic Studio 5.1 M5 版本。

分享到:
评论

相关推荐

    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

    多媒体的duke算法

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

    Probability: Theory and Examples Rick Durrett, Duke U.

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

    Probabilistic Machine Learning (Duke STA561)

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

Global site tag (gtag.js) - Google Analytics