Tapstry3的追忆------学习笔记(四)

接上例:http://blog.csdn.net/kunshan_shenbin/archive/2008/11/14/3300058.aspx

这回演示一下T3中比较难用的控件:Table组件(包括翻页组件)的用法:

如下图所示建立工程:

jar包和上例一致。

代码如下:

Global.java

  1. package mo.org.cpttm.phonebook;
  2. public class Global {
  3.     public PhoneBookTable phoneBookTable;
  4.     public PhoneBook phoneBook;
  5.     
  6.     public Global() {
  7.         phoneBookTable = new PhoneBookTable();
  8.         phoneBookTable.insert(new PhoneBookEntry(0new Name("Alan""Turing"), "111111"));
  9.         phoneBookTable.insert(new PhoneBookEntry(1new Name("Bill""Gates"), "111222"));
  10.         phoneBookTable.insert(new PhoneBookEntry(2new Name("Martin""Fowler"), "654321"));
  11.         phoneBookTable.insert(new PhoneBookEntry(3new Name("Kent""Beck"), "999001"));
  12.         phoneBookTable.insert(new PhoneBookEntry(4new Name("Howard""Ship"), "554433"));
  13.         phoneBookTable.insert(new PhoneBookEntry(5new Name("Linus""Torvalds"), "888777"));
  14.         phoneBookTable.insert(new PhoneBookEntry(6new Name("Ward""Cunningham"), "222222"));
  15.         phoneBookTable.insert(new PhoneBookEntry(7new Name("James""Gosling"), "333333"));
  16.         phoneBookTable.insert(new PhoneBookEntry(8new Name("Erich""Gamma"), "4444444"));
  17.         phoneBookTable.insert(new PhoneBookEntry(9new Name("Grady""Booch"), "5555555"));
  18.         phoneBookTable.insert(new PhoneBookEntry(10new Name("Bruce""Eckel"), "6666666"));
  19.         phoneBookTable.insert(new PhoneBookEntry(11new Name("Richard""Stallman"), "777777"));
  20.         phoneBook = new PhoneBook(phoneBookTable);
  21.     }
  22. }

Home.java

  1. package mo.org.cpttm.phonebook;
  2. import java.util.*;
  3. import org.apache.tapestry.*;
  4. import org.apache.tapestry.contrib.table.components.*;
  5. import org.apache.tapestry.contrib.table.model.*;
  6. import org.apache.tapestry.contrib.table.model.simple.*;
  7. import org.apache.tapestry.html.*;
  8. public class Home extends BasePage {
  9.     public List getSource() {
  10.         return ((Global) getGlobal()).phoneBook.getEntries();
  11.     }
  12.     public IBasicTableModel getModel() {
  13.         final PhoneBook phoneBook = ((Global) getGlobal()).phoneBook;
  14.         return new IBasicTableModel() {
  15.             public int getRowCount() {
  16.                 return phoneBook.getNoEntries();
  17.             }
  18.             public Iterator getCurrentPageRows(int nFirst, int nPageSize,
  19.                     ITableColumn objSortColumn, boolean bSortOrder) {
  20.                 String sortColumnId = objSortColumn == null ? null
  21.                         : objSortColumn.getColumnName();
  22.                 return phoneBook.getSomeEntries(nFirst, nPageSize,
  23.                         sortColumnId,
  24.                         bSortOrder == ITableSortingState.SORT_ASCENDING)
  25.                         .iterator();
  26.             }
  27.         };
  28.     }
  29.     public void onShowDetails(IRequestCycle cycle) {
  30.         Integer id = (Integer) cycle.getServiceParameters()[0];
  31.         System.out.println("Showing details for " + id.intValue());
  32.     }
  33.     public void onDelete(IRequestCycle cycle) {
  34.         TableView table = (TableView) getComponent("table");
  35.         TableRows rows = (TableRows)getComponent("rows");
  36.         int id = ((PhoneBookEntry) rows.getTableRow()).getId();
  37.         System.out.println("Deleting " + id);
  38.         PhoneBook phoneBook = ((Global) getGlobal()).phoneBook;
  39.         phoneBook.deleteEntry(id);
  40.         SimpleTableModel tableModel = ((SimpleTableModel) table.getTableModel());
  41.         tableModel.setDataModel(new SimpleListTableDataModel((List)table.getBinding("source").getObject()));
  42.         tableModel.tableDataChanged(null);
  43.         table.fireObservedStateChange();
  44.     }
  45. }

