Open-Open

          皇家撒拉哥薩
          posts - 32, comments - 3, trackbacks - 0, articles - 1

          [轉(zhuǎn)貼]Tapestry 心得

          Posted on 2006-03-26 00:29 開源愛好者 閱讀(247) 評(píng)論(0)  編輯  收藏 所屬分類: Tapestry
          對(duì)于整個(gè)tapestry的設(shè)計(jì)和實(shí)現(xiàn)其實(shí)最核心的部分就是對(duì)于頁(yè)面和配置頁(yè)以及邏輯類的配合。在學(xué)習(xí)和使用tapestry的時(shí)候,我們可以完全不用理會(huì)jsp的概念,因?yàn)樗麄儚脑O(shè)計(jì)思想上就完全不同。
          ??傳統(tǒng)的jsp設(shè)計(jì),或者說(shuō)servlet設(shè)計(jì)是一種根據(jù)jsp和servlet不同的優(yōu)點(diǎn)設(shè)計(jì)的mvc模式。對(duì)于jsp,顯示更加便捷,更加靈活,所以更多地用于頁(yè)面顯示,而servlet則更多的突現(xiàn)了它對(duì)于后臺(tái)的強(qiáng)大控制力,所以更多地被用于控制器,也就是controller。mvc的設(shè)計(jì)模式是,無(wú)論什么樣的請(qǐng)求,都需要通過(guò)對(duì)于url的模糊匹配被定位到第一級(jí)或者頂級(jí)控制器,再通過(guò)控制器對(duì)于所傳遞的請(qǐng)求進(jìn)行解析分析后,重定向到正確的處理類中,也就是說(shuō),我們對(duì)于整個(gè)應(yīng)用需要些大于總頁(yè)面?zhèn)€數(shù)的java類來(lái)完成所規(guī)定功能。這在一定程度上浪費(fèi)了資源和開發(fā)時(shí)間。當(dāng)然,在軟件工程學(xué)中,本就提出了幾種不同的解決方法,mvc模式可以使我們應(yīng)用更加清晰化,更加可維護(hù)化。
          ??當(dāng)然,抽象地說(shuō),tapestry在設(shè)計(jì)中完全沒(méi)有了控制器的概念。當(dāng)然這也是個(gè)人的觀點(diǎn)。開發(fā)過(guò)程中,我只是設(shè)計(jì),在用戶使用我所寫的頁(yè)面的時(shí)候會(huì)出現(xiàn)多少種狀況,然后設(shè)計(jì)相應(yīng)的頁(yè)面。這樣就更加類似我們?cè)赾中的開發(fā),瀑布式開發(fā)模式。還是做個(gè)例子比較好,對(duì)不對(duì)?
          暫時(shí)不給大家.htm和.page文件了,不然大家會(huì)越來(lái)越暈的,只給大家講解一下.java文件
          public abstract void SubjectList extends GbsBasePage
          {
          ???? public abstract Subject getSubject();
          ???? public abstract void setSubject();

          ???? public abstract Subject getParentSubject();
          ???? public abstract void setSubject();

          ???? public IsubjectService getIsubjectService()
          ???? {return (IsubjectService)getService("subjectService");}

          ???? public List getSubjectList()
          ???? {
          ?????????? List list=new ArrayList(getSubject().getSubjects());
          ?????????? return list;
          ???? }
          ????
          ??????public void addSubject(IRequestCycle cycle)
          ??????{
          ?????????? AddSubject addSubject=(AddSubject)cycle.getPage("add_subject");
          ??????????
          ?????????? addSubject.setParentSubject(getSubject().getParentSubject());
          ?????????? forward(cycle,"add_subject");
          ??????}

          ??????public void defineSubSubject(IRequestCycle cycle)
          ??????{
          ??????????SubjectList subjectList=(SubjectList)cycle.getPage("subject_list");
          ??????????subjectList.setParentSubject(getSubject);
          ??????????forward(cycle,"subject_list");
          ??????}
          }
          ???? 朋友們可能會(huì)看得很迷糊,對(duì)吧?其實(shí)這就是tapestry的優(yōu)點(diǎn)了。如果你希望把一些東西綁定在頁(yè)面上的話,那么我根本就不需要在java類中處理他們,只需要將實(shí)體類在.page中聲明一下,例如,
          <property-specification name="subject" type="com.tapestry.Subject"/>
          ???? 然后在java類中抽象的聲明他們,tapestry就會(huì)自動(dòng)將你所需要綁定的屬性綁定在實(shí)體上,處理的時(shí)候只需要調(diào)用就可以了。
          ?? 那么,這個(gè)IService又是怎么回事兒呢?其實(shí)我們?cè)陧?yè)面之間進(jìn)行數(shù)據(jù)或者實(shí)體傳遞的時(shí)候,為了提高速度,或者提高效率,或者提高安全性,我們都可以通過(guò)傳遞id的方式進(jìn)行,那么通過(guò)spring的service方法,我們就可以快速的找到這個(gè)實(shí)體,例如:
          Subject subject=getSubjectService().Load(getSubject().getID());
          ???? 同時(shí),我們這個(gè)頁(yè)面所需要的控件也需要我們傳遞相應(yīng)的參數(shù)來(lái)顯示我們所需要的效果,這就是為什么要有g(shù)etSubjectList()這個(gè)方法了。在我們使用foreach控件或者actionTable控件的時(shí)候,都需要我們傳遞一個(gè)list用來(lái)顯示,那么這個(gè)list就來(lái)自這個(gè)方法。
          ????我們可以添加subject這個(gè)實(shí)體,那么tapestry就會(huì)自動(dòng)調(diào)用addSubject()這個(gè)方法來(lái)使得頁(yè)面進(jìn)入添加頁(yè)面。上一次曾經(jīng)說(shuō)過(guò),tapestry中所有的頁(yè)面都是一個(gè)java類,所以,相應(yīng)的負(fù)值也就變得理所當(dāng)然了。addSubject.setParentSubject(getSubject().getParentSubject());
          ???? 最后,我們要把所有的請(qǐng)求和相應(yīng)一起發(fā)給正確的頁(yè)面forward(cycle,"add_subject");
          同時(shí),我們還可以在自己和自己中不停的跳轉(zhuǎn)。這時(shí)我們就可以無(wú)限的定義我們的樹型結(jié)構(gòu)了,因?yàn)槲覀冎恍枰o自己傳遞不同的參數(shù)就可以了。

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宝兴县| 河间市| 巫溪县| 黑水县| 徐汇区| 顺义区| 沐川县| 建始县| 孟连| 昆山市| 西平县| 耒阳市| 庄浪县| 顺平县| 浑源县| 濮阳县| 民县| 达拉特旗| 北辰区| 凯里市| 广东省| 太保市| 甘肃省| 周口市| 兴安盟| 扶绥县| 镇宁| 济南市| 甘肃省| 清水河县| 茂名市| 湄潭县| 苗栗县| 南靖县| 梅州市| 应城市| 崇仁县| 确山县| 余江县| 石门县| 崇左市|