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

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

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

    jojo's blog--快樂憂傷都與你同在
    為夢(mèng)想而來(lái),為自由而生。 性情若水,風(fēng)起水興,風(fēng)息水止,故時(shí)而激蕩,時(shí)又清平……
    posts - 11,  comments - 30,  trackbacks - 0
    http://tech.blogbus.com/logs/139683.html

      在Spring最新的文檔里,有關(guān)于如何將Tapestry整合到Spring里去的說(shuō)明,見這里http://www.springframework.org/docs/reference/view.html#view-tapestry。Spring中文論壇應(yīng)該會(huì)翻譯出來(lái),我就不做重復(fù)的工作,只摘要說(shuō)明一下。

      先看看Tapestry。下圖說(shuō)明了Tapestry是怎么樣獲取到service的。

      在文檔里,基于Tapestry和Spring的應(yīng)用被劃分成五層,我們只關(guān)注前邊兩層:User Interface Layer和Service Layer。這種劃分對(duì)于單獨(dú)使用Tapestry的應(yīng)用也是成立的,從上圖可以看出,那是對(duì)Service Layer的操作。當(dāng)進(jìn)行整合之后,User Interface Layer仍然是由Tapestry提供,而Service Layer則由Spring接手來(lái)提供。

      Service實(shí)際上就是Bean,Tapestry原本一套取得Service的機(jī)制:getEngine()->getService()。現(xiàn)在,我們用Spring將這些Serviec,也就是Bean管理起來(lái),那么,要解決的問題就只有一個(gè),如何讓Tapestry獲得由Spring管理起來(lái)的的Service?

      在Application Context里我們定義了需要被調(diào)用的Bean(見文檔),我們給它個(gè)名字就userService。那么,在Tapestry的page里,就需要載入這個(gè)context,然后取得beanA。

      一個(gè)最簡(jiǎn)單的方法是利用Spring的static工具WebApplicationContext在Tapestry page對(duì)應(yīng)的Java class definition里直接載入Application Context,并取得userService。

    WebApplicationContext appContext = WebApplicationContextUtils.getApplicationContext(
            getRequestCycle().getRequestContext().getServlet().getServletContext());
        UserService userService = appContext.getBean("userService");

      不過這種用法和我們用Spring的原意有點(diǎn)違背——這不符合DI模式。應(yīng)該在page里才決定我們調(diào)哪個(gè)Service。

      所以,推薦的做法如下。

      第一步,讓Tapestry page能夠獲得ApplicationContext,但這次不直接由Tapestry page來(lái)做,因?yàn)樵谖覀冃枰L問ApplicationContext的時(shí)候,Tapestry page很難拿到ServletContext,所以我們將其放到Enging里去做。代碼如下:

    package com.whatever.web.xportal;
    ...
    import ...
    ...
    public class MyEngine extends org.apache.tapestry.engine.BaseEngine {
     
        public static final String APPLICATION_CONTEXT_KEY = "appContext";

        protected void setupForRequest(RequestContext context) {
            super.setupForRequest(context);
        
            // insert ApplicationContext in global, if not there
            Map global = (Map) getGlobal();
            ApplicationContext ac = (ApplicationContext) global.get(APPLICATION_CONTEXT_KEY);
            if (ac == null) {
                ac = WebApplicationContextUtils.getWebApplicationContext(
                    context.getServlet().getServletContext()
                );
                global.put(APPLICATION_CONTEXT_KEY, ac);
            }
        }

      這樣就把ApplicationContext放到了global里去,然后我們指定MyEngine是后邊應(yīng)用里實(shí)際使用的的Engine:

    <application
        name="Whatever xPortal"
        engine-class="com.whatever.web.xportal.MyEngine">
    </application>

    (寫著寫著又像翻譯了……不爽-_-)

      第二步,在Tapestry page里取得Bean,代碼如下:

    <property-specification name="userService"
                            type="com.whatever.services.service.user.UserService">
        global.appContext.getBean("userService")
    </property-specification>

      第三步,在page對(duì)應(yīng)的Java class definition增加一個(gè)abstract訪問者,也就是一個(gè)abstract getter
    方法。代碼如下:

    public abstract UserService getUserService();

      當(dāng)Tapestry實(shí)際載入頁(yè)面的時(shí)候,會(huì)對(duì)類文件執(zhí)行runtime code方法以增加定義了的properties,并將上邊的abstract getter
    方法與新建的fields掛鉤起來(lái)。(瀑布汗^^|||)

      ok,這就完成了。詳細(xì)的example請(qǐng)看文檔。

      簡(jiǎn)單總結(jié)一下。Tapestry與Spring的整合實(shí)際上是把原本由Tapestry自己負(fù)責(zé)的Service Layer,也就是對(duì)Service/Bean的調(diào)用,交給Spring負(fù)責(zé)。實(shí)際的切入點(diǎn),則在于上圖所示的Engine處。

    posted on 2008-10-05 23:27 Blog of JoJo 閱讀(338) 評(píng)論(0)  編輯  收藏 所屬分類: Programming 相關(guān)

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章分類

    文章檔案

    新聞分類

    新聞檔案

    相冊(cè)

    收藏夾

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 免费看美女被靠到爽| 男女一进一出抽搐免费视频| 亚洲另类自拍丝袜第1页| 亚洲激情视频在线观看| 亚洲AV中文无码字幕色三| 久久夜色精品国产亚洲| 亚洲国产成人片在线观看无码 | 黄色网页免费观看| 亚洲AV无码AV吞精久久| 亚洲AV无码专区在线电影成人 | 精品日韩亚洲AV无码| 18亚洲男同志videos网站| 亚洲第一成年网站大全亚洲| 亚洲免费二区三区| 亚洲综合一区国产精品| 国产精品亚洲а∨无码播放不卡| 国产在亚洲线视频观看| 日韩大片免费观看视频播放 | 亚洲欧好州第一的日产suv| 激情无码亚洲一区二区三区| 麻豆69堂免费视频| 国产免费AV片在线观看播放| 成全在线观看免费观看大全| 性色午夜视频免费男人的天堂| 亚州免费一级毛片| 日本免费人成黄页在线观看视频| 亚洲免费视频一区二区三区| 亚洲码国产精品高潮在线| 亚洲最大福利视频网站| 久久久久se色偷偷亚洲精品av | 亚洲国产一区在线观看| 亚洲综合色婷婷在线观看| 特级做a爰片毛片免费看| 国产午夜免费高清久久影院| 在线a免费观看最新网站| 成年女人视频网站免费m| 亚洲AⅤ视频一区二区三区 | 国产乱人免费视频| 亚洲色大成网站www永久一区| 亚洲色图.com| 精品国产亚洲AV麻豆|