Name.java

  1. package mo.org.cpttm.phonebook;
  2. import java.io.*;
  3. public class Name implements Serializable {
  4.     private String firstName;
  5.     private String lastName;
  6.     public Name(String firstName, String lastName) {
  7.         this.firstName = firstName;
  8.         this.lastName = lastName;
  9.     }
  10.     public String getFirstName() {
  11.         return firstName;
  12.     }
  13.     public String getLastName() {
  14.         return lastName;
  15.     }
  16. }

PhoneBook.java

  1. package mo.org.cpttm.phonebook;
  2. import java.util.*;
  3. public class PhoneBook {
  4.     private PhoneBookTable table;
  5.     public PhoneBook(PhoneBookTable table) {
  6.         this.table = table;
  7.     }
  8.     public List getEntries() {
  9.         List result = new ArrayList();
  10.         ResultSet rs = table.selectAll();
  11.         while (rs.next()) {
  12.             result.add(rs.readEntry());
  13.         }
  14.         return result;
  15.     }
  16.     public int getNoEntries() {
  17.         return table.selectCount();
  18.     }
  19.     public List getSomeEntries(
  20.             int startIdx,
  21.             int noEntries,
  22.             String sortColumnId,
  23.             boolean isAscending) {
  24.         ResultSet rs = table.selectLimit(
  25.                 startIdx,
  26.                 noEntries,
  27.                 sortColumnId,
  28.                 isAscending);
  29.         List result = new ArrayList();
  30.         while (rs.next()) {
  31.             result.add(rs.readEntry());
  32.         }
  33.         return result;
  34.     }
  35.     public void deleteEntry(int id) {
  36.         table.delete(id);       
  37.     }
  38. }

PhoneBookEntry.java

  1. package mo.org.cpttm.phonebook;
  2. import java.io.*;
  3. public class PhoneBookEntry implements Serializable {
  4.     private int id;
  5.     private Name name;
  6.     private String telNo;
  7.     public PhoneBookEntry(int id, Name name, String telNo) {
  8.         this.id = id;
  9.         this.name = name;
  10.         this.telNo = telNo;
  11.     }
  12.     public Name getName() {
  13.         return name;
  14.     }
  15.     public int getId() {
  16.         return id;
  17.     }
  18.     public String getTelNo() {
  19.         return telNo;
  20.     }
  21.     public String getFirstName() {
  22.         return name.getFirstName();
  23.     }
  24. }

PhoneBookEntryComparator.java

  1. package mo.org.cpttm.phonebook;
  2. import java.util.*;
  3. public class PhoneBookEntryComparator implements Comparator {
  4.     private String columnName;
  5.     public PhoneBookEntryComparator(String columnName) {
  6.         this.columnName = columnName;
  7.     }
  8.     public int compare(Object obj1, Object obj2) {
  9.         PhoneBookEntry entry1 = (PhoneBookEntry) obj1;
  10.         PhoneBookEntry entry2 = (PhoneBookEntry) obj2;
  11.         if (columnName.equals("id")) {
  12.             return entry1.getId()-entry2.getId();
  13.         } else  if (columnName.equals("firstName")) {
  14.             return entry1.getFirstName().compareTo(entry2.getFirstName());
  15.         } else {
  16.             //Similar for other columns.
  17.             return 0;
  18.         }
  19.     }
  20. }

