Apache Click 介绍

来源:互联网 发布:淘宝新手怎么找货源 编辑:程序博客网 时间:2024/05/13 13:38

为什么是要Click


在这里我将介绍一下Click背后设计思想和原理,希望能解释为什么要重建一个JAVA的WEB应用框架。
Click是一个最新式的JEE的WEB应用框架,提供了一个丰富客户端风格的程序模型。包括以下的关键功能:
1. 入门简单
Click是设计时就考虑如何简单且易学,所以新手可以在一天内就可以上手了。这点对商业开发的团队很重要的。所以,Click提供了大量的例子和文档。
2. 面向组件与页面的设计
如果用Swing、 VB或Delphi做过传统界面程序,你会发现在JEE中没有如此的快速开发环境。JEE的开发是比较慢的、复杂的、容易出错的。
第一代的WEB应用框架Struts,提供一个基于Command的设计模式和一套JSP的标签库。Struts需要你将URLs映射到Actions上面,并且要使用ActionForms来传递数据。这样的话,并不能给你很好的效率。Tapestry是第一个基于组件的JEE的WEB应用框架,带来了一套组件继承、页面、基于事件的编程模型。这是一个高效的开发模型,也是能开发出我们期望的GUI界面。
Click也是采纳了基于组件设计的方法,而且进行了优化,从而更加易用。它提供了一个面向页面的设计模式、基于组件与事件的编程模型。Click包括了40多个开盒即用的组件,对应了HTML中主要的元素。这样使得编程很简单了。Click的 Forms与组件提供了自动化的验证和展现,使得FORM的开发快速且健壮。
3. 自由的JSP&MVC
MVC是一个桌面GUI的设计模式,它在设计中引入多外角以,MODEL是数据模型,VIEW是展现模型,完成数据的展现,CONTROL是控制数据的修改。现在MVC是非常成熟的UI模式,用于解决那些单一数据模型与控制、多展现视图的问题。
但是对大多数的UI开发,MVC是过度设计的。CONTROL与VIEW通常是指同一东西。例如:选择框是一个集VIEW、CONTROL、MODEL与一体的东西。在SWING的设计中MVC通常隐藏在表现层下面。在VB、DELPHI中就根本没有提过MVC。在以前,JEE的非常期望一套WEB设计模式。MVC在早期的Servlet/JSP 设计中使用了,并且称之为MVC。在以前的模式中DAO是被用作MODEL,JSP作为VIEW,SERVLET被用作CONTROL。这样UI中的角色被严格地分开了,也限制了设计思想的改进。
CLICK是的组件是集合VIEW与CONTROL的功能。下面我们用ActionLink组件来解释了一下这两者之间的区别。
public class ExamplePage extends Page {

    @Bindable public ActionLink myLink = new ActionLink(this, "onClick");
   
    public boolean onClick() {
        System.out.println("onClick invoked");
        return true;
    }
}
我们将myLink的ActionLink组件放入HTML的页面模板中:
<a href="$myLink.href">Click Me</a>
在运行时,组件的Href的属性值表现为:
<a href="/mycorp/example-page.htm?actionLink=myLink">Click Me</a>
If the user clicks the link, the ActionLink control invokes the Page's onClick() method.
当前用点击这个链接时,ActionLink的组件将会调用页面上的OnClick()方法。
Conversely with the JSP MVC architecture a JSP can tell you something, but it can't understand what it has just said. Think about this for a second. There is no single UI component that is taking responsibility for its own actions. Guess where the responsibility then falls to...
与JSP MVC的架构对比,JSP可以告诉你一些信息,但是它不是如何处理这些信息。仔细思考一下,没有发现UI组件可以负责处理他自己的行为,那么应由谁来负责处理呢?那么你要将多个东西组合起来才能处理这个动作。在STRUTS中,你就要完成以下工作:
· 编写一个自定义的ACTION类
· 编写一个自定义的ACTIONFORM类
· 在struts-config.xml 文件中配置一个ACTION
· 在struts-config.xml 文件中配置一个FORM-BEAN
· 在validation.xml 中配置一个FORM元素
· 在validation.xml 中配置字段的验证规则
· 检查所有的配置是否正确: action, form-bean, form, field
· 在JSP中设置要用到的tag Lib
· 在JSP使用 <htm:form> and <html>
这样在开发大型应用系统时,就会变得很庞大、单调、易出错的任务。
在MVC设计的另一个方面,就是将逻辑从JAVA代码转换成了XML配置文件。Tapestry 与 Spring MVC也扩展地使用了XML。这样将导致编译时应发现的错误延期到运行时才发现了。而且,管理一大堆XML配置文件要比管理一大堆JAVA代码困难的多。JAVA IDE的工具可比XML的管理工具好用的。
Click也可以让你使用面向对象的原则,比如:用继承的方法来扩展其它组件,或者聚合多个组件变成一个更强大的UI组件。例:CreditCardField是继承TextField的,并且有一个选择框来指定卡片的类型。
4.  Velocity
Click使用Velocity的模板引擎来绘制HTML,Velocity有一套简洁的指令集,非常易学易用。例如下面的模板中:
#if (!$session.order.lineItems.empty)
<table>
  <tr>
    <th>Name</th> <th>Quantity</th> <th>Total Price</th>
  </tr>
  #foreach ($lineItem in $session.order.lineItems)
  <tr>
    <td>$lineItem.name</td>
    <td>$lineItem.quantity</td>  
    <td>$lineItem.totalPrice</td>  
  </tr>
  #end
</table>
#else
  No items have been ordered.
#end
正是因为Velocity的易用性,Click才选择了Velocity,也实现了Velocity的自动化配置。当然Click是基于可插拔式的,也可以使用Freemaker或者JSPs来做为展现层的。

原创粉丝点击