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

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

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

    posts - 176, comments - 240, trackbacks - 0, articles - 7

    web程序需要完成  html <--> java 之間的映射,在界面越來(lái)越復(fù)雜,越來(lái)越多變的今天,這項(xiàng)工作也變得越來(lái)越困難。按照級(jí)列設(shè)計(jì)理論的觀點(diǎn),我們應(yīng)該去尋求一些中間的過(guò)渡步驟。在 witrix平臺(tái)中,tpl模板引擎正扮演了這種中間角色。通過(guò)tpl模板我們實(shí)現(xiàn)了如下映射路徑

    html <--> tpl <--> java

    注 意到這里html與tpl之間,以及tpl與java之間的映射都不是trivial的同構(gòu)關(guān)系,而是都可能存在著復(fù)雜的運(yùn)算過(guò)程,從而實(shí)現(xiàn)了html與 java映射過(guò)程中復(fù)雜性的分解與均攤。tpl與java之間的關(guān)聯(lián)主要通過(guò)EL(expression language)表達(dá)式來(lái)完成,而html與tpl的映射則主要通過(guò)自定義標(biāo)簽(tag)機(jī)制。
    注意到tpl所提供的中間層具有獨(dú)立的重大意 義,它并不是臆造的或者是簡(jiǎn)單的技術(shù)驅(qū)動(dòng)的結(jié)果。實(shí)際上,在web開(kāi)發(fā)中除了java結(jié)構(gòu)與html結(jié)構(gòu)之外還存在著第三種結(jié)構(gòu),即用戶眼中的界面結(jié)構(gòu), 本來(lái)它與html所描述的結(jié)構(gòu)是簡(jiǎn)單的一一對(duì)應(yīng)的,但是隨著界面技術(shù)的發(fā)展,html的描述能力逐漸被耗盡,成為了internet時(shí)代的"匯編語(yǔ)言"。 現(xiàn)在一個(gè)簡(jiǎn)單的頁(yè)面片斷就可能對(duì)應(yīng)著大量html代碼,因而喪失了"所寫即所見(jiàn)"的簡(jiǎn)單性。tpl通過(guò)強(qiáng)大的抽象能力在某種程度上恢復(fù)了程序員對(duì)于界面表 現(xiàn)結(jié)構(gòu)的直觀控制能力,并在一定程度上保留了html所見(jiàn)即所得的特性。

    在witrix平臺(tái)中因?yàn)榇嬖谥鴗pl這一強(qiáng)大的抽象層,使得我們對(duì)于ajax的支持可以采取更加靈活的方式。
    ajax(Asynchronous JavaScript + XML)的標(biāo)準(zhǔn)結(jié)構(gòu)是
    html <--> js <==> xml <==> java

    在 這種結(jié)構(gòu)中通過(guò)xml信道的只是數(shù)據(jù),而界面的表達(dá)邏輯與展現(xiàn)邏輯完全由js來(lái)控制。這種結(jié)構(gòu)發(fā)展的一個(gè)極端是所有的界面展現(xiàn)結(jié)構(gòu)都由 javascript動(dòng)態(tài)構(gòu)造出來(lái),而完全喪失了html靜態(tài)描述的特點(diǎn),喪失了所見(jiàn)即所得的設(shè)計(jì)。與直接實(shí)現(xiàn)html<-->java之間 的映射情況類似,直接實(shí)現(xiàn) html <--> js之間的映射也是困難的,盡管dom模型的支持可能使得js映射的難度要低于java映射。

    在witrix平臺(tái)中ajax的方案為
    html <--> js <==> tpl <--> java

    即tpl取代了ajax標(biāo)準(zhǔn)方案中xml的位置,使得映射過(guò)程的復(fù)雜性得以分散化。

    結(jié)合jsplet框架的拉模式(pull mode),我們定義了如下ajax訪問(wèn)接口
    js.ajax.load({request='objectName=/@Test&objectEvent=query',tpl:'/test.tpl:partA',targetId:'testDiv'});

    1。 遠(yuǎn)程服務(wù)請(qǐng)求就是一段普通的http post request, 避免了額外的xml編碼解碼需求。
    2。請(qǐng)求到的數(shù)據(jù)先由tpl文件來(lái)進(jìn)行處理。注意到這里tpl文件的url分成兩部分,前一部分是tpl文件的虛擬路徑,而 :后面的部分,即partA指出請(qǐng)求的是該tpl文件內(nèi)的partA部分,而不是整個(gè)tpl文件。
    3。返回的html結(jié)果被填充到targetId所指定的html元素中。

    test.tpl文件的內(nèi)容
    <html>
    <body>

    <tpl:define id="partA">
    <img tpl:tag="ui:EditTable" />
    </tpl:define>

    <div id="testDiv">
    <img tpl:tag="ui:ViewTable" />
    </div>

    </body>
    </html>

    tpl具有強(qiáng)大的結(jié)構(gòu)構(gòu)造能力,在這里我們以非常小的代價(jià)實(shí)現(xiàn)了tpl片斷的定義,例如test.tpl中的partA部分。這里通過(guò)id訪問(wèn)tpl片斷就如同js中通過(guò)id來(lái)訪問(wèn)html片斷一樣。
    最后提一個(gè)很重要的思想:大量零碎的代碼片斷需要集中存放,否則人的精力會(huì)被耗散。一個(gè)反例就是struts中的action, 明明只干那么點(diǎn)事,偏偏要占據(jù)一個(gè)單獨(dú)的java文件,占據(jù)大量單獨(dú)的配置條目,最終給程序員帶來(lái)很大的困擾。
    主站蜘蛛池模板: 韩国日本好看电影免费看| 99精品热线在线观看免费视频| 成人黄动漫画免费网站视频 | 亚洲不卡无码av中文字幕| 亚洲一卡2卡三卡4卡无卡下载| 无码人妻一区二区三区免费手机| 亚洲精品欧洲精品| 18女人腿打开无遮掩免费| 亚洲国产精品不卡在线电影| 一区二区三区四区免费视频| 亚洲av午夜福利精品一区人妖| 国产成人AV片无码免费| 久久精品国产精品亚洲毛片| 曰批视频免费40分钟试看天天| 亚洲午夜电影在线观看高清| 在线观看免费人成视频色9| 亚洲午夜成人精品无码色欲| 日韩一品在线播放视频一品免费| 亚洲av纯肉无码精品动漫| 亚洲 无码 在线 专区| yellow免费网站| 日本红怡院亚洲红怡院最新| 日韩免费人妻AV无码专区蜜桃| 亚洲视频免费一区| 日韩视频免费一区二区三区| 黄页网站在线视频免费| 免费国产在线观看老王影院| 乱淫片免费影院观看| 亚洲色无码专区在线观看| 91免费国产精品| 亚洲国产精品精华液| 亚洲色一色噜一噜噜噜| 久久久久免费看成人影片| 亚洲午夜在线播放| 亚洲国产精品尤物yw在线| 91精品手机国产免费| 亚洲AV无码国产一区二区三区| 自拍偷自拍亚洲精品情侣| 日韩免费一区二区三区在线 | 麻豆精品国产免费观看| 51午夜精品免费视频|