广

Java编程

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

    java Tapestry4.1.2入门说明教程

    2018-11-02 13:12:45 次阅读 稿源:互联网
    零七广告
    简单介绍
    不必关心链接!不必关心请求(http request)到了哪里!不必关心响应(http response)要转向哪里!Tapestry构建于底层的request-resonse模式,基于Servlet技术,抽象出面向组件开发的模型。Tapestry关心的是:页面、组件、事件、对象、方法、属性!
    安装jar包
    1、
    将Tapestry解压目录下的lib目录中的jar包拷贝到WEB-INF/lib目录。
    并将重复的包删除(commons-logging.jar/javassist.jar/ognl-2.6.11.jar)
    2、
    在web.xml中添加:
    代码如下:

    <servlet>
    <servlet-name>app</servlet-name>
    <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>app</servlet-name>
    <url-pattern>/app</url-pattern>
    </servlet-mapping>

    这是Tapestry的中央控制器。Tapestry页面的显示,所有的请求,都会被发送到这个Servlet上。
    实例1:最简单的Tapestry程序
    在WebRoot下添加Home.html 
    代码如下:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>Insert title here</title>
    </head>
    <body>
    第一个Tapestry程序
    </body>
    </html>

    并访问网址:
    http://localhost:8088/[context path]/app
    结果页面显示Home.html里面的内容。
    这是因为Tapestry总是会包含一个名字叫”Home”的页面,默认情况下就是根路径下的Home.html
    实例2:添加简单的动态内容
    Home.html改为: 
    代码如下:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>Insert title here</title>
    </head>
    <body>
    第一个Tapestry程序
    现在时间是:<span jwcid="@Insert" value="ognl:new java.util.Date()"> </span>
    </body>
    </html>

    重新访问网址:http://localhost:8088/[context path]/app
    在这个页面上,用到了Tapestry的Insert组件(Component)。它带一个参数,通过一个ognl表达式来传递。
    在应用服务器的启动参数中添加:-Dorg.apache.tapestry.disable-caching=true,可以避免每次修改页面模板的时候重启服务器。
    jwc = Java Web Component
    实例3:创建链接,指向某个页面
    代码如下:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>Insert title here</title>
    </head>
    <body>
    第一个Tapestry程序
    现在时间是:<span jwcid="@Insert" value="ognl:new java.util.Date()"></span>
    <p>
    <a href="#" jwcid="@PageLink" page="Home">刷新</a>
    </body>
    </html>

    这次,通过一个PageLink组件,指向Home页面,PageLink组件会自动产生指向Home页面的链接(我们不必关心这个链接!)。
    实例4:简单的计数器
    直到现在为止,我们还没有涉及到java类,但是已经让Tapestry成功运行起来了!该是写点java代码的时候了。我们想要创建一个计数器,每当用户点击“计数器增1”的时候,我们将这个计数器加1,然后在页面上显示出这个结果。
    在传统的请求-响应模式中,我们针对这个问题,需要考虑的是:递交一个请求,创建相应的Action来接收这个请求,并维护计数器的值,然后决定成功转向的页面,将结果显示在页面上。
    在Tapestry中,我们需要考虑的是:在哪个页面处理这个事件,结果如何显示在页面上?
    下面是Home.html
    代码如下:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>Insert title here</title>
    </head>
    <body>
    第一个Tapestry程序
    现在时间是:<span jwcid="@Insert" value="ognl:new java.util.Date()"></span>
    <p>
    <a href="#" jwcid="@PageLink" page="Home">刷新</a>
    <p>
    计数器当前的值是:<span jwcid="@Insert" value="ognl:counter"></span>
    <a href="#" jwcid="@DirectLink" listener="listener:doClick">计数器增1</a>
    </body>
    </html>

    DirectLink指定的listener为:doClick,这将触发一个事件,实际上就是将要调用doClick()方法。
    doClick()方法将要写在哪里?因为现在的页面,其动态数据无法简单获得,所以,必须给当前页面创建一个对应的类,我们的方法将创建在这个类里面。
    代码如下:

    package com.bjsxt.crm.web.tapestry.test;
    import org.apache.tapestry.annotations.Persist;
    import org.apache.tapestry.html.BasePage;
    public abstract class Home extends BasePage {
    @Persist
    public abstract int getCounter();
    public abstract void setCounter(int count);
    public void doClick(){
    int counter = getCounter();
    counter = counter + 1;
    setCounter(counter);
    }
    }

    注意:在这个例子中,类名需定义为Home;listener的名字为doClick,而不是doClick()
    另外,需要在web-inf目录下添加配置文件:app.application 
    代码如下:

    <?xml version="1.0"?>
    <!DOCTYPE application PUBLIC
    "-//Apache Software Foundation//Tapestry Specification 4.0//EN"
    "http://tapestry.apache.org/dtd/Tapestry_4_0.dtd">
    <application>
    <meta key="org.apache.tapestry.page-class-packages" value="com.bjsxt.crm.web.tapestry.test"/>
    </application>

    配置的主要目的是让Tapestry了解如何关联页面和页面类。
    实例5:带一个参数的计数器
    Home.html改为: 
    代码如下:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
    <title>Insert title here</title>
    </head>
    <body>
    第一个Tapestry程序
    现在时间是:<span jwcid="@Insert" value="ognl:new java.util.Date()"></span>
    <p>
    <a href="#" jwcid="@PageLink" page="Home">刷新</a>
    <p>
    计数器当前的值是:<span jwcid="@Insert" value="ognl:counter"></span>
    <a href="#" jwcid="@DirectLink" listener="listener:doClick" parameters="ognl:1">计数器增1</a> <br>
    <a href="#" jwcid="@DirectLink" listener="listener:doClick" parameters="ognl:5">计数器增5</a> <br>
    <a href="#" jwcid="@DirectLink" listener="listener:doClick" parameters="ognl:10">计数器增10</a> <br>
    <a href="#" jwcid="@DirectLink" listener="listener:clearCounter">清空计数器</a>
    </body>
    </html>

    零七网部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与零七网进行文章共享合作。

    零七广告
    零七广告
    零七广告
    零七广告