大 蘋 果

          獻給Eclipse社區(qū)

           

          Velocity的事件處理

           

          Velocity提供了對模板解析過程事件的處理,用戶可以響應(yīng)模板產(chǎn)生的事件。模板事件有設(shè)置模板變量、模板參數(shù)為空以及調(diào)用模板方法時出錯等。

          要響應(yīng)模板事件可以實現(xiàn)Velocity的接口,提供相應(yīng)的處理。模板事件都繼承于“org.apache.velocity.app.event.EventHandler”接口,有如下幾個接口的實現(xiàn):

          1. ReferenceInsertionEventHandler:要實現(xiàn)的方法為referenceInsert,響應(yīng)從模板上下文給模板變量賦值。

                 2. NullSetEventHandler:要實現(xiàn)的方法為shouldLogOnNullSet,響應(yīng)當(dāng)賦值的變量為空的事件。

          3. MethodExceptionEventHandler:要實現(xiàn)的方法為methodException,響應(yīng)當(dāng)調(diào)用的方法拋出異常時的處理。

          模板的事件提供了用戶代碼和模板引擎的交互的方式,為演示三種類型的模板事件,可以通過實例進行介紹,如例程9-10所示。

          例程9-10 模板事件的處理

          public class EventHandler implements ReferenceInsertionEventHandler,

                             NullSetEventHandler, MethodExceptionEventHandler {

           

                   public EventHandler(Context ctx) {

                             EventCartridge ec = new EventCartridge();

           

                             //添加模板事件的處理實例

                             ec.addEventHandler(this);

                             //添加模板上下文

                             ec.attachToContext(ctx);

                   }

           

                   /**

                    * 處理引用值的插件

                    * */

                   public Object referenceInsert(String reference, Object data) {

                             System.out.println("referenceInsert: " + reference + " data: " + data);

           

                             return data;

                   }

           

                   /**

                    * 處理空值

                    * @param lhs 被賦值變量

                    * @param rhs 將要賦的值

                    * */

                   public boolean shouldLogOnNullSet(String lhs, String rhs) {

                             System.out.println("Null:");

                             System.out.println("lhs:" + lhs + " rhs:" + rhs);

           

                             return true;

                   }

           

                   /**

                    * 處理模板調(diào)用方法拋出的異常

                    * @param cls 拋出異常的類

                    * @param method 拋出異常的方法

                    * @param e 拋出的異常

                    * */

                   public Object methodException(Class cls, String method, Exception e)

                                      throws Exception {

                             return "An " + e.getClass().getName() + " was thrown by the " + method

                                               + " method of the " + cls.getName() + " class ["

                                               + e.getMessage() + "]";

                   }

           

                   public static void main(String[] args) throws Exception {

                             Velocity.init();

                             Template t = Velocity.getTemplate("./src/eventHandler.vm");

           

                             Context ctx = new VelocityContext();

                             ctx.put("person", "Joe");

                             ctx.put("exception", new ExceptionGenerator());

           

                             //設(shè)置異常處理類及上下文

                             EventHandler hdl = new EventHandler(ctx);

           

                             Writer writer = new StringWriter();

                             t.merge(ctx, writer);

           

                             System.out.println(writer);

                   }

           

          }

           

           

          public class ExceptionGenerator {

           

           public String generate() throws Exception {

              Random rnd = new Random();

           

              int x = rnd.nextInt(5);

           

              if (x == 2) {

                throw new Exception("Unlucky!");

              } else {

                return "No Exception";

              }

           }

          }

           

          模板文件eventHandler.vm

          #set($myNull1 = $testNull)

           

          This is $person

           

          $exception.generate()

          如上實例,通過ExceptionGenerator來生成異常,測試異常事件的監(jiān)聽,當(dāng)ExceptionGenerator拋出異常時

          posted on 2007-04-08 23:53 阿甘 閱讀(1133) 評論(1)  編輯  收藏

          評論

          # re: Velocity的事件處理 2007-06-26 20:39 bearhunter

          學(xué)習(xí)了  回復(fù)  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(10)

          隨筆分類

          隨筆檔案(2)

          相冊

          funny

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 高要市| 富锦市| 闽清县| 施秉县| 高唐县| 达尔| 西乌珠穆沁旗| 衡水市| 肥城市| 岑溪市| 安龙县| 申扎县| 上思县| 浦县| 通河县| 武冈市| 大埔县| 麻栗坡县| 灌阳县| 绥滨县| 凤山市| 米易县| 邵阳市| 怀仁县| 桐梓县| 卢湾区| 平山县| 田林县| 轮台县| 仙游县| 天门市| 河曲县| 宁乡县| 彭州市| 抚宁县| 武乡县| 建阳市| 莒南县| 威海市| 宝应县| 潞城市|