Wicket

維基百科,自由的百科全書
跳至導覽 跳至搜尋
Apache Wicket
開發者Apache軟件基金會
當前版本7.4.0(2016年7月21日 (2016-07-21)[1]
原始碼庫
  • {{URL|example.com|可选的显示文本}}
Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
編程語言Java
引擎
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    作業系統跨平台Java虛擬機
    類型Web應用框架
    許可協議Apache許可證2.0
    網站wicket.apache.org

    Apache Wicket,通常稱為Wicket,是一種輕量級的基於組件的Java Web應用框架,其概念類似於JavaServer FacesTapestry。它最初由喬納森·洛克在2004年4月編寫。2005年6月發佈1.0版。2007年6月,它成功成為Apache頂級項目。[2]

    基本原理[編輯]

    傳統的MVC框架依據整個請求和整個網頁來工作。在每個請求周期內,輸入請求被映射到一個控制器對象的一個方法上,然後控制器產生全部的輸出響應,通常是從一個模型拉出數據,並填入一個由特殊的模板標記寫成的視圖。這種方式保證了應用的控制流簡單清晰,但會導致控制器的代碼很難被復用

    與此相反,Wicket儘量模仿有狀態GUI框架,如Swing. Wicket應用像一棵組件的樹,其使用監聽器委託來響應基於連結和表單的HTTP請求,並使用類似Swing組件的方式來響應鼠標和鍵盤事件。Wicket被歸類為一個基於組件的框架。

    設計[編輯]

    Wicket使用簡單的XHTML作為模板(其強制將展示和業務邏輯進行明確的分離,並允許使用傳統的所見即所得設計工具來編輯模板[3])。每個組件對應於XHTML中一個命名的元素,並負責在最後的輸出中渲染該元素。網頁僅僅是頂級的組件容器,並匹配一個XHTML模板。使用一個特殊標籤,一組獨立的組件可以抽象成一個單獨的組件——面板,然後面板就可以作為一個整體,在該網頁,其它網頁,甚至其它面板重複使用。

    每個組件由它自己的模型支持,由模型來表現組件的狀態。該框架並沒有說明組件如何與它們的模型交互,它被視為黑箱,並會在請求間自動序列化持久化。更加複雜的模型,甚至可以做成可拆分的,並提供鈎子英語Software hook在每一個請求周期的開始和結束來安排自己的存儲和恢復。Wicket並沒有特定的對象持久化或ORM層,所以應用通常結合Hibernate對象、EJBPOJO作為模型使用。

    在Wicket中,所有伺服器端狀態都是自動管理的。永遠不要直接使用HttpSession或類似的對象來存儲狀態,而要讓狀態關聯到組件上。每個伺服器端頁面組件擁有一個有狀態組件的內嵌層級,在那裏每個組件的模型最終是一個POJO。

    Wicket一切從簡。Wicket沒有配置文件需要學習。Wicket是一個對組件結構有一致方法的簡單類庫。

    舉例[編輯]

    一個Hello World Wicket應用有四個文件:

    HelloWorld.html
    XHTML模板。
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
            "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" 
            xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd"
            xml:lang="en" lang="en">
    <body>
        <span wicket:id="message" id="message">消息放在这里</span>
    </body>
    </html>
    
    HelloWorld.java
    將與模板關聯的頁面組件。而它又結合一個子組件(該標籤組件名為「message」)。
    package org.wikipedia.wicket;
    
    import org.apache.wicket.markup.html.WebPage;
    import org.apache.wicket.markup.html.basic.Label;
    
    public class HelloWorld extends WebPage {
        /**
         * Constructor
         */
        public HelloWorld() {
            add(new Label("message", "Hello World!"));
        }
    }
    
    HelloWorldApplication.java
    應用主類,它將首頁的請求導向HelloWorld頁面組件。
    package org.wikipedia.wicket;
    
    import org.apache.wicket.protocol.http.WebApplication;
    
    public class HelloWorldApplication extends WebApplication {
        /**
         * Constructor.
         */
        public HelloWorldApplication() {
        }
    
        /**
         * @see org.apache.wicket.Application#getHomePage()
         */
        public Class getHomePage() {
            return HelloWorld.class;
        }
    }
    
    web.xml
    servlet應用的部署描述符,它安裝Wicket作為默認的servlet處理程序,並安排HelloWorldApplication在啟動時實例化。
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
             xmlns="http://java.sun.com/xml/ns/javaee" 
             xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
                                 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
             id="WebApp_ID" version="2.5">
        <display-name>Wicket Example</display-name>
        <filter>
            <filter-name>HelloWorldApplication</filter-name>
            <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
            <init-param>
                <param-name>applicationClassName</param-name>
                <param-value>org.wikipedia.wicket.HelloWorldApplication</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>HelloWorldApplication</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    </web-app>
    

    組件[編輯]

    版本[編輯]

    版本號 日期 說明
    1.3.7 2009-07-30 [4]
    1.4 2009-07-30 「……我們開始告別Java 1.4,並要求使用Java 5作為最低JDK版本。通過使用Java 5作為所需的最低平台,我們能夠利用Java 5來提高我們API的類型安全性。」[5]
    1.4.1 2009-08-21 [6]
    1.4.9 2010-05-24 「……超過十五處修復和改進」[7]
    1.4.10 2010-08-11 「……超過三十處修復和改進。」[8]
    1.4.16 2011-02-25 「這主要是一個在1.4.x(穩定)分支上發佈的小修正。」[9]
    1.4.17 2011-04-02 「這主要是一個在1.4.x(穩定)分支上發佈的小修正。」[10]
    1.4.18 2011-08-09 「這主要是一個在1.4.x(穩定)分支上發佈的小修正。」[11]
    1.4.19 2011-10-19 「這主要是一個在1.4.x(穩定)分支上發佈的小修正。」[12]
    1.5.0 2011-09-07 「Apache Wicket 1.5已經開發了兩年了,相比以前的版本,它帶來了許多改進。」[13]
    1.5.1 2011-09-29 「……超過40處修復和15處改進。」[14]
    1.5.2 2011-10-24 「……超過25處修復和5處改進。」[15]
    1.5.3 2011-11-14 「……超過40處修復和改進。」[16]
    1.6 2012-09-05 開始集成jQuery,完全基於AJAX請求來控制,改進在瀏覽器的事件註冊,支持大數據集、客戶端JavaScript庫的依賴管理,實驗性地支持websocket
    1.6.3 2013-01-02 jQuery 1.8.2;修正IE7和IE8中的JavaScript錯誤。
    1.6.4 2013-01-14 jQuery 1.8.3、Bootstrap 2.2.2、JSR 303 BeanValidation支持,層級反饋面板

    參見[編輯]

    參考文獻[編輯]

    • Ceregatti Longo, João Sávio. 快速的Apache Wicket 6 1st. Packt出版社英語Packt Publishing. 2013年8月26日: 54 [2016年9月20日]. ISBN 1783280018. (原始內容存檔於2016年3月3日). (英文)
    • Mader, Jochen. Wicket:基于组件和面向对象——另类的Java Web框架 1st. Entwickler. 2012年3月28日: 220. ISBN 3868020810. (德文)
    • Vaynberg, Igor. Apache Wicket食谱 1st. Packt出版社英語Packt Publishing. 2011年5月15日: 312 [2016年9月20日]. ISBN 1-84951-160-8. (原始內容存檔於2014年7月14日). (英文)
    • Dashorst, Martijn; Hillenius, Eelco. Wicket在运转 1st. 曼寧出版社英語Manning Publications. 2008年9月15日: 392 [2016年9月20日]. ISBN 1-932394-98-2. (原始內容存檔於2021年10月3日). {{en}
    • Gurumurthy, Karthik. 专业的Wicket 1st. Apress. 2006年9月7日: 328 [2016年9月20日]. ISBN 1-59059-722-2. (原始內容存檔於2010年12月23日). 

    註釋[編輯]

    1. ^ Apache Wicket——Apache Wicket 7.4.0发布. Wicket.apache.org. [2016-08-19]. (原始內容存檔於2021-05-15). (英文)
    2. ^ Dashorst, Martijn. Wicket在Apache成功孵化. 2007-07-20 [2008-03-07]. (原始內容存檔於2022-09-26). (英文)
    3. ^ Carleton, Daniel. 用Wicket方式进行Java网页开发. DevX. 2007-10-12 [2008-03-07]. (原始內容存檔於2008-03-10). (英文)
    4. ^ Apache Wicket - Apache Wicket 1.3.7标志Wicket 1.3的结束. [2016-09-20]. (原始內容存檔於2011-01-05). (英文)
    5. ^ Apache Wicket - Apache Wicket 1.4使类型安全达到了新高度. [2016-09-20]. (原始內容存檔於2012-04-25). (英文)
    6. ^ Apache Wicket - Wicket 1.4.1发布. [2016-09-20]. (原始內容存檔於2010-09-22). (英文)
    7. ^ Apache Wicket - Wicket 1.4.9发布. [2016-09-20]. (原始內容存檔於2014-10-06). (英文)
    8. ^ Apache Wicket - Wicket 1.4.10发布. [2016-09-20]. (原始內容存檔於2012-04-25). (英文)
    9. ^ Apache Wicket - Wicket 1.4.16发布. [2016-09-20]. (原始內容存檔於2012-04-25). (英文)
    10. ^ Apache Wicket - Wicket 1.4.17发布. [2016-09-20]. (原始內容存檔於2014-10-06). (英文)
    11. ^ Apache Wicket - Wicket 1.4.18发布. [2016-09-20]. (原始內容存檔於2014-10-06). (英文)
    12. ^ Apache Wicket - Wicket 1.4.19发布. [2016-09-20]. (原始內容存檔於2014-10-06). (英文)
    13. ^ Apache Wicket - Apache Wicket发布Wicket 1.5. [2016-09-20]. (原始內容存檔於2014-10-06). (英文)
    14. ^ Apache Wicket - Wicket 1.5.1发布. [2016-09-20]. (原始內容存檔於2014-10-06). (英文)
    15. ^ Apache Wicket - Wicket 1.5.2发布. [2016-09-20]. (原始內容存檔於2011-11-01). (英文)
    16. ^ (标题缺失). [2011年11月16日]. [永久失效連結](英文)

    外部連結[編輯]

    介紹文章[編輯]

    博客[編輯]

    文檔[編輯]

    Module:Authority_control第183行Lua錯誤:attempt to index field 'wikibase' (a nil value)