PhoneBookTable.java

  1. package mo.org.cpttm.phonebook;
  2. import java.util.*;
  3. public class PhoneBookTable {
  4.     private List entries;
  5.     public PhoneBookTable() {
  6.         entries = new ArrayList();
  7.     }
  8.     public void insert(PhoneBookEntry entry) {
  9.         entries.add(entry);
  10.     }
  11.     public ResultSet selectAll() {
  12.         System.out.println("Selecting all");
  13.         return new ResultSet(entries);
  14.     }
  15.     public int selectCount() {
  16.         return entries.size();
  17.     }
  18.     public ResultSet selectLimit(
  19.             int startIdx,
  20.             int noRecords,
  21.             String columnName,
  22.             boolean isAscending) {
  23.         System.out.println("Selecting with limit");
  24.         List sortedEntries = new ArrayList(entries);
  25.         if (columnName != null) {
  26.             Collections.sort(sortedEntries, new PhoneBookEntryComparator(
  27.                     columnName));
  28.             if (!isAscending) {
  29.                 Collections.reverse(sortedEntries);
  30.             }
  31.         }
  32.         List subList = sortedEntries.subList(startIdx, startIdx + noRecords);
  33.         return new ResultSet(subList);
  34.     }
  35.     public void delete(int id) {
  36.         for (Iterator iter = entries.iterator(); iter.hasNext();) {
  37.             PhoneBookEntry entry = (PhoneBookEntry) iter.next();
  38.             if (entry.getId()==id) {
  39.                 iter.remove();
  40.                 return;
  41.             }           
  42.         }
  43.     }
  44.     
  45. }

ResultSet.java

  1. package mo.org.cpttm.phonebook;
  2. import java.util.*;
  3. public class ResultSet {
  4.     private List entriesInResultSet;
  5.     private int currentIdx;
  6.     public ResultSet(List entriesInResultSet) {
  7.         this.entriesInResultSet = entriesInResultSet;
  8.         this.currentIdx = -1;
  9.     }
  10.     public boolean next() {
  11.         if (currentIdx < entriesInResultSet.size() - 1) {
  12.             currentIdx++;
  13.             return true;
  14.         } else {
  15.             return false;
  16.         }
  17.     }
  18.     public PhoneBookEntry readEntry() {
  19.         PhoneBookEntry entry = (PhoneBookEntry) entriesInResultSet.get(currentIdx);
  20.         System.out.println("Reading entry with id " + entry.getId());
  21.         return entry;
  22.     }
  23. }

PhoneBook.css

  1. tr.odd {background-color: RoyalBlue}
  2. tr.even {background-color: GreenYellow}
  3. th.title {background-color: Pink}

Home_zh_TW.properties

  1. firstName=?

Home.html

  1. <html jwcid="@Shell" title="Phone Book" stylesheet="ognl:assets.phoneBook">
  2. <head jwcid="$remove$">
  3. <title>Phone Book</title>
  4. <link rel="stylesheet" text="text/css" href="../css/PhoneBook.css"/>
  5. </head>
  6. <body>
  7. <span jwcid="table">
  8.     <table border="1">
  9.         <tr><span jwcid="@Contrib:TableColumns" class="title"/></tr>
  10.         <tr jwcid="rows@Contrib:TableRows" class="ognl:beans.evenOdd.next"><td jwcid="@Contrib:TableValues"/></tr>
  11.     </table>
  12.     <span jwcid="@Contrib:TablePages"/>
  13. </span>
  14. <table border="1" jwcid="$remove$">
  15.     <tr><th>ID</th><th>First name</th><th>Last name</th><th>Tel #</th><th>Delete</th></tr>
  16.     <tr class="odd">
  17.         <td>1</td>
  18.         <td>Britney</td>
  19.         <td>Spears</td>
  20.         <td>376926</td>
  21.         <td>
  22.             <form>
  23.                 <input type="submit" value="Delete"/>
  24.             </form>
  25.         </td>
  26.     </tr>
  27.     <tr class="even"><td>2</td><td>Elton</td><td>John</td><td>285984</td><td>Delete</td></tr>
  28.     <tr class="odd"><td>3</td><td>David</td><td>Letterman</td><td>877357</td><td>Delete</td></tr>
  29. </table>
  30. <span jwcid="deleteColumnValue">
  31.         <form jwcid="deleteForm">
  32.             <input type="submit" value="Delete"/>
  33.         </form>
  34. </span>
  35. <span jwcid="firstNameColumnValue">
  36.     <a href="" jwcid="firstNameLink"><span jwcid="firstName">Britney</span></a>
  37. </span>
  38. </body>
  39. </html>

