JaveShare&OpenSpace

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            7 Posts :: 0 Stories :: 7 Comments :: 0 Trackbacks
          http://www.javaeye.com/pages/viewpage.action?pageId=566?
          從這個例子中我們能掌握很多Tapestry的相關知識,下面我把自己對這個例子理解以及涉及到的一些知識作一些介紹:
          購物車較難的一部分就是客戶選擇的商品的保存問題:
          此例提供了一個很好的解決方案,將客戶選擇的商品都放在session中:
          那么,在Tapestry中如何利用session呢?這就要從Tapestry中的Visit對象說起。

          Visit對象是一個應用程序空間,用來儲存應用程序邏輯和數(shù)據(jù)。這個對象能被應用程序中所有的頁面和組件訪問,并且包含WEB應用程序中某一個客戶端的特殊信息。一個單一Visit對象實例被應用程序中所有的頁面共享。該對象類似HttpSession在典型servlet應用程序中扮演的角色。實際上,Visit對象最終作為一個HttpSession屬性被儲存。

          為了在應用程序中使用一些通用數(shù)據(jù),Tapestry認可Visit對象。Tapestry并不知道也不關心Visit對象的類型。在框架中也沒有定義特殊的Visit類,每一個應用程序自己定義Visit類。頁面方法訪問Visit對象時并不會指定具體的類型:

          public Object getVisit();

          注意強制轉(zhuǎn)換類型:

          Visit visit = (Visit)getVisit();

          Visit對象是框架自動生成的,在第一次運行時被引用。你必須配置Tapestry提供實例化,一旦Visit對象生成,就將會持久化儲存在HttpSession中。

          ????? 此例子中還有一些其他的相關知識點:
          ?????? Tapestry4.0中新增加的自定義的Validator功能
          ?????? 一段經(jīng)典的程序代碼:
          ValidationDelegate delegate = (ValidationDelegate)this.getBeans().getBean("delegate");
          if(delegate.getHasErrors()) {
          	returnthis.getPage().getPageName();
          }

          學習Tapestry4.0 過程中逐漸明白的一些東西
          從代碼開始分析
          在EmploeeList.html文件中的一段代碼:
          <tr jwcid="@Foreach" source="ognl:userList" value="ognl:customer" element="tr">
          ????? <td width="7%"? align="center" bgcolor="#FFFFFF"><span jwcid="@Insert" value="ognl:(customer.getAttributeValue('sex')==1)?'Male':'Female'"/></td>
          ?????? <td width="19%" align="center" bgcolor="#FFFFFF"><span jwcid="@Insert" value="ognl:customer.getAttributeValue('workemail')"/></td>
          ?? <td width="7%"? align="center" bgcolor="#FFFFFF"><span jwcid="@ExternalLink" page="xmlsync/EmployeeUpdate"???????parameters="ognl:customer.getAttributeValue('employeecode')"> 修 改 </span></td>
          ?? <td width="8%"? align="center" bgcolor="#FFFFFF"><span jwcid="deleteUser" parameters="ognl:customer.getAttributeValue('employeecode')" onclick="javascript:return window.confirm('確定要刪除該用戶嗎?');">刪 除</span></td>
          </tr>
          在EmploeeList.page文件中的一段代碼:
          <page-specification class="com.ce.myceaas.tapestry.page.xmlsync.EmployeeList">
          ?<description>Login Page</description>
          ???? <property name="userList"/>
          ???? <property name="customer"/>
          ??? <component id="deleteUser" type="DirectLink">
          ?? <binding name="listener" value="listeners.deleteUser"/>
          ??? </component>
          </page-specification>?
          在EmploeeList.java文件中的一段代碼:
          public abstract class EmployeeList extends BasePage implements PageRenderListener {
          ?public abstract List getUserList();
          ?public abstract void setUserList(List list);
          ?@InjectObject("spring:xmlService")
          ?public abstract XmlService getXmlService();
          ?@InjectPage("xmlsync/EmployeeList")
          ?public abstract IPage getEmployeeList();
          ?public void pageBeginRender(PageEvent event) {
          ??this.setUserList(this.getXmlService().getUsersList());
          ?}
          ?
          ?public void deleteUser(IRequestCycle cycle) {
          ??Object[] obj = cycle.getServiceParameters();
          ??if (obj[0] != null) {
          ???if (obj[0] instanceof String) {
          ????getXmlService().deleteUsers(obj[0].toString());
          ????FowardUtil.forwardUrl((EmployeeList)getEmployeeList());
          ????
          ???} else {
          ????}
          ??} else {
          ???}
          }
          在XmlService.java文件中的一段代碼:
          public List getUsersList(){
          ??
          ??List list = new ArrayList();
          ??SAXBuilder builder = new SAXBuilder();
          ???? try {
          ?????? File inFile = new File(url);??? //get the xmlfile?
          ?????? Document doc = builder.build(inFile);
          ?????? Element root = doc.getRootElement();
          ?????
          ?????? list = root.getChildren("employeeinfo");
          ???? }
          ???? catch (JDOMException e) {
          ?????? System.out.println(" is not well-formed.");
          ?????? System.out.println(e.getMessage());
          ???? }?
          ???? catch (IOException e) {
          ?????? System.out.println(e);
          ???? }
          ??return list;
          ???}
          可以在EmploeeList.html看到這段代碼
          ?"ognl:(customer.getAttributeValue('sex')==1)?'Male':'Female"
          其中的customer是從<tr jwcid="@Foreach" source="ognl:userList" value="ognl:customer" element="tr">這里來的
          userList是List類型 其中的元素是customer,customer的類型是Element,再看customer.getAttributeValue('sex'),這里為什么能用getAttributeValue()呢,這就要問Tapestry4.0的實現(xiàn)機制了,當網(wǎng)頁表現(xiàn)時遇到ognl:userList時會在EmploeeList.page中找到
          <property name="userList"/>
          而在EmploeeList.java中有
          ????? public abstract List getUserList();
          ?public abstract void setUserList(List list);
          這兩個抽象函數(shù)將完成對ognl:userList的賦值與修改工作
          下面這段代碼
          ?????? @InjectObject("spring:xmlService")//調(diào)用XmlService對象
          ??????? ······
          ?public abstract XmlService getXmlService();
          ??public void pageBeginRender(PageEvent event) {
          ??this.setUserList(this.getXmlService().getUsersList());//真正的實現(xiàn)userList的傳遞的工作
          ?}
          這段代碼將EmploeeList.html和XmlService.java聯(lián)系起來,這也就是為什么在 EmploeeList.html能用getAttributeValue('sex')方法的原因!
          posted on 2006-08-11 13:32 ~哈哈~ 閱讀(504) 評論(0)  編輯  收藏

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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 广平县| 靖边县| 邯郸县| 金坛市| 东源县| 乌兰察布市| 呼图壁县| 蓬安县| 浮山县| 巴彦县| 云安县| 巴楚县| 屯留县| 利辛县| 永吉县| 颍上县| 南安市| 嘉荫县| 崇文区| 卓资县| 延寿县| 阿拉尔市| 抚顺县| 赞皇县| 河北省| 濮阳市| 江阴市| 克什克腾旗| 临西县| 三明市| 武定县| 宁都县| 通海县| 万载县| 新兴县| 墨玉县| 凤台县| 上虞市| 普宁市| 永州市| 独山县|