`
congpeixue
  • 浏览: 274805 次
  • 性别: Icon_minigender_1
  • 来自: ...
社区版块
存档分类
最新评论

Click framework 导言(一)

阅读更多
Click 是一个简单的商用JEE web程序框架,项目在遵从Apache license. 的
前提下开源。
Click 使用一个基于programming model 的事件来处理servlet请求。
使用Velocity来呈现页面。(其他的模板引擎如jsp和Freemarker也被支持)

此框架使用了一个单独的名为ClickServlet的servlet,来作为请求分发器。
当一个请求到来的时候,ClickServlet生成一个Page对象来处理请求并
使用Velocity模板来呈现结果 。
Pages 为每个servlet请求生成一个新的page实例,以此来
提供了一个简单的线程安全的设计环境,

可能的最好的学习Click如何工作的方式是练习一些例子。

Hello World - 经典的Hello World例子
Control Listener - 一个ActionLink控件监听器例子
Simple Table - 一个简单的Table控件例子
Advanced Table - 一个高级的Table控件例子
Simple Form - 一个简单的表单例子
Advanced Form - 一个复杂的表单例子


Hello World


一个使用Click的Hello World 例子如下所示
首先我们新建一个HelloWorld类
package examples.page;

import java.util.Date;
import net.sf.click.Page;

public HelloWorld extends Page {

    public Date time = new Date();

} 


建立一个page模板 hello-world.htm
<html>
  <body>
  
    <h2>Hello World</h2>
    
    Hello world from Click at $time
    
  </body>
</html> 


最后建立一个click.xml配置文件,使用它来告诉Click将对
hello-world.htm 的请求映射到我们的HelloWorld类。

<click-app>  
  <pages package="examples.page"/> 
</click-app> 


在运行期间,ClickSerlvet 映射一个Get请求hello-world.htm 到
我们的page类example.page.HelloWorld , 并生成一个新的实例。
HelloWorld 生成一个新的public类型的Date对象, 并使用字段time
自动地将该对象添加到页面模型中。
页面模型使用Date对象替换掉模板中的$time , Velocity呈现模板页面
如下:
引用
Hello World
Hello world from Click at Tue May 08 19:37:05 EST 2007


Control Listener


Click包含一系列提供用户接口功能的控件。
ActionLink就是被广泛使用的其中之一, 你可以使用它在
一个Page对象中使一个链接调用一个方法。例如:
public class ControlListenerPage extends Page {

    public ActionLink myLink = new ActionLink();

    public String msg;
    
    // ----------------------------------------------------------- Constructors

    /**
     * 生成一个新的Page实例
     */
    public ControlListenerPage() {
        myLink.setListener(this, "onMyLinkClick");
    }
    
    // --------------------------------------------------------- Event Handlers

    /**
     * 处理 the myLink 控件点击事件
     */
    public boolean onMyLinkClick() {
        msg = "ControlListenerPage#" + hashCode()
            + " object method <tt>onMyLinkClick()</tt> invoked.";

        return true;
    }
}


在这个Page类里我们生成了一个名为myLink 的ActionLink并定义
对应本页面的控件的监听器方法onMyLinkClick(),
当用户点击了MyLink控件,它将执行监听器方法onMyLinkClick()。

在Click中, 一个监听器方法可以起任何名字但必须返回一个布尔值。
该布尔值指定了下面的处理是否还要继续。

回到我们的例子中,在page模板中, 我们定义了一个HTML链接,

<html>
  <head>
    <link type="text/css" rel="stylesheet" href="style.css"></link>
  </head>
  <body>
  
  Click myLink control <a href="$myLink.href">here</a>.

  #if ($msg)
    <div id="msgDiv"> $msg </div>
  #end

  </body>
</html>


在运行期间此页面将被呈现如下:
引用
Click myLink control here.



当用户点击了link, onMyLinkClick()将被调用。 此方法生成了一个
msg模型值, 呈现如下:
引用
Click myLink control here.
ControlListenerPage#12767107 object method onMyLinkClick() invoked.


Simple Table Example

Table控件是最常使用的控件之一。
在客户端页面中使用Table控件的一个例子如下:
public class SimpleTablePage extends Page {

    public Table table = new Table();

    // ------------------------------------------------------------ Constructor
     
    public SimpleTablePage() {
        table.setClass(Table.CLASS_ITS);
        
        table.addColumn(new Column("id"));
        table.addColumn(new Column("name"));
        table.addColumn(new Column("email"));
        table.addColumn(new Column("investments"));
    }
    
    // --------------------------------------------------------- Event Handlers
     
    /**
     * @see Page#onRender()
     */
    public void onRender() {
    	List list = getCustomerService().getCustomersSortedByName(10);
    	table.setRowList(list);
    }
}


在此例子中, 一个Table控件被生成,我们设置了表格的html类,并
定义了一些列对象。在这些列定义中,我们在其构造方法中指定了
列的名字。
最后做的事情是使用数据来组装表格。 我们只需覆写Page的onRender()
方法并在表格显示前设置表格的列表。

在我们的页面模板中, 我们简单的引用了$table对象,当其toString()方法
被调用的时候,$table被呈现在页面上。
<html>
<head>
$cssImports
</head>
<body>
  
$table
    
</body>
</html> 
$jsImports


在上面我们指定了$cssImports 引用, 以便表格在头部可以包含
css样式。同时我们在底部也定义了$jsImports来引用scripts 。

在运行期间, 表格将被呈现如下:


Advanced Table Example
Table控件还提供如下支持:
自动呈现
列格式化
自动分页
链接支持

一个更高级的Table例子如下:
public class CustomerPage extends Page {

    public Table table = new Table();
    public PageLink editLink = new PageLink("Edit", EditCustomer.class);
    public ActionLink deleteLink = new ActionLink("Delete", this, "onDeleteClick");

    // ------------------------------------- Constructor
     
    public CustomersPage() {
        table.setClass(Table.CLASS_ITS);
        table.setPageSize(10);
        table.setShowBanner(true);
        table.setSortable(true);
    	
        table.addColumn(new Column("id"));

        table.addColumn(new Column("name"));
        
        Column column = new Column("email");
        column.setAutolink(true);
        column.setTitleProperty("name");
        table.addColumn(column);
        
        table.addColumn(new Column("investments"));
        
        editLink.setImageSrc("/images/window-edit.png");
        editLink.setTitle("Edit customer details");
        editLink.setParameter("referrer", "/introduction/advanced-table.htm");
        
        deleteLink.setImageSrc("/images/window-delete.png");
        deleteLink.setTitle("Delete customer record");
        deleteLink.setAttribute("onclick", "return window.confirm('Are you sure you want to delete this record?');");
    	
        column = new Column("Action");
        column.setTextAlign("center");
        AbstractLink[] links = new AbstractLink[] { editLink, deleteLink };
        column.setDecorator(new LinkDecorator(table, links, "id"));
        column.setSortable(false);
        table.addColumn(column);
    }
    
    // ---------------------------------- Event Handlers
         
    /**
     * Handle the delete row click event.
     */    
    public boolean onDeleteClick() {
        Integer id = deleteLink.getValueInteger();
        getCustomerService().deleteCustomer(id);
        return true;
    }
    
    /**
     * @see Page#onRender()
     */
    public void onRender() {
    	List list = getCustomerService().getCustomersByName();
    	table.setRowList(list);
    }
} 


在这个Page代码中,一个Table控件被声明并添加了一些Columns对象。一个
名为 deleteLink的 ActionLink被用做“Action”列的装饰器。当此控件被点击的时候
将执行onDeleteClick()方法。最后,当页面被显示的时候,调用onRender()方法
来使Table控件和列完成组装。
在我们的页面模板中我们简单引用 $table对象 , 当它的toString()方法被调用时,
$table对象被呈现出来。

<html>
<head>
$cssImports
</head>
<body>
  
$table
    
</body>
</html>
$jsImports 


在运行期间,表格将被呈现的页面如下:

在这个例子中,如果用户点击了Delete链接, onDeleteClick()方法将被调用来
删除用户列。

(续)
  • 大小: 22.4 KB
  • 大小: 14.7 KB
分享到:
评论
3 楼 啤酒泡泡 2010-02-23  
http://click.sourceforge.net/docs/introduction.html#advanced-form
2 楼 congpeixue 2008-07-29  
Tapestry 5 我还没用过 , 有空去看下
1 楼 rrrrutdk 2008-07-29  
这个不就是有点模仿Tapestry么?
它有一个极大的缺陷:页面的呈现完几乎使用java代码实现。只不过使用类与对象表现HTML内容,也只不过是把请求包装成了事件而已。

完全不能与 Tapestry 5 相比。

相关推荐

    Click framework 快速入门指南

    Click框架是一个轻量级、模块化的Java Web开发框架,它提供了简单易用的API,使得开发者可以快速构建高效、可维护的Web应用。本指南将帮助你了解Click的基本概念,以及如何使用它来创建一个简单的Web应用。 首先,...

    click-book apache click framework介绍

    ### Apache Click Framework 介绍 #### 一、简介 Apache Click 是一个用于开发 Web 应用程序的 Java 框架,旨在提供一个简洁且高效的 API 来构建动态 Web 页面。Click 的设计目标是减少开发时间并提高代码的可读性...

    .NetFrameWork虚拟器无需打包Framework

    ClickOnce则是一种Windows上的应用程序部署技术,它可以自动处理.NET Framework的依赖,确保目标机器上有正确的版本。 压缩包子文件"doNetVM"可能是一个工具或者库,用于帮助开发者实现这一目标,即创建不包含完整...

    部署 ClickOnce 应用程序 winform

    点击一次(ClickOnce)是 .NET Framework 中的一种应用程序部署技术,它允许开发者将应用程序部署到客户端计算机上,并且可以自动更新应用程序。下面是 ClickOnce 应用程序部署的相关知识点: 一、ClickOnce 部署...

    RobotFramework中实现PageObject模式的轻量级关键字库_Python_RobotFramework.zip

    Robot Framework是一款广泛应用于自动化测试领域的开源测试框架,它支持关键词驱动测试方法,使得测试脚本易于编写和维护。PageObject模式是一种设计模式,常用于Web应用程序的自动化测试中,将网页或页面作为一个...

    .NET Framework 2.0

    Microsoft .NET Framework 版可再发行组件包将安装运行针对 .NET Framework 2.0 版开发的...”如果您要使用非英语的平台或要以另一种语言查看 .NET Framework 资源,则必须下载相应语言版本的 .NET Framework 语言包。

    深度挖掘.NET Framework 2.0系列课程-(1)Click-Once 安装技术

    在.NET Framework 2.0时代,微软引入了一项创新的部署技术——Click-Once,它为开发者提供了一种简单而安全的方式,使得应用程序可以被用户轻松地安装和更新。Click-Once技术的核心理念是实现“一次点击,全程自动”...

    Click Framework-开源

    Click Framework是一个易于学习和使用的J2EE Web应用程序框架。 Click是为商业Java团队开发的Web应用程序而设计的。 使用Click,开发人员应该能够在一天内启动并运行。

    robotframework-selenium2library-3.0.0.tar.gz

    例如,可以使用"Open Browser"关键字打开一个网页,"Input Text"来输入表单数据,"Click Element"进行点击操作,"Should Be Equal As Strings"进行断言,确保预期的结果与实际结果相符。 总的来说,"robotframework...

    microsoft net compact framework

    微软.NET Compact Framework是微软公司为嵌入式设备和移动设备开发的一款框架,它允许开发者在这些平台上构建和运行.NET应用程序。这个框架是.NET Framework的一个精简版本,针对资源有限的设备进行了优化,如...

    .net framework4.0环境

    .NET Framework 4.0是微软开发的一个重要软件开发平台,用于构建、运行各种类型的应用程序。这个框架提供了丰富的类库,使得开发者可以使用C#、VB.NET、C++等编程语言进行高效编码。以下是关于.NET Framework 4.0的...

    net framework 2.0.rar

    在部署和配置方面,.NET Framework 2.0引入了ClickOnce技术,它允许应用程序的快速部署和自动更新,降低了用户的安装和升级成本。 文件列表中的"1.pptx"可能包含与.NET Framework 2.0相关的讲座或教程材料,而...

    Microsoft.NETFramework2

    【Microsoft .NET Framework 2.0】是微软公司推出的一款重要的软件开发框架,它为开发者提供了构建、部署和运行各种Windows应用程序所需的环境。这个框架在2005年发布,是.NET Framework系列的一个里程碑,为许多...

    Click_me.zip_ML2_clickme如何进入_r 18.click me_安卓

    标题中的"Click_me.zip_ML2_clickme如何进入_r 18.click me_安卓" 提到了几个关键元素:首先,“Click_me”可能是一个应用程序的名字,它可能是安卓平台上的一个软件。"ML2"可能指的是某种特定的版本或者功能模块,...

    .NET Framework 2.0 Configuration配置安装程序

    6. **部署与更新**:.NET Framework 2.0支持ClickOnce部署,这是一种简化应用程序部署的机制,可以自动处理版本更新和依赖项检查。同时,Windows Installer MSI包(如Project.msi)可以用于分发和安装.NET Framework...

    RobotFramework-Selenium2Library

    Robot Framework是一个通用的自动化框架,它支持各种测试和任务自动化,而Selenium2Library是Robot Framework中的一个关键库,专门用于Web应用程序的自动化测试。这个库是基于流行的Selenium WebDriver接口,允许...

    RobotFramework 对日历时间滑块的拖拽操作

    最终在RobotFramework框架下找到了一种有效的方法来实现对这种日历控件及其时间滑块的自动化操作。本文将详细介绍这一过程以及具体的实现代码,希望能帮助到有类似需求的同学。 #### 实现原理与步骤 本节将深入...

    robot framework +selenium

    Robot Framework 是一款灵活、易于使用的自动化测试框架,而 Selenium 则是针对 Web 应用程序自动化测试的利器。通过结合两者,可以构建出强大的自动化测试解决方案。 #### 二、Selenium Library 的安装 为了实现 ...

    robotframework-selenium2library-1.5.0

    Robot Framework Selenium2Library 1.5.0 是一个专门针对Web自动化测试的强大的库,它构建于Robot Framework之上,提供了一套简洁而易用的接口,使得测试人员能够高效地编写自动化测试用例。Robot Framework 是一个...

Global site tag (gtag.js) - Google Analytics