Turbine實戰(下) (轉)
Layout相當於Screen、Navigation的容器。負責頁面的佈局控制。:namespace prefix = o ns = "urn:schemas--com::office" />
模板化Layout,實際上就是以.vm作為Layout模板,使用Velocity來進行頁面佈局控制。
我們已經在2.2節中見到過一個Layout的模板。可以看到,在這個模板檔案中,沒有包含任何可顯示的資料,僅有的都是一些用來控制佈局用的HTML元素。Okay,相信聰明的你都明白我將要說什麼了:Layout模板相當於一個有著很多的格子的盒子。而我們唯一需要做的,就是把Navigation、Screen等這些“”放到這些格子裡去。此時,Layout就相當於表述層中的Controller。寫到這裡,我不禁為Turbine開發者如此的用心良苦表示欽佩與感謝。
在上一節中,我們已經用Velocity製作了一個簡單的Screen。除了需要將基類換為VelocityOnlyLayout/editor/Editor.htm#_edn1" name=_ednref1>[i]以外,使用Velocity編寫Layout的步驟跟Screen是完全一樣的。Layout模板檔案放置在“TEMPLATES-PATH/layouts/”目錄下。
現在,讓我們再來看一下2.2節中Layout模板裡的幾個主要變數:
l $screen_placeholder - 非常重要的一個變數。這個變數放置的地方就是Screen將要被輸出的地方。這個變數裡填充的就是儲存在String裡的Screen文字資訊。
l $navigation - 這個變數是用來取得Navigation的。它的物件型別是:org..turbine.util.template.TemplateNavigation。
l $data - 不用多說,就是RunDataJ。
Navigation的Velocity實現方式跟Screen、Layout完全一致。Navigation模板放置的地方為:“TEMPLATES-PATH/navigations/”目錄。可以使用的基類為:VelocityNavigation。
當中輸入的URI中包含Action引數,即類似這樣時:
/action/UpdateWorld
Action將會被觸發並。
此時,Turbine按照以下順序執行:
首先,位於“-INF/classes/com/yourcompany/app/modules/actions/”下的UpdateWorld class將會被執行;隨後,執行HelloWorld class(如果存在的話);最後,執行HelloWorld.vm。
Action是一個執行特定事務的模組。這些事務可能是發一封,也可能是操作,或其他可能的事務。Action執行結束後不返回任何值,僅有可能透過RunData.setMessage()方法在RunData中放置一條Message。但是,在Action的事務處理過程中,有可能改變或中斷即將被執行的Template和Screen。
Velocity同樣提供了對Action的支援,但與上面提到的三個模組(Screen、Layout、Navigation)不同的是,Action不需要編寫對應的模板檔案。下表就是一個簡單的Action:
package com.yourcompany.app.modules.actions; // Velocity Stuff import org.apache.velocity.context.Context; // Turbine Stuff import org.apache.turbine.util.RunData; import org.apache.turbine.modules.actions.VelocityAction; public class AddUser extends VelocityAction { public void doPerform( RunData data, Context context ) throws Exception { if ( data.getParameters().getString("username",null) == null) { data.setMessage("Username does not exist"); setTemplate ( data, "AddUser.vm" ); return; } // store user info into database data.setMessage("Information stored!"); setTemplate( data, "MainMenu.vm"); // stuff something into the Velocity Context context.put ("variable", "foo"); } } 它檢查提交的資料中是否包含“username”變數。如果不包含的話,將切換到“AddUser.vm”模板,並顯示了一個錯誤提示。否則,轉換到“MainMenu.vm”,並顯示相應的提示資訊,除此之外,還在Velocity Context中放入了一些資料。 上面只是Action的一個簡單用法,Turbine還提供一種機制,就是Action Event。透過Action Event機制,Turbine提供了一種非常便利的處理fosubmission的方法,使得我們可以更的開發Turbine應用。 為了明白Action Event機制的原理,我們先複習一下Turbine的相關內容J: 當Turbine接受到一個包含Action請求的URI時,首先執行這個Action,然後……噢,對的,就是這樣。然而,對於那些繼承自ActionEvent的類來說,在這個Action被執行時,發生了一些奇妙的事…… 給大家留個懸念先,讓我們來看一下程式碼J: public class NewUserFoo extends VelocityAction { public void doAdd (RunData data, Context context) throws Exception { // put code here to add the user to the system context.put ("username", username ); data.setMessage("User Added!"); } public void doPerform(RunData data, Context context) throws Exception { data.setMessage("Button not found!"); } } 然後,在我們的HTML tag中嵌入這樣的程式碼: …
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-960838/,如需轉載,請註明出處,否則將追究法律責任。
3.3.4.1 Velocity Action Event
相關文章
- Linux下燒錄光碟實戰(轉)Linux
- Turbine vs ExpressoExpress
- 誰能夠提供jive的turbine的實現版本。
- 【轉】微服務實戰微服務
- 我們來討論一下apache 的 Turbine專案吧。Apache
- Hystrix Turbine簡介與使用
- RedHat7.2下ADSL雙網路卡共享上網實戰(轉)Redhat
- TiDB 在轉轉的業務實戰TiDB
- 1、實戰SSH埠轉發
- 英語面試實戰指南(轉)面試
- Ant實戰篇 (一)(3) (轉)
- Ant實戰篇 (一)(4) (轉)
- 轉轉:微信小程式分包載入實戰微信小程式
- springcloud(六):熔斷監控TurbineSpringGCCloud
- sb2.0新版springcloud微服務實戰:Consul+Zuul+Feign/Ribbon+Hystrix Turbine+Config+sleuth+zipkinSpringGCCloud微服務Zuul
- GNU/Linux實戰手記之Emacs篇 下——Emacs是個IDE (轉)LinuxMacIDE
- samba和openldap結合實戰(轉)SambaLDA
- 實戰apache+tomcat整合(轉)ApacheTomcat
- 戰略實施的模式(轉載)模式
- Oracle--SQL行列轉換實戰OracleSQL
- Code Review理論與實戰 (轉)View
- DirectShow之介面實戰篇(一) (轉)
- DirectShow之介面實戰篇(二) (轉)
- DirectShow之介面實戰篇(三) (轉)
- Spring Data JPA專案實戰(下)Spring
- 設定 SSH 隧道(埠轉發)實戰
- C++實戰之程式書法 (轉)C++
- UniX技術 AIX實戰經驗(轉)AI
- 實戰apache使用者驗證(轉)Apache
- ERP專案管理實戰談(轉)專案管理
- 實戰VC時間控制函式 (轉)函式
- C++實戰之資料抽象 (轉)C++抽象
- 實戰分析ext2檔案系統下恢復誤刪除檔案(轉)
- .Net微服務實戰之負載均衡(下)微服務負載
- 密集計算場景下的 JNI 實戰
- 記錄一下效能測試實戰
- 電商業務測試方案與實戰落地 (轉轉) - 田西西
- 實戰|教你用Python玩轉MysqlPythonMySql