<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-57  評論-129  文章-0  trackbacks-0
      2007年6月26日
    改寫了一下Java基類,添加了一個計數器。
    用tomcat測試了一下連續若干次請求時創建的對象個數。

    第【148259】個對象
    天哪,服務器啟動開始就是14萬個對象。

    第【148668】個對象
    第【149091】個對象
    第【149211】個對象
    第【149291】個對象
    第【149418】個對象
    第【149541】個對象
    第【149867】個對象
    第【149947】個對象

    回想一下以前人們為丑陋的struts1的單例Action的設計的辯護,真是可笑之極,哈哈哈哈
    posted @ 2008-03-11 11:35 金大為 閱讀(932) | 評論 (4)編輯 收藏

    無意間看到的一片趣文:

    希望有一天能看到文言文版的國外圖書翻譯,真的比較有趣,還有,不懂的時候,也可以順帶看看英文原文,也好順便學學英語,呵呵。

    引:

    Thus spake the master programmer:

    "When you have learned to snatch the error code from the trap frame, it will be time for you to leave."

    師曰:『惑中取錯之日,可出山矣。』

    …..

    全文見:

    http://livecn.huasing.org/tao_of_programming.htm
    posted @ 2007-12-01 15:27 金大為 閱讀(259) | 評論 (0)編輯 收藏
    我一直都想搞一個XML的模板引擎,大凡非xml的模板風格,第一感覺就是那么的不爽。
    可是CommonTemplate例外。

    CommonTemplate處處為程序員考慮周到的漂亮的語法風格,確實非常誘人。
    具體的語法我就不一一列舉了,大家可以到他的官方網站去翻閱。

    挑幾個亮點介紹一下:
    1. for循環的空處理,相信曾經麻煩了不少程序員吧。

      現在好了,CT支持如下語法:
         $for{}
         <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
         </tr>
         $forelse
         <tr>
            <td colspan="3">沒有數據</td>
         </tr>
         $end

    2. 大膽的關鍵字利用。


      <html>
          
      <body>
              $if{users != null && users.size > 0}
              
      <table border="1">
                  $for{user : users}
                  
      <tr>
                      
      <td>${for.index + 1}</td>
                      
      <td>${user.name}</td>
                      
      <td>${user.coins}</td>
                  
      </tr>
                  $end
              
      </table>
              $end
          
      </body>
      </html>


      大家看這段代碼。一般來說,for這種常用關鍵字是不好用作id的,但是這里作為默認的循環狀態對象的id。既解決了塊對象存放的問題,又不會引起其他命名的沖突。一個字,妙!!!!

    3. 其他漂亮的特征:


      注釋版語法外套,方便于測試數據填充及可視化編輯。
      單一的語法規則,方便解析與擴展。

      等等。。。。


    好了,贊嘆之余還是給出一點點遺憾:

    boolean 運算有點丑陋。
    我個人更期望 js的boolean運算風格,沒有必要一碰到boolean 運算就返回true ? false
    我們完全可以返回一個更有意義的值,比如,我更期望這個語句能如我所愿的執行。
     
    ${ variable|| "默認值"}

    當能,如上支持,CT是有的,它的寫法是
     
    ${ variable | "默認值"}

    但是,我感覺,這個語法就有點復雜了,也不那么直觀。
    一般來說| 是按位取或,是位運算符,這里這個用法,跳躍的確實有點大,較難接受的。
    posted @ 2007-11-29 21:28 金大為 閱讀(1430) | 評論 (5)編輯 收藏
    剛剛經歷的一點小技巧,共享一下。

    1。給代理函數加上空判斷

    一個組合模式的運用。代碼如下:
    class Composite impliments IF1,IF2,IF3{
       
    private IF1 if1;
       
    private IF2 if2;
       
    private IF2 if2;
       
    public Composite (if1,if2,if3){
       }
    }

    eclipse 生成指代方法>>>>

    class Composite impliments IF1,IF2,IF3{
       
    private IF1 if1;
       
    private IF2 if2;
       
    private IF2 if2;
       
    public Composite (if1,if2,if3){
       }
       
    public void method1(){
          if1.method1();
       }
       .
    }

    //正則表達式
    // (\w+method\d)(\..*) if($1!=null){$0}
    //>>>
    class Composite impliments IF1,IF2,IF3{
       
    private IF1 if1;
       
    private IF2 if2;
       
    private IF2 if2;
       
    public Composite (if1,if2,if3){
       }
       
    public void method1(){
          
    if(if1= null){
             if1.method1();
          }
       }
       .
    }

    //還有一個構造函數里的屬性賦值:
    // (\w+)       this.$1=$1

    結果,略

    觸類旁通,更多新的用法待你去發掘^_^
    posted @ 2007-11-10 18:17 金大為 閱讀(959) | 評論 (3)編輯 收藏
    被一個貌似hsqldb bug的問題折磨了好幾個小時。
    把經過帖出來,大家幫我看看。

    習慣把hql都寫成預定義的形式,同時又為了避免過多的hql定義,我的慣用伎倆:通過如下方式定義hql。

     from Message
      
    where packageKey=:packageKey
       
    and ( null =  :fileKey or fileKey = :fileKey)
       
    and ( null = :objectKey or objectKey= :objectKey)
       
    and ( null = :memberKeys or memberKey in ( :memberKeys)) 


    但是。今天在hqldb上測試時發現,在任何情況下 (null = ?)  都為真!!!
    非常奇怪,害我調試了老半天,后來把數據庫換成了mysql,ok!!

    非常奇怪啊。
    不過,上面的寫法(null =  :fileKey)也有點怪怪的。
    posted @ 2007-10-18 22:31 金大為 閱讀(795) | 評論 (2)編輯 收藏
         摘要: 剛剛學習了一下網頁動畫中上的緩動效果,分享一下學習心得。 緩動曲線的概念: 緩動曲線是一個0為起點的連續函數曲線,x軸表示時間變化,y軸表示位移變化。曲線的斜率反映出運動的數度。 緩動效果在Flash動畫中比較常見,用于模擬一些現實中常見的運動軌跡,或者制造一些超絢的效果。 而且新版本的Flash中,內置了一些常用的緩動曲線函數。 可惜,Flash的這些曲線函數不是開源的...  閱讀全文
    posted @ 2007-10-14 21:14 金大為 閱讀(1228) | 評論 (0)編輯 收藏
    目前為止,JSA依然是最強大的腳本壓縮工具。
    As i know,JSA is the most powerfull compressor for javascript.

    for jquery1.2.1 (80,469 byte;)

     Compressor  beforegzip  aftergzip
      source:  80,469;  24,975;
     jquery default:  46,437;  14,641;
     yuicomressor  46,210;  14,452;
      JSA(without eval)  40,704;  13,604;
      JSA(with eval):
     26,157;   
     13,549;
     

    JSA(webstart): http://www.xidea.org/webstart/JSA.jnlp
    posted @ 2007-09-29 14:04 金大為 閱讀(824) | 評論 (2)編輯 收藏

    JSA這個壓縮工具,是java編寫的,需要安裝java運行環境。
    這多少給一些非jav程序員帶來點不便。

    現在我們發布servlet在線壓縮版本。無需安裝,在線壓縮,給非Java用戶一個更加便捷的使用方式。

    項目主頁:http://www.xidea.org/project/jsa/
    現在的在線壓縮服務器由Seaprince提供。
    歡迎更多有空閑服務器資源的朋友安裝JSA在線服務,我將在jsa項目主頁提供鏈接,方便大家使用。

    仍外,為了避免服務器資源被惡意濫用,我們默認啟用了圖片驗證,服務頻率限制等保護設置。
    給用戶帶來些不便,敬請諒解。


    posted @ 2007-08-22 16:28 金大為 閱讀(1019) | 評論 (5)編輯 收藏

    今天無意間打開了一個CSDN上的個人blog,發現窗口無法拖動,Firefox的標簽頁也無法切換。

    查看代碼:

    <script type="text/javascript">Include("Csdn.Blog.UserOnline");</script>  
    <script type="text/javascript">Include("Csdn.Blog.ShowmeDataDeal");</script>

     

    看到Include函數,馬上可以想到,它很可能使用了動態包含腳本的設計。
    //http://blog.csdn.net/scripts/jsframework.js  
    window.Include=function(namespace, path)  
    {  
       ..  
    };  
    S.load
    =function(namespace, path)  
    {  
         
    }  

    仔細閱讀這兩個函數代碼,發現它是通過XMLHttpRequest對象同步裝載腳本資源的(對IE,它采用userdata緩存優化)。而這必將導致一種完全阻塞問題(這種問題我在仍外一篇blog上描述過:http://jindw.javaeye.com/blog/66702)。

    說到阻塞問題,我想大家可能會以為只是一種下載延遲,其實不然。
    下載延遲不是完全阻塞,瀏覽器依然可以響應用戶事件。而同步XHR請求阻塞是一種完全的阻塞。
    瀏覽器在腳本運行與事件響應共用同一個線程(我的猜測)。任何腳本尚在運行時(包括被同步XHR請求阻塞的時間),瀏覽器將無法響應任何用戶事件(無法拖放窗口、切換標簽、重畫頁面等等,就像程序死了一樣)。與普通的下載延遲造成的阻塞,感覺明顯不同。

    我對這個問題可以說深有體會,起初,在構建JSI1的項目站點時。因為網站放在sourceforge上,訪問數度不是一般的慢,幾個簡單的例子,瀏覽器就要完全阻塞好幾妙鐘。正是厭惡這種完全阻塞的現象,我才開發了JSI2。

    事實上,現在的一堆堆js框架中,采用XHR同步裝載資源的有不少,JSVM、dojo、a9engine、hax的pies;其中JSVM, dojo都提供打包工具,將可能裝載的腳本打包到啟動文件中,所以也可以避免XHR同步請求。不過這樣也就失去了部分動態裝載的意義了。

    總之,我非常討厭這種完全阻塞現象,認為這個嚴重影響用戶體驗。
    可能也有些主觀因素把,希望聽聽大家的看法。


    posted @ 2007-08-12 22:22 金大為 閱讀(784) | 評論 (0)編輯 收藏
    最近看見一個JavaEye上關于Java基本類型編譯優化的帖子。
    貌似高深莫測,其實疑點重重。吧內容轉貼過來,希望在這里找到更合理的解釋。
    引用網上看得一些文章

     int a = 3;
     int b = 3;

      編譯器先處理int a = 3;首先它會在棧中創建一個變量為a的引用,然后查找有沒有字面值為3的地址,沒找到,就開辟一個存放3這個字面值的地址,然后將a指向3的地址。接著處 理int b = 3;在創建完b的引用變量后,由于在棧中已經有3這個字面值,便將b直接指向3的地址。這樣,就出現了a與b同時均指向3的情況。

    再令a=4;那么,b不會等于4,還是等于3。在編譯器內部,遇到a=4;時,它就會重新搜索棧中是否有4的字面值,如果沒有,重新開辟地址存放4的值;如果已經有了,則直接將a指向這個地址。因此a值的改變不會影響到b的值

    不知道真正的原理是不是那樣的?

    如果是的話能證明嗎?

    這些描述我也看過,很是不解。

    如果說這種基本類型也需要用這種指針的風格,還要共享數據,那么后續的操作處理起來不是更麻煩嗎?
    每次寫操作都要查找已有常量。甚至開辟新的空間存儲新值。
    再說這個指針怎么的也要個32位吧。為什么就不能直接吧值放進去,硬是要通過指針跳來跳去的,有意義嗎?
    這優化了嗎?

    反正在我看來,這是不可能的。

    希望有高手出來澄清一下,給個合理的解釋。

    如果是對的,那也應該給出有點說服力的證據。
    如果是錯的,那么建議大家吧這篇文章的源頭揪出來,這個確實誤人不淺。

    不過java對 String 這類不可變對象的處理,編譯器確實有類似優化,不過也只是編譯期。
    這種系統類庫受到點編譯器的特別關注倒是很合理的。



    posted @ 2007-07-30 08:29 金大為 閱讀(1169) | 評論 (12)編輯 收藏

    * 類庫導出支持(完全脫離JSI環境)
        從JSI托管類庫中,選擇文件/對象集,導出為單一腳本文件,完全脫離JSI裝載環境。
        也就是說,屆時JSI不僅可以作為一個運行時的腳本管理框架,也可以當作一個部署時的腳本定制、打包工具。

        我是看Ext的定制工具后產生這個想法的,JSI的依賴定義API完全可以用作一個通用的腳本定制、打包工具的依賴描述語言。

    * Ext集成(歡迎Ext用戶加入)
        集成Ext,一方面可以彌補JSI組件的缺乏。另一方面可以優化Ext的裝載延遲。
    ext目前大小為:462,031字節,JSI2Alpha版的內核為35,140字節,不到Ext的十分之一(文件大小均在文本壓縮之前記數)。集成Ext后,用戶可以使用JSI導入函數,按需導入那些頁面上直接使用到的元素。

    一些細節的想法:
        初步決定使用jquery為其基礎類庫(prototype不必擔心,JSI可以隔離腳本沖突,不會影響到prototype用戶)。
        裝載單元劃分的兩種想法:
        1.按照 http://extjs.com/download/build 中描述的定制模塊劃分(可能做些文件合并,避免零碎 件的裝載開銷)
        2.按照Ext內部包劃分(Ext 下載包的packages目錄下好像已經做了文件合并)

    我個人還沒用過Ext,非常希望有Ext用戶合作。


    posted @ 2007-07-12 12:35 金大為 閱讀(867) | 評論 (0)編輯 收藏

    大約兩年前私下編寫一個wiki時使用的代碼生成工具,最近想繼續這個wiki項目(http://sourceforge.net/projects/txdoc),也順便吧這個代碼生成工具整理出來。

    PPT見:http://m.tkk7.com/jindw/archive/2007/06/30/127195.html

    eclipse項目,文件太大,SF文件發布系統最近問題多多,只好分成三分上傳在javaeye blog:http://jindw.javaeye.com/blog/98436

    其中,代碼生成工具及一些基礎類庫在web/WEB-INF/lib/xdoclet-xidea-plus.jar文件中(附源碼)

     


    目錄結構
        src/main:   源文件
        src/gen:     生成的源文件及配置文件
        src/test:    測試類
        build:       ant 腳本(build.xml)、ant配置、構建過程的臨時目錄(temp)
        web:         web根目錄
        lib:          編譯器附加類庫(如ant任務需要的lib)
        doc:         文檔目錄
        doc/xdoclet: xdoclet參考文檔
       
       
    一.創建持久類:
      1.改類為一個有諾干屬性的簡單java類
      2.為持久類打上hibernate標記:
         必要標記:hibernate.class(指定該類為持久類,無必選屬性,可選屬性參考xdoclet文檔)
                hibernate.id (指定持久類主鍵,必選屬性generator-class,指定主鍵生成算法,常用算法有uuid.hex、hilo、assigned....)
         常用標記:hibernate.property(指定持久屬性,無必選屬性)
                hibernate.cache(預定義查詢,必選屬性 name,query)
                hibernate.one-to-many,hibernate.many-to-one等,指定對象關系,比較復雜,建議先看hibernate官方文檔、xdoclet文檔
                 
      3.打開項目下build/build.xml、運行hibernate任務,該任務將生成hibernate映射文件、hibernate dao實現、hibernate的spring配置,及dao配置。
        其中hibernateDao實現常用DAO方法,并定義以后將使用的常量:如預定義查詢名、預定義查詢參數名、集合名,等等。
       
      4.持久類的路徑一般為:src/main/{package}/po/{TableName}.java ,生成的DAO路徑為src/main/{package}/dao/{TableName}Dao.java
     
    二.創建Spring服務實現:
      1.Spring服務實現無任何接口約束,普通java對象即可。
      2.將需要使用的hibernate Dao 聲明為該服務類的屬性(spring.property標記)。
      3.為服務類打上spring標記:
        必要標記:spring.bean(parent:對于所有需要spring事務支持的javabean,必須聲明parent屬性值為"transactionProxy";
                 生成工具將根據類名為spring bean自動生成默認 id,)
        常用標記:spring.property(spring 屬性)。
              spring.transaction(對于parent=transactionProxy的bean,需要為需要聲明是事務支持的方法聲明事務屬性,具體請參考xdoclet文檔)
      4.打開項目下build/build.xml、運行spring任務,該任務將生成spring配置文件。
     
    三.創建XWork Action,一般為*/action/*.java
      1.Action需要實現com.opensymphony.xwork.Action,如果我們需要xwork的國際化支持,繼承ActionSupport基類,必然需要實現TextProvider接口。
      2.為Action打上xwork標記:
        必要標記:xwork.package(必要屬性有name),
                xwork.action(必要屬性name,表示某方法為Action方法,將映射到一個具體的url地址),
                xwork.result(必要屬性name,該標記定義在定義了xwork.action的地方,可定義多個,表示該Action的結果集)
        常用屬性: xwork.spring-ref (屬性的set方法上,其值將從spring context中獲取)
       
      3.為Action制作結果集頁面:
        若未在 xwork.result標記中定義value屬性,其值未ActionName+"-"+resultName,若有大寫字符,將用"-"隔開,并轉小寫;
        value值即未頁面地址。可以為jsp,velocity,xsl等等。
     
      4.打開項目下build/build.xml、運行xwork任務,該任務將生成xwork配置文件。
     
     

     
    posted @ 2007-07-06 14:37 金大為 閱讀(1050) | 評論 (1)編輯 收藏

    帶ID的函數表達式:

    var fn = function fnid(){};  

    按照ECMA262定義,上面這段腳本等價于:

    with({fnid:null}){  
      
    var fn = fnid = function(){};  
    }  

     


    注意:fnid在with外是不可見的,但是IE沒有嚴格遵守ECMA規范(同樣的情況發生在catch語法上)。在IE上相當于:
    var fnid = function(){};  
    var fn = fnid;  

    在剛剛發布的JSA1beta上,還不能處理這個問題(新版本將這周內發布)。同時,鑒于這種語法在不同瀏覽器上表現不同,還是建議盡量避免使用(這點上,我個人還是更喜歡ie的方式)。

    var語句:
    太常用了,但是,沒有注意還是很容易出問題。
    var 用來聲明全局或函數變量,但是,只是申明,重復申明也不能置空,范圍是函數或者全局空間,位置在函數或腳本頂端,與塊無關,這些與常用高級語言區別很大。

    怪癖的代碼

    var vaiable =0;  
    function test(){  
       variable 
    =1;//別擔心,不會改動全局變量vaiable  
       //do ..  
       var vaiable;//變量申明無順序(一律置頂),只是賦值有順序。  
    }  

     

    常見錯誤有:

    var flag;//這里可能有人(包括我自己)喜歡自做聰明的利用一下變量的初始值undefined  
    while(!flag){//沒準那個角落里面已經給當前函數內同名變量給賦值了就慘了  
      //..  
    }  

     

    posted @ 2007-06-30 16:47 金大為 閱讀(1256) | 評論 (3)編輯 收藏

    已經有一年多沒做java這塊了,今天翻出這個一年前寫的代碼生成工具,準備開放出來,或許對某些人還有點用處。

    這個代碼生成器是基于xdoclet2的改進版。
      所做工作:
      * 生成Hibernate 映射文件及相應得spring的配置文件。
      * 生成Hibernate DAO 文件及命名查詢名稱常量(新)。
      * 生成Spring配置文件(支持事務申明)。
      * 生成xwork配置文件(增加多包及spring屬性支持)。
      * 驗證資源冗余及缺失。

    先吧PPT放出來,如果有人(包括我自己)能用上再吧代碼整理一下,放出來。


    ppt下載:
    http://m.tkk7.com/Files/jindw/codegen.rar

    posted @ 2007-06-30 08:44 金大為 閱讀(1008) | 評論 (6)編輯 收藏

    裝飾引擎簡介:

    系統默認的裝飾引擎為:org.xidea.decorator.DecoratorEngine。
    JSI裝載后,將做如下操作:
    1. 判斷有無裝飾器命名空間聲明(xmlns:d= "http://www.xidea.org/taglib/decorator")
    2. 若有,將在文檔裝載結束后,啟動裝飾引擎,初始化當前可用的裝飾提供者表。(裝飾提供者是一個JavaScript包,在注冊這種裝飾包時可同時指定他的別名,別名*表示默認包)
    3. 遍歷當前文檔,凡是該命名空間的節點,都被看作需要裝飾的元素。若當前文檔存在裝飾元素,啟用遮罩(關機效果),頁面將不可操作(仍可查閱)。
    4. 查找裝飾元素對應的裝飾類(通過tagName判斷類名),采用異步方式動態裝載這些裝飾器類(不會裝載到全局空間),并更新當前進度信息,同時設置裝飾器之間的關系(parent,children)。
    5. 以深度遍歷的方式遍歷這些節點,注冊組件(以后可以通過$JSI.getComponent函數獲取裝飾器對象),依次執行他們的before操作,和decorate操作。
    6. 完成裝飾,取消遮罩,頁面進入可用狀態。

    裝飾器規范簡介:

    裝飾器指的是所有擁有decorate成員方法的類。一般來說,可將一組裝飾器歸為同一個包中(太復雜的裝飾器,可將具體邏輯放置在其他包中),能后在配置文件中定義裝飾包。
    scripts/config.js   $JSI.addDecoratorProvider("org.xidea.decorator","xidea","*");

    裝飾器類包含兩個方法before、docorate分別在遍歷前(子節點未裝飾)和遍歷后(子節點裝飾完成)調用。

    同時,裝飾引擎遍歷時還將注入如下三個屬性:
    1. parent:父裝飾器
    2. children:子裝飾器集合
    3. attributes:裝飾器屬性集對象(只有一個成員函數:get(attrName)  )

    JSI現有裝飾器集合簡介

    目前JSI2最高版本2.0預覽版 (2007-04-16)包含如下裝飾器:
    1. DatePicker
      日期選擇控件,參照xul datepicker標簽,支持彈出方式(默認值 type='pop'),和內嵌式(type='grid')
    2. Editor
      編輯器控件,參照xul editor標簽
    3. Spinner
      Spinner控件(window時間日期管理中,年份調節的控件),參照backbase 的 Spinner標簽
    4. TabBox、Tabs、Tab、TabPanels、TabPanel
      TabBox(標簽頁)控件,參照xul tabbox標簽
    5.  Code
      代碼語法高亮顯示控件,參照SyntaxHighlighter的顯示風格
    6. Include
      片斷包含標簽,支持xpath選取文檔片斷,支持xslt轉換

    這些裝飾器的演示見:
    http://www.xidea.org/project/jsi/decorator/index.html

    目前JSI自帶的裝飾器不夠豐富,而且都還是初級階段,不夠完善。現在發布的這些裝飾器,主要是為了演示JSI的工作方式,編碼風格,希望能吸引第三方團隊、公司在這個基礎上開發出自己的更加實用的裝飾器集合。

    JSI及其裝飾引擎采用LGPL協議。可以商業應用,當能,更希望能開源。

    目前就我一人之力,開發一套完整的裝飾器,尚需時日,這次將這個半成品拿出來演示,主要是為了展示一下jsd的風格,希望能吸引其他開發者,共同參與這個工程,有興趣豐富JS自帶I裝飾器集合的網友,請msn與我聯系:jindw◎xidea。org
    posted @ 2007-06-27 10:35 金大為 閱讀(771) | 評論 (0)編輯 收藏
    JSI組件模型是一種用來裝飾簡單html元素的框架,使用簡單的xml標記,標識其裝飾行為,比如將一個普通的input裝飾成一個日期輸入控件,將一 個html ul標記裝飾成菜單或樹,將一個textarea裝飾成一個代碼語法高亮顯示區域,或一個wysiwyg html編輯器。
    JSI啟動后將自動檢查decorator標記,構建層次結構,自動做相關類的尋找、導入和裝飾操作;實現零腳本代碼的web富客戶端編程。

    代碼示例:

    1. 日期選擇器 (DatePicker):

       <d:datepicker>  
        
      <input type="text" name="test2" />  
      </d:datepicker>   

    2. 編輯器示例 (Editor):

       <d:editor>  
        
      <textarea name='editorText'>This is some <strong>sample text</strong>. You are using <a  
          
      href="http://www.fckeditor.net/">FCKeditor</a>.</textarea>  
      </d:editor>   

    3. Spinner控件(Spinner 類似window時間日期管理中,年份調節的控件):
       <d:spinner start='0' end='8' step='2'>  
        
      <input type="text" name="test2" value='0' />  
      </d:spinner>   

    4. 客戶端包含(Include):
       <d:include url='menu.xml' xslt="menu.xsl"></d:include>    

    5. 代碼語法高亮顯示控件(Code):
       <d:code language="js">  
       
      <textarea>alert(‘Hello World’)</textarea>  
      </d:code>   

    6. 標簽頁控件(TabBox參照xul tabbox標簽):

       <d:tabbox>  
        
      <d:tabs>  
          
      <d:tab>tab1</d:tab>  
          
      <d:tab>tab2</d:tab>  
          
      <d:tab>tab3</d:tab>  
        
      </d:tabs>  
        
      <d:tabpanels>  
          
      <d:tabpanel>content1</d:tabpanel>  
          
      <d:tabpanel>content2</d:tabpanel>  
          
      <d:tabpanel>content3</d:tabpanel>  
        
      </d:tabpanels>  
      </d:tabbox>   


    7. 綜合示例:
    來一個復雜一點的完整的例子,以日期選擇控件的演示頁面為例
    頁面上有: 標簽頁裝飾器(TabBox….)、源代碼高亮顯示裝飾器(Code)、日期選擇裝飾器(DatePicker)、包含裝飾器(Include)
    <?xml version="1.0" encoding="utf-8"?>  
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
    <html xmlns="http://www.w3.org/1999/xhtml"  
      xmlns:d
    ="http://www.xidea.org/taglib/decorator" xml:lang="zh_CN"  
      lang
    ="zh_CN">  
    <head>  
    <script src="../scripts/boot.js"></script>  
    <title>DatePicker 示例</title>  
    </head>  
    <body>  
    <h2>DatePicker 示例</h2>  
    <!-- 開始標簽頁裝飾器 -->  
    <d:tabbox>  
      
    <d:tabs>  
        
    <d:tab>效果</d:tab>  
        
    <d:tab>代碼</d:tab>  
      
    </d:tabs>  
      
    <d:tabpanels>  
        
    <d:tabpanel>  
          
    <!-- 開始日期裝飾器(內嵌式) -->  
          
    <d:datepicker type='grid'>  
            
    <input type="text" name="test1" />  
          
    </d:datepicker>  
          
    <!-- 開始日期裝飾器(彈出式) -->  
          
    <d:datepicker>  
            
    <input type="text" name="test2" />  
          
    </d:datepicker>  
        
    </d:tabpanel>  
        
    <d:tabpanel>  
          
    <!-- 開始代碼高亮顯示 -->  
          
    <d:code language="xml">  
            
    <textarea>  
          
    &lt;!-- 開始日期裝飾器(內嵌式) --&gt;  
          
    &lt;d:datepicker type='grid'&gt;  
            
    &lt;input type="text" name="test1" /&gt;  
          
    &lt;/d:datepicker&gt;  
          
    &lt;!-- 開始日期裝飾器(彈出式) --&gt;  
          
    &lt;d:datepicker&gt;  
            
    &lt;input type="text" name="test2" /&gt;  
          
    &lt;/d:datepicker&gt;</textarea>  
          
    </d:code>  
        
    </d:tabpanel>  
      
    </d:tabpanels>  
    </d:tabbox>  
    <select style="margin-left:120px"><option>彈出的datepicker 可覆蓋IE select</option></select>  
    <hr />  
    <!-- 開始Include裝飾器,包含裝飾器菜單 -->  
    <d:include url='menu.xml' xslt="menu.xsl"></d:include>  
    </body>  
    </html> 



    裝飾結果:






    云想衣裳花想容--JSI組件模型介紹(二)已經發布,那里有裝飾過程及其原理的介紹:
    http://www.javaeye.com/topic/71425


    posted @ 2007-06-27 10:24 金大為 閱讀(811) | 評論 (0)編輯 收藏

    眾所周知, Scriptaculous所依賴的Prototype庫與jQuery存在沖突。所以同時使用比較困難。

    JSI針對每一個裝載的腳本都有完全獨立的執行上下文。所以這個問題能在JSI上徹底解決。

    下面的例子,我們將在同一個頁面上同時使用Scriptaculous jQuery 類庫。證實一下JSI隔離沖突功能。

    示例頁面(hello-jquery-aculo.html):

    <html> 
    <head> 
    <title>Hello jQuery And Scriptaculous</title> 
    <!-- 加入引導腳本 --> 
    <script src="../scripts/boot.js"></script> 
    <script> 
    //導入jQuery  
    $import(
    "org.jquery.$"); 
    //導入Scriptaculous  
    $import(
    "us.aculo.script.Effect");  
     
      
    $(document).ready(
    function(){ 
      
    //使用jQuery添加一段問候語 
      $(
    "<p id='helloBox' style='background:#0F0;text-align:center;font-size:40px;cursor:pointer;'>Hello jQuery And Scriptaculous</p>")       .appendTo('body');  
      $('#helloBox').ready(
    function(){  
       
    //使用Scriptaculous高亮顯示一下剛才添加的內容  
        new Effect.Highlight('helloBox');  
      }).click(
    function(){  
       
    //當用戶單擊該內容后使用jQuery實現漸出  
        $('#helloBox').fadeOut();  
      });  
     });  
    </script>  
    </head>    
    <body>    
    <p>文檔裝載后,jQuery將在后面添加一段問候語;并使用Scriptaculous高亮顯示(Highlight);在鼠標點擊后在使用jQuery漸出(fadeOut)。</p>  
    </body>  
    </html>  

    posted @ 2007-06-26 07:46 金大為 閱讀(799) | 評論 (0)編輯 收藏
    主站蜘蛛池模板: 亚洲人成电影网站| 美国毛片亚洲社区在线观看 | 无码中文在线二区免费| 亚洲黄页网在线观看| 亚洲国产精品无码久久久久久曰 | 久久精品视频免费看| 精品亚洲成在人线AV无码| 亚洲国产午夜中文字幕精品黄网站| 免费无码一区二区三区蜜桃| 亚洲国产成a人v在线观看| 亚洲精品成人区在线观看| 国产精品久久久久久久久免费| 美女露隐私全部免费直播| 久久精品国产亚洲AV大全| 免费看国产精品麻豆| 99在线观看免费视频| 日韩大片在线永久免费观看网站| 亚洲人成电影亚洲人成9999网| 国产在线19禁免费观看国产| 久久成人免费大片| 成人嫩草影院免费观看| 亚洲Av无码一区二区二三区| 亚洲熟妇无码AV在线播放| 免费无码黄网站在线观看| 91精品导航在线网址免费| 人妻18毛片a级毛片免费看| 亚洲一区动漫卡通在线播放| 亚洲精品乱码久久久久久中文字幕| 成人免费午间影院在线观看| 可以免费观看的国产视频| 黄色a三级三级三级免费看| 亚洲一区免费在线观看| 亚洲国产一区二区a毛片| 久久国产成人精品国产成人亚洲 | 亚洲Av无码专区国产乱码DVD| 国产18禁黄网站免费观看| 青青在线久青草免费观看| 小草在线看片免费人成视久网| 久久久精品国产亚洲成人满18免费网站| 在线观看日本亚洲一区| 亚洲香蕉免费有线视频|