Home.page

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE page-specification PUBLIC
  3.   "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
  4.   "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
  5. <!-- generated by Spindle, http://spindle.sourceforge.net -->
  6. <page-specification class="mo.org.cpttm.phonebook.Home">
  7.     <context-asset name="phoneBook" path="/css/PhoneBook.css"/>
  8.     <bean name="evenOdd" class="org.apache.tapestry.bean.EvenOdd">
  9.         <set-property name="even" expression="false"/>
  10.     </bean>
  11.     <component id="table" type="Contrib:TableView">
  12.         <binding name="source" expression="source"/>
  13.         <binding name="tableSessionStateManager" expression="new org.apache.tapestry.contrib.table.model.common.FullTableSessionStateManager()"/>
  14.         <static-binding
  15.             name="columns"
  16.             value="id, firstName, lastName:name.lastName, telNo, !delete"/>
  17.         <static-binding name="pageSize" value="3"/>
  18.     </component>
  19.     <component id="deleteColumnValue" type="Block"/>
  20.     <component id="deleteForm" type="Form">
  21.         <binding name="listener" expression="listeners.onDelete"/>
  22.         <binding name="direct" expression="false"/>
  23.     </component>
  24.     <component id="firstNameColumnValue" type="Block"/>
  25.     <component id="firstNameLink" type="DirectLink">
  26.         <binding name="listener" expression="listeners.onShowDetails"/>
  27.         <binding name="parameters" expression="components.rows.tableRow.id"/>
  28.     </component>
  29.     <component id="firstName" type="Insert">
  30.         <binding name="value" expression="components.rows.tableRow.firstName"/>
  31.     </component>
  32. </page-specification>

Home.properties

  1. firstName=First name
PhoneBook.application

 

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE application PUBLIC
  3.   "-//Apache Software Foundation//Tapestry Specification 3.0//EN"
  4.   "http://jakarta.apache.org/tapestry/dtd/Tapestry_3_0.dtd">
  5. <!-- generated by Spindle, http://spindle.sourceforge.net -->
  6. <application name="PhoneBook" engine-class="org.apache.tapestry.engine.BaseEngine">
  7.     <property name="org.apache.tapestry.global-class" value="mo.org.cpttm.phonebook.Global"/>
  8.     <page name="Home" specification-path="Home.page"/>
  9.     <library id="Contrib" specification-path="/org/apache/tapestry/contrib/Contrib.library"/>
  10. </application>

web.xml

  1. <?xml version="1.0"?>
  2. <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  3.     xmlns:xsi="http://www.w3.org/TR/xmlschema-1/"
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
  5.     <display-name>PhoneBook</display-name>
  6.     <servlet>
  7.         <servlet-name>PhoneBook</servlet-name>
  8.         <servlet-class>org.apache.tapestry.ApplicationServlet</servlet-class>
  9.         <load-on-startup>1</load-on-startup>
  10.     </servlet>
  11.     <servlet-mapping>
  12.         <servlet-name>PhoneBook</servlet-name>
  13.         <url-pattern>/app</url-pattern>
  14.     </servlet-mapping>
  15. </web-app>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值