GWT1.7學習之後臺傳送pojo到前臺頁面.RPC呼叫
1,在GWT中可以直接將一個pojo物件由server傳送到client.
比如:
一個序列化的User物件.是JDO儲存到資料庫的POJO.
注意:這個POJO必須放到client包下面.否則會有問題.
package com.i.web.desktop.client; import javax.jdo.annotations.IdGeneratorStrategy; import javax.jdo.annotations.IdentityType; import javax.jdo.annotations.PersistenceCapable; import javax.jdo.annotations.Persistent; import javax.jdo.annotations.PrimaryKey; import com.google.gwt.user.client.rpc.IsSerializable; @PersistenceCapable(identityType = IdentityType.APPLICATION) public class User implements IsSerializable { @PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Long id;/* 使用者主鍵 */ @Persistent private String userName;/* 使用者名稱 */ @Persistent private String loginName;/* 登入名 */ @Persistent private String passwd;/* 密碼. */ @Persistent private String email;/* 電子郵件. */ public User(Long id, String userName, String loginName, String passwd, String email) { super(); this.id = id; this.userName = userName; this.loginName = loginName; this.passwd = passwd; this.email = email; } public User() { } /*省略getset方法.*/ }
這裡要有預設的建構函式.
在client包下面.
並且要實現介面implements IsSerializable
這樣才可以將這個序列化的物件傳送到客戶端.
2,這裡可以傳送的引數只有基本型別,基本型別的分裝類.和實現序列化的類.
所以這裡可以傳入的引數沒有List,Set之類的.雖然可以使用
/**
* @gwt.typeArgs <com.i.web.desktop.client.User>
*/
註釋將返回的list型別設定下.但貌似還有點問題.除錯成功.
所以就用了User[] 的陣列進行list的傳遞.
程式碼也是要改下.
public User[] getAllUser() { PersistenceManager pm = PMF.get().getPersistenceManager(); try { javax.jdo.Query query = pm.newQuery(User.class); List<User> results = (List<User>) query.execute("Smith"); User[] users = new User[results.size()]; results.toArray(users); return users; } catch (Exception e) { e.printStackTrace(); return null; } finally { pm.close(); } }
這裡直接使用了一個List下面的方法results.toArray(users);將list轉換成User[] 陣列了.
這樣測試是可以實驗成功的.
final UserActionAsync userAction = GWT.create(UserAction.class); userAction.getAllUser(new AsyncCallback<User[]>() { public void onFailure(Throwable caught) { // TODO Auto-generated method stub } public void onSuccess(User[] result) { // TODO Auto-generated method stub System.out.println("get size:"+result.length); for (int j = 0; j < result.length; j++) { System.out.print(result[j].getUserName()); System.out.print(result[j].getId()+""); System.out.println(result[j].getPasswd()); } } });
在client進行呼叫.可以顯示User[] 陣列.
總結:
1,可以把一個JDO物件當作一個引數傳從server傳到client.
前提是這JDO物件在client包下.實現了IsSerializable 介面,有自己的建構函式.
2,沒有能將List直接傳到client.而是用List.toArray()轉換之後在進行操作.
2在Client進行分層設計.
可以將頁面變成一個一個小的皮膚.每一個皮膚裡面都可以做為一個單獨的類.
在這個單獨的類裡面進行操作.
比如在初始化頁面:
呼叫登入皮膚:
public void onModuleLoad() { System.out.println("系統載入的時候顯示...."); LoginPanel loginPanel = new LoginPanel(); loginPanel.show(); loginPanel.center(); /*在ModuleLoad()方法呼叫的時候,初始化登入按鈕.*/
登入皮膚是另一個java類.
import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.PasswordTextBox; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.TextBox; public class LoginPanel extends DialogBox { private final UserActionAsync userAction = GWT.create(UserAction.class); public LoginPanel() { setText("使用者登入"); final Grid grid = new Grid(3, 3); grid.setWidget(0, 0, new Label("登入名:")); final TextBox loginName = new TextBox(); grid.setWidget(0, 1, loginName); grid.setWidget(1, 0, new Label("密碼:")); final PasswordTextBox passwd = new PasswordTextBox(); grid.setWidget(1, 1, passwd); final Button loginButton = new Button("登入", new ClickHandler() { public void onClick(ClickEvent event) { // hide(); userAction.userLogin(loginName.getValue(), passwd.getValue(), new AsyncCallback<String>() { public void onSuccess(String result) { System.out.println("sssssssss" +result); if("".equals(result)){ Window.alert("使用者名稱密碼錯誤!"); }else{ hide(); RootPanel.get().add(new Label("登入成功.")); ForumsPanel forumsPanel = new ForumsPanel(); RootPanel.get().add(forumsPanel); } } public void onFailure(Throwable caught) { } }); } }); grid.setWidget(2, 0, loginButton); final Button RegisterButton = new Button("註冊", new ClickHandler() { public void onClick(ClickEvent event) { hide(); RegisterUserPanel registerUserPanel = new RegisterUserPanel(); registerUserPanel.show(); registerUserPanel.center(); } }); grid.setWidget(2, 1, RegisterButton); setWidget(grid); } }
在登入皮膚下面還有一個註冊皮膚.
import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.PasswordTextBox; import com.google.gwt.user.client.ui.TextBox; public class RegisterUserPanel extends DialogBox { private final UserActionAsync userAction = GWT.create(UserAction.class); public RegisterUserPanel() { setText("使用者註冊"); final Grid grid = new Grid(5, 5); grid.setWidget(0, 0, new Label("使用者名稱:")); final TextBox userName = new TextBox(); grid.setWidget(0, 1, userName); grid.setWidget(1, 0, new Label("登入名:")); final TextBox loginName = new TextBox(); grid.setWidget(1, 1, loginName); grid.setWidget(2, 0, new Label("密碼:")); final PasswordTextBox passwd = new PasswordTextBox(); grid.setWidget(2, 1, passwd); grid.setWidget(3, 0, new Label("email:")); final TextBox email = new TextBox(); grid.setWidget(3, 1, email); final Button RegisterButton = new Button("返回", new ClickHandler() { public void onClick(ClickEvent event) { hide(); LoginPanel loginPanel = new LoginPanel(); loginPanel.show(); loginPanel.center(); } }); final Button loginButton = new Button("註冊", new ClickHandler() { public void onClick(ClickEvent event) { // hide(); String errorMsg = ""; if ("".equals(userName.getValue())) { errorMsg += "使用者名稱,"; } if ("".equals(loginName.getValue())) { errorMsg += "登入名,"; } if ("".equals(passwd.getValue())) { errorMsg += "密碼,"; } if ("".equals(email.getValue())) { errorMsg += "email,"; } if ("".equals(errorMsg)) { userAction.saveUser(userName.getValue(), loginName .getValue(), passwd.getValue(), email.getValue(), new AsyncCallback<Void>() { public void onSuccess(Void result) { Window.alert("註冊成功,請重新登入."); hide(); LoginPanel loginPanel = new LoginPanel(); loginPanel.show(); loginPanel.center(); } public void onFailure(Throwable caught) { } }); } else { Window.alert(errorMsg + "不能為空."); } } }); grid.setWidget(4, 0, loginButton); grid.setWidget(4, 1, RegisterButton); setWidget(grid); } }
註冊成功之後將資訊儲存到資料庫.然後再跳回到登入頁面.
這樣就用GWT實現了兩個頁面的切換.
顯示最簡單的兩個登入註冊皮膚.
程式碼還在整理當中.還想新增些其他的功能.
3.關於GoogleApps
登入:http://appengine.google.com/
登入之後你可以註冊 10 個 應用的名稱:
然後在上傳apps的程式碼的時候指定 名稱的名字:
這樣你就可以在一個帳號下面同時管理 10 個應用:
說明:這個名稱不一定是你自己的郵件的名字.當然可以是相同的.也可以是不同的.
先申請了先得到.
不用也先佔著幾個好名字吧.做自己的網站的名字.
google的apps還是很吸引我的想做點東西.從最簡單的開始.從實踐開始.
同時希望能夠和大家一起學習進步.有不對的地方還請多指教.
相關文章
- .NET後臺呼叫JS前臺JS
- 後臺向vue頁面傳值Vue
- 由ASP.NET所謂前臺呼叫後臺、後臺呼叫前臺想到HTTP——理論篇ASP.NETHTTP
- 後臺傳的json 資料遍歷到HTML 頁面JSONHTML
- 由ASP.NET所謂前臺呼叫後臺、後臺呼叫前臺想到HTTP——實踐篇(一)ASP.NETHTTP
- 由ASP.NET所謂前臺呼叫後臺、後臺呼叫前臺想到HTTP——實踐篇(二)ASP.NETHTTP
- 前臺頁面設計比後臺實現更值錢
- GAT專案前臺到後臺
- Asp.Net前臺呼叫後臺變數ASP.NET變數
- Tp6 資料庫管理工具,生成前後臺CRUD頁面,直接作為後臺頁面使用資料庫
- .net 後臺 傳送http請求HTTP
- C#後臺呼叫前臺javascript的五種方法C#JavaScript
- WebForm 頁面ajax 請求後臺頁面 方法WebORM
- SpringMVC後臺接受前臺傳值的方法SpringMVC
- 前臺傳中文到後臺Controller亂碼問題的解決Controller
- 頁面開啟很正常,後臺return後頁面偏左了
- Delphi 通過IdHTTP 傳送Http請求到Java 後臺HTTPJava
- 分頁實現前臺後臺不同效果,分頁類引入
- go-zero學習之RPC呼叫GoRPC
- ASP.NET前臺使用__doPostBack函式呼叫後臺事件ASP.NET函式事件
- json前後臺傳值薦JSON
- jn專案-解決前臺中文引數傳到後臺亂碼問題
- 如何解決SSM框架前臺傳引數到後臺亂碼的問題SSM框架
- 前臺頁面優化全攻略(一)優化
- 前臺頁面優化全攻略(四)優化
- PbootCMS自定義前臺404錯誤頁面boot
- 禁止頁面Body在後臺滾動
- PbootCMS後臺頁面顯示亂碼boot
- spring的前後臺資料傳輸。Spring
- Springmvc前臺通過ajax傳值到後臺用@RequestBody接收,報415/400錯誤SpringMVC
- JSP頁面根據後臺傳值不同顯示不同內容JS
- 解決SpringBoot在後臺接收前臺傳遞物件方式Spring Boot物件
- uploadify前臺上傳檔案,java後臺處理的例子Java
- ASP.NET 多語言的實現(後臺訊息+前臺訊息+頁面自動繫結)ASP.NET
- 長連線在後臺和前臺之間的互動
- 前後臺分離之資料模擬
- linux程式前臺-後臺執行Linux
- 前端學習(2596):後臺系統的許可權控制和管理--重新整理頁面消失前端