<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)想而來,為自由而生。 性情若水,風(fēng)起水興,風(fēng)息水止,故時(shí)而激蕩,時(shí)又清平……
    posts - 11,  comments - 30,  trackbacks - 0
    http://tech.blogbus.com/logs/219144.html

    兩個(gè)月前,寫了一篇blog,名為《將Tapestry整合到Spring里去》,是根據(jù)文檔做了理論上的說明。這陣子終于開始動(dòng)手做,由于犯了一個(gè)很低級(jí)的錯(cuò)誤,浪費(fèi)了很多時(shí)間,直到周六才“擺平”,很高興。網(wǎng)上這方面的資料非常少,我把實(shí)際操作過程再介紹一下,也算補(bǔ)一下文檔的不足。事實(shí)上Spring網(wǎng)站的文檔是給對(duì)Spring和Tapestry都有開發(fā)經(jīng)驗(yàn)的人寫的,多少有點(diǎn)過于簡略,不是很方便使用。

    第一步:寫一個(gè)Java Bean供后邊調(diào)用:

    package my;//接口
    public interface IBean {
     public void amethod();
    }

    package my;//實(shí)現(xiàn)類
    public class Bean implements IBean {
     
     public void amethod() {
      //do something;
     }
    }

    第二步:編寫Spring的context config文檔applicationContext.xml,放在web應(yīng)用的/WEB-INF目錄下

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
    "
    http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
     <bean id="aBean" class="my.Bean">
     </bean>
    </beans>

    第三步:先試試直接載入Spring Application Context的做法。寫一個(gè)tapestry頁面(這里要求你對(duì)tapestry多少有點(diǎn)認(rèn)識(shí)),如test.html,在對(duì)應(yīng)的test.java中寫入以下代碼:

    WebApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(getRequestCycle().getRequestContext().getServlet().getServletContext());
    IBean bean = appContext.getBean("aBean");
    bean.amethod();

    這里要說明一下,Spring的幫助文檔有點(diǎn)錯(cuò)誤,它用了WebApplicationContextUtils.getApplicationContext()的方法,但實(shí)際不存在這個(gè)方法,應(yīng)該用WebApplicationContextUtils.getWebApplicationContext()

    第四步,改為推薦的做法,在Engine里做上邊的getWebApplicationContext(),并將其寫到tapestry的global對(duì)象里邊去。

    public class MyEngine extends BaseEngine {
     public static final String APPLICATION_CONTEXT_KEY = "appContext";
     protected void setupForRequest(RequestContext context) {
      super.setupForRequest(context);
      Map global = (Map) getGlobal();
      ApplicationContext ac = (ApplicationContext) global.get(APPLICATION_CONTEXT_KEY);
      if (ac == null) { ac = WebApplicationContextUtils.getWebApplicationContext(context.getServlet().getServletContext());
       System.out.println("測(cè)試" + ac);//你可以看看這一句在什么時(shí)候執(zhí)行,從而了解Engine是什么時(shí)候被調(diào)用的;
       global.put(APPLICATION_CONTEXT_KEY, ac);
      }
     }
    }

    global是一個(gè)Map,我們?cè)诶镞呍黾恿艘粋€(gè)屬性appContext,并將取到的ApplicationContext放進(jìn)去,以后,通過調(diào)用global.appContext就可以得到context,并用來getBean。

    第五步,在tapestry應(yīng)用的sample.application文檔(文件名與web.xml對(duì)應(yīng))里,指定所使用的Engine,也就是第四步寫的內(nèi)容:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE application PUBLIC
      "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
      "
    http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">

    <application name="Sample Application" 
     engine-class="MyEngine">
     <page name="test" specification-path="test.page"/>
    </application>

    第六步:在test.html對(duì)應(yīng)的test.page里,加入獲取bean的操作,代碼如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE page-specification PUBLIC
      "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
      "
    http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
    <page-specification class="test">
      <property-specification name="aBean" type="my.IBean">
       global.appContext.getBean("aBean")
      </property-specification>
    </page-specification>

    第七步:在test.java里增加一個(gè)abstract getter:

    public abstract IBean getABean();

    之后,就可以在代碼里用getABean()的方法獲取我們需要的bean了,如:

    getABean().amethod();

    當(dāng)然,不要忘了編輯web.xml文檔:

    <?xml version="1.0"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "
    http://java.sun.com/dtd/web-app_2_3.dtd">
    <web-app>
     <display-name>Tapestry Tutorial</display-name>
     <!--Redirect it to the servlet mapping address /h-->
     <filter>
      <filter-name>redirect</filter-name>
      <filter-class>org.apache.tapestry.RedirectFilter</filter-class>
      <init-param>
       <param-name>redirect-path</param-name>
       <param-value>/app</param-value>
      </init-param>
     </filter>

     <filter-mapping>
      <filter-name>redirect</filter-name>
      <url-pattern>/</url-pattern>
     </filter-mapping>
       
     <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/applicationContext.xml</param-value>
     </context-param>
     <servlet>
      <servlet-name>context</servlet-name>
      <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
     </servlet>
     
     <servlet>
      <servlet-name>sample</servlet-name>
      <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
      <load-on-startup>0</load-on-startup>
     </servlet>

     <servlet-mapping>
      <servlet-name>sample</servlet-name>
      <url-pattern>/app</url-pattern>
     </servlet-mapping>

     <session-config>
      <session-timeout>15</session-timeout>
     </session-config>
     
     <welcome-file-list>
      <welcome-file>index.htm</welcome-file>
     </welcome-file-list>
     
    </web-app>

    小結(jié):事實(shí)上,這個(gè)過程與我上次寫的內(nèi)容大體相似,不過經(jīng)過實(shí)踐之后,我可以肯定地說這是走得通的,如果你配置時(shí)出現(xiàn)問題,那可能是在一些其它地方忽略了什么。象我這一次就是……嗯,具體的不說了,說出來會(huì)很不好意思的。如果有人配置時(shí)正好看到這篇文檔,希望對(duì)你有幫助^_^

    Ps其實(shí)這一次失誤的過程也可以寫成篇blog,重點(diǎn)在于期間的心路歷程。不過還是算了。這段時(shí)間的工作受情緒影響太大了,如果以后成為管理者,一定要注意下屬的情緒問題并盡量予以解決,而不能認(rèn)為職場(chǎng)不需要關(guān)注這樣的事。

    又:Blogbus回退時(shí)輸入數(shù)據(jù)會(huì)丟失,雖然我知道這是Web應(yīng)用開發(fā)里的難題,不過還是希望能夠列入待解決的問題里去-_-

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

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

    常用鏈接

    留言簿(6)

    隨筆檔案

    文章分類

    文章檔案

    新聞分類

    新聞檔案

    相冊(cè)

    收藏夾

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲国产AV一区二区三区四区| 中文在线免费看视频| 亚洲AV无码专区日韩| 大胆亚洲人体视频| 国产精品免费大片| 亚洲欧美日韩中文字幕在线一区| 亚洲精品无码久久毛片| 91精品国产免费入口| 日韩色视频一区二区三区亚洲 | 亚洲av无码一区二区三区天堂古代| 精品国产免费观看| 久久久久se色偷偷亚洲精品av| 亚洲 国产 图片| 日本免费xxxx色视频| 中文字幕亚洲综合精品一区| 国产在线a不卡免费视频| 人妻无码一区二区三区免费 | 亚洲AV成人片无码网站| 亚洲AV无码乱码在线观看裸奔| 午夜dj免费在线观看| 久久久久免费看成人影片| 免费VA在线观看无码| 亚洲人成网站日本片| 国产亚洲综合网曝门系列| 国产成人精品免费直播| 青娱乐免费在线视频| 亚洲国产日韩综合久久精品| 妞干网在线免费观看| 91成人在线免费观看| 中文字幕在线免费播放| 国产AV无码专区亚洲AV麻豆丫| 亚洲第一成年网站大全亚洲| 亚洲午夜福利在线观看| 四虎影视精品永久免费网站| 久久免费国产精品| 一区二区三区亚洲| 亚洲综合在线另类色区奇米| 免费在线观看中文字幕| 在线播放高清国语自产拍免费| 亚洲一区免费视频| 鲁大师在线影院免费观看|