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

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

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

    JaveShare&OpenSpace

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

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

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

    public Object getVisit();

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

    Visit visit = (Visit)getVisit();

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

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

    學(xué)習(xí)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的實(shí)現(xiàn)機(jī)制了,當(dāng)網(wǎng)頁表現(xiàn)時(shí)遇到ognl:userList時(shí)會在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());//真正的實(shí)現(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)站導(dǎo)航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 亚洲黄色片免费看| 一级毛片**不卡免费播| 午夜爱爱免费视频| 亚洲伦理一二三四| 99久久国产热无码精品免费 | 88xx成人永久免费观看| 亚洲AV无码一区二区三区系列| 一级毛片成人免费看a| 亚洲AV成人精品日韩一区18p| 久久亚洲精品高潮综合色a片| 午夜网站免费版在线观看| 亚洲精品无码专区| 国产免费看插插插视频| 成人免费网站视频www| 国产精品V亚洲精品V日韩精品| 一级毛片视频免费观看| 最新国产AV无码专区亚洲 | 不卡精品国产_亚洲人成在线| 一区二区三区免费在线视频 | 亚洲综合在线观看视频| 9420免费高清在线视频| 亚洲丰满熟女一区二区v| 成人au免费视频影院| 福利片免费一区二区三区| 国产亚洲AV手机在线观看| 久9久9精品免费观看| 亚洲精品第一国产综合精品| 成年美女黄网站色大免费视频| WWW国产亚洲精品久久麻豆| 亚洲午夜福利精品久久| 一区二区免费视频| 日韩欧美亚洲中文乱码| 亚洲精品无码鲁网中文电影| 最近中文字幕大全中文字幕免费 | 九一在线完整视频免费观看| 亚洲男人都懂得羞羞网站| 成人免费看片又大又黄| 一区二区三区免费电影| 亚洲人成片在线观看| yy6080亚洲一级理论| 精品一区二区三区无码免费视频 |