Máy ứng dụng của Google cho Java - Phần 2: Xây dựng ứng dụng sát thủ

Tóm tắt: Toàn bộ ý nghĩa của một nền tảng đám mây giống như Máy ứng dụng

của Google (Google App Engine) cho Java™ là ở chỗ có thể tưởng tượng, xây

dựng và triển khai các ứng dụng sát thủ có chất lượng chuyên nghiệp có thể mở

rộng —không phải phá sản ngân hàng hoặc biến mình thành người mất trí. Trong

phần thứ hai của bài viết ba phần của mình giới thiệu về Máy ứng dụng của

Google cho Java, Rick Hightower sẽ đưa bạn vượt ra ngoài các ví dụ làm sẵn của

Phần 1bằng một hướng dẫn từng bước để viết và triển khai một ứng dụng quản lý

liên hệ đơn giản bằng cách sử dụng Máy ứng dụng choJava.

pdf40 trang | Chuyên mục: Java | Chia sẻ: dkS00TYs | Lượt xem: 2029 | Lượt tải: 0download
Tóm tắt nội dung Máy ứng dụng của Google cho Java - Phần 2: Xây dựng ứng dụng sát thủ, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 trả về từ máy chủ. Sau đó nó lặp lại qua 
toàn bộ danh sách liên hệ, đưa tên, số điện thoại và e-mail của mỗi mối liên hệ vào 
ba cột đầu tiên của mỗi hàng. Nó cũng cung cấp một đường liên kết Edit (Chỉnh 
sửa) và một đường liên kết Remove (Loại bỏ) cho mỗi mối liên hệ, cho phép 
người dùng dễ dàng loại bỏ và sửa mối liên hệ. 
Người dùng sửa đổi một mối liên hệ hiện có 
Khi người dùng nhấn vào một đường liên kết Edit từ danh sách các các mối liên 
hệ, gui_eventContactGridClicked được gọi, như chỉ ra trong Liệt kê 15: 
Liệt kê 15. Phương thức trình xử lý sự kiện gui_eventContactGridClicked 
của ContactListGUI 
 public class ContactListGUI { 
 ... 
 public void gui_eventContactGridClicked(Cell cellClicked) { 
 int row = cellClicked.getRowIndex(); 
 int col = cellClicked.getCellIndex(); 
 Contact contact = this.contacts.get(row); 
 this.status.setText("Name was " + contact.getName() + " clicked "); 
 if (col==EDIT_LINK) { 
 this.addNewButton.setVisible(false); 
 this.updateButton.setVisible(true); 
 this.addButton.setVisible(false); 
 this.emailField.setReadOnly(true); 
 loadForm(contact); 
 } else if (col==REMOVE_LINK) { 
 this.contactService.removeContact(contact); 
 } 
 } 
 ... 
 private void loadForm(Contact contact) { 
 this.formGrid.setVisible(true); 
 currentContact = contact; 
 this.emailField.setText(contact.getEmail()); 
 this.phoneField.setText(contact.getPhone()); 
 this.nameField.setText(contact.getName()); 
 } 
Phương thức gui_eventContactGridClicked phải xác định xem liên kết Edit hay là 
liên kết Remove đã được nhấn. Nó thực hiện điều này bằng cách tìm hiểu xem cột 
nào được nhấn. Sau đó nó sẽ che dấu addNewButton và addButton và làm cho 
thấy rõ updateButton. updateButton hiển thị trong formGrid và cho phép người 
dùng gửi thông tin cập nhật quay trở về ContactService. Nó cũng làm cho 
emailField chỉ đọc để cho người dùng không thể chỉnh sửa trường e-mail này. 
Tiếp theo, gui_eventContactGridClicked gọi loadForm (như thấy trong Liệt kê 
15), đặt trạng thái formGrid thành visible (nhìn thấy được), đặt trạng thái mối liên 
hệ là đang được chỉnh sửa và sau đó sao chép các thuộc tính của mối liên hệ này 
vào các tiện ích emailField, phoneField và nameField. 
Khi người dùng nhấn vào updateButton, phương thức trình xử lý sự kiện 
gui_eventUpdateButtonClicked được gọi, như trong Liệt kê 16. Phương thức này 
làm cho addNewButton nhìn thấy được (như vậy người sử dụng có thể thêm số 
liên hệ mới) và che dấu formGrid. Sau đó nó gọi copyFieldDateToContact, sao 
chép văn bản từ các tiện ích emailField, phoneField và nameField trở lại vào các 
thuộc tính của currentContact. Rồi nó gọi phương thức ContactServiceDelegate 
updateContact để chuyển mối liên hệ vừa được cập nhật trở lại cho dịch vụ. 
Liệt kê 16.Phương thức trình xử lý sự kiện gui_eventUpdateButtonClicked 
của ContactListGUI 
 public class ContactListGUI { 
 ... 
 public void gui_eventUpdateButtonClicked() { 
 addNewButton.setVisible(true); 
 formGrid.setVisible(false); 
 copyFieldDateToContact(); 
 this.contactService.updateContact(currentContact); 
 } 
 private void copyFieldDateToContact() { 
 currentContact.setEmail(emailField.getText()); 
 currentContact.setName(nameField.getText()); 
 currentContact.setPhone(phoneField.getText()); 
 } 
Hai kịch bản này sẽ cho bạn một ý tưởng về cách ứng dụng làm việc, cũng như 
cách nó lấy ra cơ sở hạ tầng được Máy ứng dụng cho Java cung cấp như thế nào. 
Mã đầy đủ của ContactListGUI được hiển thị trong Liệt kê 17: 
Liệt kê 17. Mã đầy đủ của ContactListGUI 
package gaej.example.contact.client; 
import java.util.List; 
import com.google.gwt.user.client.ui.Button; 
import com.google.gwt.user.client.ui.Grid; 
import com.google.gwt.user.client.ui.Hyperlink; 
import com.google.gwt.user.client.ui.Label; 
import com.google.gwt.user.client.ui.RootPanel; 
import com.google.gwt.user.client.ui.TextBox; 
import com.google.gwt.user.client.ui.HTMLTable.Cell; 
public class ContactListGUI { 
 /* Constants. */ 
 private static final String CONTACT_LISTING_ROOT_PANEL = 
"contactListing"; 
 private static final String CONTACT_FORM_ROOT_PANEL = 
"contactForm"; 
 private static final String CONTACT_STATUS_ROOT_PANEL = 
"contactStatus"; 
 private static final String CONTACT_TOOL_BAR_ROOT_PANEL = 
"contactToolBar"; 
 private static final int EDIT_LINK = 3; 
 private static final int REMOVE_LINK = 4; 
 /* GUI Widgets */ 
 protected Button addButton; 
 protected Button updateButton; 
 protected Button addNewButton; 
 protected TextBox nameField; 
 protected TextBox emailField; 
 protected TextBox phoneField; 
 protected Label status; 
 protected Grid contactGrid; 
 protected Grid formGrid; 
 /* Data model */ 
 private List contacts; 
 private Contact currentContact; 
 protected ContactServiceDelegate contactService; 
 public void init() { 
 addButton = new Button("Add new contact"); 
 addNewButton = new Button("Add new contact"); 
 updateButton = new Button("Update contact"); 
 nameField = new TextBox(); 
 emailField = new TextBox(); 
 phoneField = new TextBox(); 
 status = new Label(); 
 contactGrid = new Grid(2,5); 
 buildForm(); 
 placeWidgets(); 
 } 
 private void buildForm() { 
 formGrid = new Grid(4,3); 
 formGrid.setVisible(false); 
 formGrid.setWidget(0, 0, new Label("Name")); 
 formGrid.setWidget(0, 1, nameField); 
 formGrid.setWidget(1, 0, new Label("email")); 
 formGrid.setWidget(1, 1, emailField); 
 formGrid.setWidget(2, 0, new Label("phone")); 
 formGrid.setWidget(2, 1, phoneField); 
 formGrid.setWidget(3, 0, updateButton); 
 formGrid.setWidget(3, 1, addButton); 
 } 
 private void placeWidgets() { 
 RootPanel.get(CONTACT_LISTING_ROOT_PANEL).add(contactGrid); 
 RootPanel.get(CONTACT_FORM_ROOT_PANEL).add(formGrid); 
 RootPanel.get(CONTACT_STATUS_ROOT_PANEL).add(status); 
RootPanel.get(CONTACT_TOOL_BAR_ROOT_PANEL).add(addNewButton); 
 } 
 private void loadForm(Contact contact) { 
 this.formGrid.setVisible(true); 
 currentContact = contact; 
 this.emailField.setText(contact.getEmail()); 
 this.phoneField.setText(contact.getPhone()); 
 this.nameField.setText(contact.getName()); 
 } 
 private void copyFieldDateToContact() { 
 currentContact.setEmail(emailField.getText()); 
 currentContact.setName(nameField.getText()); 
 currentContact.setPhone(phoneField.getText()); 
 } 
 public void gui_eventContactGridClicked(Cell cellClicked) { 
 int row = cellClicked.getRowIndex(); 
 int col = cellClicked.getCellIndex(); 
 Contact contact = this.contacts.get(row); 
 this.status.setText("Name was " + contact.getName() + " clicked "); 
 if (col==EDIT_LINK) { 
 this.addNewButton.setVisible(false); 
 this.updateButton.setVisible(true); 
 this.addButton.setVisible(false); 
 this.emailField.setReadOnly(true); 
 loadForm(contact); 
 } else if (col==REMOVE_LINK) { 
 this.contactService.removeContact(contact); 
 } 
 } 
 public void gui_eventAddButtonClicked() { 
 addNewButton.setVisible(true); 
 formGrid.setVisible(false); 
 copyFieldDateToContact(); 
 this.phoneField.getText(); 
 this.contactService.addContact(currentContact); 
 } 
 public void gui_eventUpdateButtonClicked() { 
 addNewButton.setVisible(true); 
 formGrid.setVisible(false); 
 copyFieldDateToContact(); 
 this.contactService.updateContact(currentContact); 
 } 
 public void gui_eventAddNewButtonClicked() { 
 this.addNewButton.setVisible(false); 
 this.updateButton.setVisible(false); 
 this.addButton.setVisible(true); 
 this.emailField.setReadOnly(false); 
 loadForm(new Contact()); 
 } 
 public void service_eventListRetrievedFromService(List result) { 
 status.setText("Retrieved contact list"); 
 this.contacts = result; 
 this.contactGrid.clear(); 
 this.contactGrid.resizeRows(this.contacts.size()); 
 int row = 0; 
 for (Contact contact : result) { 
 this.contactGrid.setWidget(row, 0, new Label(contact.getName())); 
 this.contactGrid.setWidget(row, 1, new Label (contact.getPhone())); 
 this.contactGrid.setWidget(row, 2, new Label (contact.getEmail())); 
 this.contactGrid.setWidget(row, EDIT_LINK, new Hyperlink("Edit", 
null)); 
 this.contactGrid.setWidget(row, REMOVE_LINK, new 
Hyperlink("Remove", null)); 
 row ++; 
 } 
 } 
 public void service_eventAddContactSuccessful() { 
 status.setText("Contact was successfully added"); 
 this.contactService.listContacts(); 
 } 
 public void service_eventUpdateSuccessful() { 
 status.setText("Contact was successfully updated"); 
 this.contactService.listContacts(); 
 } 
 public void service_eventRemoveContactSuccessful() { 
 status.setText("Contact was removed"); 
 this.contactService.listContacts(); 
 } 
 public void service_eventUpdateContactFailed(Throwable caught) { 
 status.setText("Update contact failed"); 
 } 
 public void service_eventAddContactFailed(Throwable caught) { 
 status.setText("Unable to update contact"); 
 } 
 public void service_eventRemoveContactFailed(Throwable caught) { 
 status.setText("Remove contact failed"); 
 } 
 public void service_eventListContactsFailed(Throwable caught) { 
 status.setText("Unable to get contact list"); 
 } 
} 
Kết luận 
Phần thứ hai này của bài giới thiệu ba phần về Máy ứng dụng của Google cho Java 
đã giới thiệu cho bạn về quá trình tạo một ứng dụng GWT tùy chỉnh bằng cách sử 
dụng các công cụ của trình cắm thêm (plugin) Eclipse cho Máy ứng dụng cho 
Java. Trong quá trình xây dựng ứng dụng quản lý liên hệ đơn giản, bạn đã học 
được cách: 
 Xây dựng các dịch vụ từ xa hoạt động không đồng bộ. 
 Tổ chức mã GUI để tránh các khai báo lớp bên trong lồng nhau. 
 Sử dụng GWT để triển khai thực hiện chức năng đối với hai trường hợp sử 
dụng chủ yếu. 
Hãy đọc tiếp Phần 3 của bài viết này, ở đây bạn sẽ cải thiện ứng dụng quản lý liên 
hệ và bổ sung thêm sự hỗ trợ để tiếp tục duy trì các đối tượng Contact với các 
phương tiện kho lưu trữ dữ liệu của Máy ứng dụng cho Java. 

File đính kèm:

  • pdfMáy ứng dụng của Google cho Java Phần 2 Xây dựng ứng dụng sát thủ.pdf
Tài liệu liên quan