Slim3+GWT のサンプルソース
web.xml
<?xml version="1.0" encoding="utf-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
<context-param>
<param-name>slim3.rootPackage</param-name>
<param-value>jp.co.hoshisoft.slime3GWTSample</param-value>
</context-param>
・
・
・
<servlet>
<servlet-name>GWTServiceServlet</servlet-name>
<servlet-class>org.slim3.gwt.server.rpc.GWTServiceServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>・
<servlet-mapping>
<servlet-name>GWTServiceServlet</servlet-name>
<url-pattern>*.s3gwt</url-pattern>
</servlet-mapping>・
・
・
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.0.3//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.0.3/distro-source/core/src/gwt-module.dtd">
<module>
<inherits name="com.google.gwt.user.User" />
<inherits name='org.slim3.gwt.emul.S3Emulation' /><source path="client" />
<source path="shared" />
<entry-point
class="jp.co.hoshisoft.slime3GWTSample.client.MainEntryPoint" />
</module>
[エントリー・ポイント・クラス]
MainEntryPoint.java
package jp.co.hoshisoft.slime3GWTSample.client;import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.RootPanel;public class MainEntryPoint implements EntryPoint {
public void onModuleLoad() {
RootPanel.get().add(new Main());
}
}
[HTMLファイル]
index.html
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>星ソフト(Slim3GWTテストプログラム)</title>
<link rel="stylesheet" type="text/css" href="/css/global.css" />
<script type="text/javascript" language="javascript" src="jp.co.hoshisoft.slime3GWTSample.Main/jp.co.hoshisoft.slime3GWTSample.Main.nocache.js"></script>
</head><body>
<iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
</body>
</html>
[ユーザーインターフェイス]
Main.java
package jp.co.hoshisoft.slime3GWTSample.client;import java.util.ArrayList;
import java.util.List;import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;public class Main extends Composite {
private static MainUiBinder uiBinder = GWT.create(MainUiBinder.class);
interface MainUiBinder extends UiBinder<Widget, Main> {
}@UiField
Button regist;@UiField
Button list;public Main() {
initWidget(uiBinder.createAndBindUi(this));
}@UiHandler({"regist", "list"})
void handleClick(ClickEvent e) {
if(e.getSource() == regist) {
regist();
}
else if(e.getSource() == list) {
list();
}
}
void regist() {
RootPanel.get().clear();
InputDataBean bean = InputDataBean.getInstance();
bean.setName("");
bean.setEmail("");
List<String> bookArray = new ArrayList<String>();
bean.setBookArray(bookArray);
bean.setGender("M");
bean.setMailsend(true);
bean.setPrefectural("13");
List<String> fruitArray = new ArrayList<String>();
bean.setFruitArray(fruitArray);
bean.setComment("");
Regist reg = new Regist();
RootPanel.get().add(reg);
}
void list() {
RootPanel.get().clear();
MemberList reg = new MemberList();
RootPanel.get().add(reg);
}
}
Main.ui.xml
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:style>
.important {
font-weight: bold;
}
</ui:style>
<g:HTMLPanel>
<div id="header">
<h1>星ソフト(Slim3GWTテストプログラム)</h1>
</div>
<div id="menu">
<table>
<tr>
<td><g:Button ui:field="regist">登録</g:Button></td>
</tr>
<tr>
<td><g:Button ui:field="list">登録データ一覧</g:Button></td>
</tr>
</table>
</div>
<div id="body">
<h1>星ソフトのSlim3GWTテストプログラムへようこそ</h1>
</div>
</g:HTMLPanel>
</ui:UiBinder>
Regist.java
package jp.co.hoshisoft.slime3GWTSample.client;import java.util.ArrayList;
import java.util.List;import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;public class Regist extends Composite {
private static RegistUiBinder uiBinder = GWT.create(RegistUiBinder.class);
private CheckBox cbBookTbl = null;
private RadioButton rbGenderTbl = null;
private ListBox fruit = new ListBox(true);
interface RegistUiBinder extends UiBinder<Widget, Regist> {
}@UiField
TextBox name;@UiField
TextBox email;@UiField
VerticalPanel bookPanel;@UiField
CheckBox mailsend;@UiField
VerticalPanel genderPanel;@UiField
ListBox prefectural;@UiField
VerticalPanel fruitPanel;@UiField
TextArea comment;@UiField
Button btnOk;public Regist() {
initWidget(uiBinder.createAndBindUi(this));
init();
}public void init() {
InputDataBean bean = InputDataBean.getInstance();name.setText(bean.getName());
email.setText(bean.getEmail());cbBookTbl = new CheckBox[ConstValue.contBookArray.length];
List<String> selectBookArray = bean.getBookArray();
for(int i=0;i<ConstValue.contBookArray.length;i++) {
cbBookTbl[i] = new CheckBox(ConstValue.contBookArray[i][0]);
cbBookTbl[i].setName(ConstValue.contBookArray[i][1]);
if(selectBookArray != null) {
if(selectBookArray.contains(ConstValue.contBookArray[i][1])) {
cbBookTbl[i].setValue(true);
}
}
bookPanel.add(cbBookTbl[i]);
}mailsend.setValue(bean.isMailsend());
rbGenderTbl = new RadioButton[ConstValue.contGenderArray.length];
for(int i=0;i<ConstValue.contGenderArray.length;i++) {
rbGenderTbl[i] = new RadioButton("GENDER", ConstValue.contGenderArray[i][0]);
if(bean.getGender() != null) {
if(bean.getGender().equals(ConstValue.contGenderArray[i][1])) {
rbGenderTbl[i].setValue(true);
}
}
genderPanel.add(rbGenderTbl[i]);
}
for(int i=0;i<ConstValue.contPrefecturalArray.length;i++) {
prefectural.addItem(ConstValue.contPrefecturalArray[i][0], ConstValue.contPrefecturalArray[i][1]);
if(bean.getPrefectural() != null) {
if(bean.getPrefectural().equals(ConstValue.contPrefecturalArray[i][1])) {
prefectural.setSelectedIndex(i);
}
}
}
fruit.setVisibleItemCount(5);
for(int i=0;i<ConstValue.contFruitArray.length;i++) {
fruit.addItem(ConstValue.contFruitArray[i][0], ConstValue.contFruitArray[i][1]);
if(bean.getFruitArray() != null) {
if(bean.getFruitArray().contains(ConstValue.contFruitArray[i][1])) {
fruit.setItemSelected(i, true);
}
}
}
fruitPanel.add(fruit);
comment.setText(bean.getComment());
}@UiHandler("btnOk")
void handleClick(ClickEvent e) {
InputDataBean bean = InputDataBean.getInstance();bean.setName(name.getValue());
bean.setEmail(email.getValue());List<String> selectBook = new ArrayList<String>();
for(int i=0;i<cbBookTbl.length;i++) {
if(cbBookTbl[i].getValue()) {
selectBook.add(cbBookTbl[i].getName());
}
}
bean.setBookArray(selectBook);
bean.setMailsend(mailsend.getValue());
if(rbGenderTbl[0].getValue()) {
bean.setGender("M");
}
if(rbGenderTbl[1].getValue()) {
bean.setGender("W");
}
String selectPrefectural = null;
for(int i=0;i<prefectural.getItemCount();i++) {
if(prefectural.isItemSelected(i)) {
selectPrefectural = prefectural.getValue(i);
break;
}
}
bean.setPrefectural(selectPrefectural);List<String> selectFruit = new ArrayList<String>();
for(int i=0;i<fruit.getItemCount();i++) {
if(fruit.isItemSelected(i)) {
selectFruit.add(fruit.getValue(i));
}
}
bean.setFruitArray(selectFruit);
bean.setComment(comment.getText());
RootPanel.get().clear();
Confirm reg = new Confirm();
RootPanel.get().add(reg);}
}
Regist.ui.xml
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:style>
.important {
font-weight: bold;
}
</ui:style>
<g:HTMLPanel>
<table>
<tr>
<td>Name</td>
<td><g:TextBox ui:field="name"></g:TextBox></td>
</tr>
<tr>
<td>E-Mail</td>
<td><g:TextBox ui:field="email"></g:TextBox></td>
</tr>
<tr>
<td>購読雑誌</td>
<td>
<g:VerticalPanel ui:field="bookPanel" ></g:VerticalPanel>
</td>
</tr>
<tr>
<td>メルマガ送信有無</td>
<td><g:CheckBox ui:field="mailsend" formValue="mailsend"></g:CheckBox></td>
</tr>
<tr>
<td>性別</td>
<td>
<g:VerticalPanel ui:field="genderPanel" spacing="5"></g:VerticalPanel>
</td>
</tr>
<tr>
<td>都道府県</td>
<td>
<g:ListBox ui:field="prefectural" ></g:ListBox>
</td>
</tr>
<tr>
<td>好きな果物</td>
<td>
<g:VerticalPanel ui:field="fruitPanel" ></g:VerticalPanel>
</td>
</tr>
<tr>
<td>コメント</td>
<td><g:TextArea ui:field="comment"></g:TextArea></td>
</tr>
</table>
<br />
<g:Button ui:field="btnOk">入力完了</g:Button>
</g:HTMLPanel>
</ui:UiBinder>
Confirm.java
package jp.co.hoshisoft.slime3GWTSample.client;import java.util.Iterator;
import java.util.List;import jp.co.hoshisoft.slime3GWTSample.client.service.MemberService;
import jp.co.hoshisoft.slime3GWTSample.client.service.MemberServiceAsync;import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
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.Composite;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;public class Confirm extends Composite {
private static ConfirmUiBinder uiBinder = GWT.create(ConfirmUiBinder.class);
private static MemberServiceAsync service = GWT.create(MemberService.class);
interface ConfirmUiBinder extends UiBinder<Widget, Confirm> {
}@UiField
Button btnOk;@UiField
Button btnBack;@UiField
Grid confirmData;public Confirm() {
initWidget(uiBinder.createAndBindUi(this));
init();
}@UiHandler({"btnOk", "btnBack"})
void handleClick(ClickEvent e) {
if(e.getSource() == btnOk) {
regist(InputDataBean.getInstance());
}
else if(e.getSource() == btnBack) {
RootPanel.get().clear();
Regist reg = new Regist();
RootPanel.get().add(reg);
}
}private void init() {
confirmData.resize(8, 2);
confirmData.setBorderWidth(2);
confirmData.setText(0, 0, "Name");
confirmData.setText(1, 0, "E-Mail");
confirmData.setText(2, 0, "購読雑誌");
confirmData.setText(3, 0, "メルマガ送信有無");
confirmData.setText(4, 0, "性別");
confirmData.setText(5, 0, "都道府県");
confirmData.setText(6, 0, "好きな果物");
confirmData.setText(7, 0, "コメント");
InputDataBean bean = InputDataBean.getInstance();
confirmData.setText(0, 1, bean.getName());
confirmData.setText(1, 1, bean.getEmail());
List<String> bookArray = bean.getBookArray();
if(bookArray == null) {
confirmData.setText(2, 1, "");
}
else {
StringBuilder sb = new StringBuilder();
boolean brSetFlag = false;
Iterator<String> it = bookArray.iterator();
while(it.hasNext()) {
String s = it.next();
for(int i=0;i<ConstValue.contBookArray.length;i++) {
if(ConstValue.contBookArray[i][1].equals(s)) {
if(brSetFlag == true) {
sb.append("<br />");
}
brSetFlag = true;
sb.append(ConstValue.contBookArray[i][0]);
break;
}
}
}
confirmData.setHTML(2, 1, sb.toString());
}
if(bean.isMailsend()) {
confirmData.setText(3, 1, "有");
}
else {
confirmData.setText(3, 1, "無");
}
if("M".equals(bean.getGender())) {
confirmData.setText(4, 1, "男");
}
else {
if("W".equals(bean.getGender())) {
confirmData.setText(4, 1, "女");
}
else {
confirmData.setText(4, 1, "");
}
}
confirmData.setText(5, 1, "");
for(int i=0;i<ConstValue.contPrefecturalArray.length;i++) {
if(ConstValue.contPrefecturalArray[i][1].equals(bean.getPrefectural())) {
confirmData.setText(5, 1, ConstValue.contPrefecturalArray[i][0]);
break;
}
}
List<String> fruitArray = bean.getFruitArray();
if(fruitArray == null) {
confirmData.setText(6, 1, "");
}
else {
StringBuilder sb = new StringBuilder();
boolean brSetFlag = false;
Iterator<String> it = fruitArray.iterator();
while(it.hasNext()) {
String s = it.next();
for(int i=0;i<ConstValue.contFruitArray.length;i++) {
if(ConstValue.contFruitArray[i][1].equals(s)) {
if(brSetFlag == true) {
sb.append("<br />");
}
brSetFlag = true;
sb.append(ConstValue.contFruitArray[i][0]);
break;
}
}
}
confirmData.setHTML(6, 1, sb.toString());
}
confirmData.setHTML(7, 1, htmlEscape(bean.getComment()));
System.out.println("ConstValue.contBookArray.length->" + ConstValue.contBookArray[0].length);
}private String htmlEscape(String strVar){
StringBuilder strEsc = new StringBuilder();
if(strVar != null) {
for(int i=0;i<strVar.length();i++){
switch(strVar.charAt(i)){
case '<' :
strEsc.append("<");
break;
case '>' :
strEsc.append(">");
break;
case '&' :
strEsc.append("&");
break;
case '\n' :
strEsc.append("<br />");
break;
default :
strEsc.append(strVar.charAt(i));
break;
}
}
}
return strEsc.toString();
}
private void regist(InputDataBean bean) {
service.insert(bean, new AsyncCallback<Void>() {
public void onSuccess(Void result) {
Window.alert("Success!!!");
}
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());
}
});
}
}
Confirm.ui.xml
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:style>
.important {
font-weight: bold;
}
</ui:style>
<g:HTMLPanel>
<g:Grid ui:field="confirmData" ></g:Grid><br />
<g:Button ui:field="btnOk">確認</g:Button>
<g:Button ui:field="btnBack">戻る</g:Button></g:HTMLPanel>
</ui:UiBinder>
MemberList.java
package jp.co.hoshisoft.slime3GWTSample.client;import java.util.List;
import jp.co.hoshisoft.slime3GWTSample.client.service.MemberService;
import jp.co.hoshisoft.slime3GWTSample.client.service.MemberServiceAsync;
import jp.co.hoshisoft.slime3GWTSample.shared.model.Member;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.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
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.Composite;
import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;public class MemberList extends Composite {
private static MemberListUiBinder uiBinder = GWT.create(MemberListUiBinder.class);
private static MemberServiceAsync service = GWT.create(MemberService.class);
interface MemberListUiBinder extends UiBinder<Widget, MemberList> {
}@UiField
Button btnDelete;
@UiField
FlexTable tblMember;public MemberList() {
initWidget(uiBinder.createAndBindUi(this));
init();}
@UiHandler("btnDelete")
void onClick(ClickEvent e) {final DialogBox dialogBox = new DialogBox();
dialogBox.setHTML("<br/>全件削除します。よろしんですか?<br /><br />");
dialogBox.setAnimationEnabled(true);
dialogBox.setGlassEnabled(true);
final Button btnOk = new Button("確認");
HorizontalPanel dialogHPanel = new HorizontalPanel();
dialogBox.setWidget(dialogHPanel);
dialogHPanel.setWidth("100%");
dialogHPanel.setHorizontalAlignment(VerticalPanel.ALIGN_CENTER);
dialogHPanel.add(btnOk);btnOk.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
service.allDelete(new AsyncCallback<Void>() {
public void onSuccess(Void result) {
dialogBox.hide();
RootPanel.get().clear();
Main reg = new Main();
RootPanel.get().add(reg);
}public void onFailure(Throwable caught) {
}
});
}
});final Button btnCancel = new Button("キャンセル");
btnCancel.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
dialogBox.hide();
}
});
dialogHPanel.add(btnCancel);
dialogBox.center();
dialogBox.setModal(true);
dialogBox.show();}
private void init() {
service.allList(new AsyncCallback<List<Member>>() {
public void onSuccess(List<Member> result) {
tblMember.clear();
tblMember.setBorderWidth(2);
tblMember.setHTML(0, 0, "<div align=\"center\" style=\"background-color:silver;font-weight:bold\">Name</div>");
tblMember.setHTML(0, 1, "<div align=\"center\" style=\"background-color:silver;font-weight:bold\">E-Mail</div>");
tblMember.setHTML(0, 2, "<div align=\"center\" style=\"background-color:silver;font-weight:bold\">購読雑誌</div>");
tblMember.setHTML(0, 3, "<div align=\"center\" style=\"background-color:silver;font-weight:bold\">メルマガ送信有無</div>");
tblMember.setHTML(0, 4, "<div align=\"center\" style=\"background-color:silver;font-weight:bold\">性別</div>");
tblMember.setHTML(0, 5, "<div align=\"center\" style=\"background-color:silver;font-weight:bold\">都道府県</div>");
tblMember.setHTML(0, 6, "<div align=\"center\" style=\"background-color:silver;font-weight:bold\">好きな果物</div>");
tblMember.setHTML(0, 7, "<div align=\"center\" style=\"background-color:silver;font-weight:bold\">コメント</div>");for (int i = 0; i < result.size(); i++) {
tblMember.setText(i+1, 0, result.get(i).getName());
tblMember.setText(i+1, 1, result.get(i).getEmail());
tblMember.setHTML(i+1, 2, convertCode2HTML(result.get(i).getBookArray(), ConstValue.contBookArray));
if("1".equals(result.get(i).getMailsend())) {
tblMember.setText(i+1, 3, "有");
}
else {
if("1".equals(result.get(i).getMailsend())) {
tblMember.setText(i+1, 3, "無");
}
else {
tblMember.setText(i+1, 3, "");
}
}
if("M".equals(result.get(i).getGender())) {
tblMember.setText(i+1, 4, "男");
}
else {
if("W".equals(result.get(i).getGender())) {
tblMember.setText(i+1, 4, "女");
}
else {
tblMember.setText(i+1, 4, "");
}
}
tblMember.setHTML(i+1, 5, convertCode2HTML(result.get(i).getPrefectural(), ConstValue.contPrefecturalArray));
tblMember.setHTML(i+1, 6, convertCode2HTML(result.get(i).getFruitArray(), ConstValue.contFruitArray));
tblMember.setHTML(i+1, 7, htmlEscape(result.get(i).getComment()));
}
}
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());
}
});
}
private String convertCode2HTML(String code, String contCodeArray) {
StringBuilder sb = new StringBuilder();
boolean brSetFlag = false;if(code != null) {
String codeTbl = code.split(";");
for(int i=0;i<codeTbl.length;i++) {
for(int j=0;j<contCodeArray.length;j++) {
if(contCodeArray[j][1].equals(codeTbl[i])) {
if(brSetFlag == true) {
sb.append("<br />");
}
brSetFlag = true;
sb.append(contCodeArray[j][0]);
break;
}
}
}
}
return sb.toString();
}private String htmlEscape(String strVar){
StringBuilder strEsc = new StringBuilder();
if(strVar != null) {
for(int i=0;i<strVar.length();i++){
switch(strVar.charAt(i)){
case '<' :
strEsc.append("<");
break;
case '>' :
strEsc.append(">");
break;
case '&' :
strEsc.append("&");
break;
case '\n' :
strEsc.append("<br />");
break;
default :
strEsc.append(strVar.charAt(i));
break;
}
}
}
return strEsc.toString();
}
}
MemberList.ui.xml
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:style>
.important {
font-weight: bold;
}
</ui:style>
<g:HTMLPanel>
<g:FlexTable ui:field="tblMember"></g:FlexTable>
<br />
<g:Button ui:field="btnDelete">全件削除</g:Button>
</g:HTMLPanel>
</ui:UiBinder>
[共通クラス]
ConstValue.java
package jp.co.hoshisoft.slime3GWTSample.client;public class ConstValue {
public static String contBookArray = {{"WEB-DB Press","WEB-DB_Press"},
{"JAVA Press","JAVA_Press"},
{"Java World","Java_World"},
{"DosV Magazine","DosV_Magazine"}};public static String contGenderArray = {{"男","M"},{"女","W"}};
public static String contPrefecturalArray = {{"北海道","01"},
{"青森県","02"},
{"岩手県","03"},
{"宮城県","04"},
{"秋田県","05"},
{"東京都","13"},
{"沖縄県","47"}};
public static String[] contFruitArray = {{"りんご","01"},
{"みかん","02"},
{"柿","03"},
{"バナナ","04"},
{"メロン","05"},
{"イチゴ","06"}};
}
InputDataBean.java
package jp.co.hoshisoft.slime3GWTSample.client;import java.io.Serializable;
import java.util.List;public class InputDataBean implements Serializable {
private static final long serialVersionUID = 1L;private static InputDataBean instance = new InputDataBean();
private String name=null;
private String email=null;
private List<String> bookArray = null;
private boolean mailsend = false;
private String gender = null;
private String prefectural = null;
private List<String> fruitArray = null;
private String comment = null;
private InputDataBean() {
}
public static InputDataBean getInstance() {
return instance;
}public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}public String getEmail() {
return email;
}public void setEmail(String email) {
this.email = email;
}public List<String> getBookArray() {
return bookArray;
}public void setBookArray(List<String> bookArray) {
this.bookArray = bookArray;
}public boolean isMailsend() {
return mailsend;
}public void setMailsend(boolean mailsend) {
this.mailsend = mailsend;
}public String getGender() {
return gender;
}public void setGender(String gender) {
this.gender = gender;
}public String getPrefectural() {
return prefectural;
}public void setPrefectural(String prefectural) {
this.prefectural = prefectural;
}public List<String> getFruitArray() {
return fruitArray;
}public void setFruitArray(List<String> fruitArray) {
this.fruitArray = fruitArray;
}public String getComment() {
return comment;
}public void setComment(String comment) {
this.comment = comment;
}
}
[サービスクラス]
MemberService.java
package jp.co.hoshisoft.slime3GWTSample.client.service;import java.util.List;
import jp.co.hoshisoft.slime3GWTSample.client.InputDataBean;
import jp.co.hoshisoft.slime3GWTSample.shared.model.Member;import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;@RemoteServiceRelativePath("service.s3gwt")
public interface MemberService extends RemoteService {void insert(InputDataBean bean);
List<Member> allList();
void allDelete();}
MemberServiceAsync.java
package jp.co.hoshisoft.slime3GWTSample.client.service;import java.util.List;
import jp.co.hoshisoft.slime3GWTSample.client.InputDataBean;
import jp.co.hoshisoft.slime3GWTSample.shared.model.Member;import com.google.gwt.user.client.rpc.AsyncCallback;
public interface MemberServiceAsync {
void insert(InputDataBean bean, AsyncCallback<Void> callback);
void allList(AsyncCallback<List<Member>> callback);
void allDelete(AsyncCallback<Void> callback);
}
MemberServiceImpl.java
package jp.co.hoshisoft.slime3GWTSample.server.service;import java.util.Iterator;
import java.util.List;import org.slim3.datastore.Datastore;
import com.google.appengine.api.datastore.Transaction;
import jp.co.hoshisoft.slime3GWTSample.client.InputDataBean;
import jp.co.hoshisoft.slime3GWTSample.client.service.MemberService;
import jp.co.hoshisoft.slime3GWTSample.server.meta.MemberMeta;
import jp.co.hoshisoft.slime3GWTSample.shared.model.Member;public class MemberServiceImpl implements MemberService {
public void insert(InputDataBean bean) {
Member member = new Member();member.setName(bean.getName());
member.setEmail(bean.getEmail());
member.setBookArray(bindCode(bean.getBookArray()));
member.setMailsend(bean.isMailsend() ? "1" : "0");
member.setGender(bean.getGender());
member.setPrefectural(bean.getPrefectural());
member.setFruitArray(bindCode(bean.getFruitArray()));
member.setComment(bean.getComment());
Transaction tx = Datastore.beginTransaction();
Datastore.put(member);
Datastore.commit(tx);}
public List<Member> allList() {
MemberMeta e = new MemberMeta();
List<Member> list = Datastore.query(e)
.sort(e.name.asc)
.asList();return list;
}
public void allDelete() {
MemberMeta e = new MemberMeta();
Datastore.delete(Datastore.query(e).asKeyList());
}
private String bindCode(List<String> codeList) {
if(codeList == null) {
return "";
}
StringBuilder sb = new StringBuilder();
boolean brSetFlag = false;
Iterator<String> it = codeList.iterator();
while(it.hasNext()) {
String s = it.next();
if(brSetFlag == true) {
sb.append(";");
}
brSetFlag = true;
sb.append(s);
}
return sb.toString();
}
}
[モデルクラス]
Member.java
package jp.co.hoshisoft.slime3GWTSample.shared.model;import java.io.Serializable;
import java.util.Date;import com.google.appengine.api.datastore.Key;
import org.slim3.datastore.Attribute;
import org.slim3.datastore.Model;@Model(schemaVersion = 1)
public class Member implements Serializable {private static final long serialVersionUID = 1L;
@Attribute(primaryKey = true)
private Key key;@Attribute(version = true)
private Long version;
private String name;
private String email;
private String bookArray;
private String mailsend;
private String gender;
private String prefectural;
private String fruitArray;
private String comment;public String getName() {
return name;
}public void setName(String name) {
this.name = name;
}public String getEmail() {
return email;
}public void setEmail(String email) {
this.email = email;
}public String getBookArray() {
return bookArray;
}public void setBookArray(String bookArray) {
this.bookArray = bookArray;
}public String getMailsend() {
return mailsend;
}public void setMailsend(String mailsend) {
this.mailsend = mailsend;
}public String getGender() {
return gender;
}public void setGender(String gender) {
this.gender = gender;
}public String getPrefectural() {
return prefectural;
}public void setPrefectural(String prefectural) {
this.prefectural = prefectural;
}public String getFruitArray() {
return fruitArray;
}public void setFruitArray(String fruitArray) {
this.fruitArray = fruitArray;
}public String getComment() {
return comment;
}public void setComment(String comment) {
this.comment = comment;
}public Date getCreatedDate() {
return createdDate;
}public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}private Date createdDate = new Date();
public Key getKey() {
return key;
}public void setKey(Key key) {
this.key = key;
}public Long getVersion() {
return version;
}public void setVersion(Long version) {
this.version = version;
}@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + *1;
return result;
}@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
Member other = (Member) obj;
if (key == null) {
if (other.key != null) {
return false;
}
} else if (!key.equals(other.key)) {
return false;
}
return true;
}
}
MemberMeta.java
package jp.co.hoshisoft.slime3GWTSample.server.meta;//@javax.annotation.Generated(value = { "slim3-gen", "@VERSION@" }, date = "2010-06-28 00:05:51")
public final class MemberMeta extends org.slim3.datastore.ModelMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member> {public final org.slim3.datastore.StringAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member> bookArray = new org.slim3.datastore.StringAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member>(this, "bookArray", "bookArray");
public final org.slim3.datastore.StringAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member> comment = new org.slim3.datastore.StringAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member>(this, "comment", "comment");
public final org.slim3.datastore.CoreAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member, java.util.Date> createdDate = new org.slim3.datastore.CoreAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member, java.util.Date>(this, "createdDate", "createdDate", java.util.Date.class);
public final org.slim3.datastore.StringAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member> email = new org.slim3.datastore.StringAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member>(this, "email", "email");
public final org.slim3.datastore.StringAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member> fruitArray = new org.slim3.datastore.StringAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member>(this, "fruitArray", "fruitArray");
public final org.slim3.datastore.StringAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member> gender = new org.slim3.datastore.StringAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member>(this, "gender", "gender");
public final org.slim3.datastore.CoreAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member, com.google.appengine.api.datastore.Key> key = new org.slim3.datastore.CoreAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member, com.google.appengine.api.datastore.Key>(this, "__key__", "key", com.google.appengine.api.datastore.Key.class);
public final org.slim3.datastore.StringAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member> mailsend = new org.slim3.datastore.StringAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member>(this, "mailsend", "mailsend");
public final org.slim3.datastore.StringAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member> name = new org.slim3.datastore.StringAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member>(this, "name", "name");
public final org.slim3.datastore.StringAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member> prefectural = new org.slim3.datastore.StringAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member>(this, "prefectural", "prefectural");
public final org.slim3.datastore.CoreAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member, java.lang.Long> version = new org.slim3.datastore.CoreAttributeMeta<jp.co.hoshisoft.slime3GWTSample.shared.model.Member, java.lang.Long>(this, "version", "version", java.lang.Long.class);
private static final MemberMeta slim3_singleton = new MemberMeta();public static MemberMeta get() {
return slim3_singleton;
}public MemberMeta() {
super("Member", jp.co.hoshisoft.slime3GWTSample.shared.model.Member.class);
}@Override
public jp.co.hoshisoft.slime3GWTSample.shared.model.Member entityToModel(com.google.appengine.api.datastore.Entity entity) {
jp.co.hoshisoft.slime3GWTSample.shared.model.Member model = new jp.co.hoshisoft.slime3GWTSample.shared.model.Member();
model.setBookArray*2;
model.setComment*3;
model.setCreatedDate*4;
model.setEmail*5;
model.setFruitArray*6;
model.setGender*7;
model.setKey(entity.getKey());
model.setMailsend*8;
model.setName*9;
model.setPrefectural*10;
model.setVersion*11;
return model;
}@Override
public com.google.appengine.api.datastore.Entity modelToEntity(java.lang.Object model) {
jp.co.hoshisoft.slime3GWTSample.shared.model.Member m = (jp.co.hoshisoft.slime3GWTSample.shared.model.Member) model;
com.google.appengine.api.datastore.Entity entity = null;
if (m.getKey() != null) {
entity = new com.google.appengine.api.datastore.Entity(m.getKey());
} else {
entity = new com.google.appengine.api.datastore.Entity(kind);
}
entity.setProperty("bookArray", m.getBookArray());
entity.setProperty("comment", m.getComment());
entity.setProperty("createdDate", m.getCreatedDate());
entity.setProperty("email", m.getEmail());
entity.setProperty("fruitArray", m.getFruitArray());
entity.setProperty("gender", m.getGender());
entity.setProperty("mailsend", m.getMailsend());
entity.setProperty("name", m.getName());
entity.setProperty("prefectural", m.getPrefectural());
entity.setProperty("version", m.getVersion());
entity.setProperty("slim3.schemaVersion", 1);
return entity;
}@Override
protected com.google.appengine.api.datastore.Key getKey(Object model) {
jp.co.hoshisoft.slime3GWTSample.shared.model.Member m = (jp.co.hoshisoft.slime3GWTSample.shared.model.Member) model;
return m.getKey();
}@Override
protected void setKey(Object model, com.google.appengine.api.datastore.Key key) {
validateKey(key);
jp.co.hoshisoft.slime3GWTSample.shared.model.Member m = (jp.co.hoshisoft.slime3GWTSample.shared.model.Member) model;
m.setKey(key);
}@Override
protected long getVersion(Object model) {
jp.co.hoshisoft.slime3GWTSample.shared.model.Member m = (jp.co.hoshisoft.slime3GWTSample.shared.model.Member) model;
return m.getVersion() != null ? m.getVersion().longValue() : 0L;
}@Override
protected void incrementVersion(Object model) {
jp.co.hoshisoft.slime3GWTSample.shared.model.Member m = (jp.co.hoshisoft.slime3GWTSample.shared.model.Member) model;
long version = m.getVersion() != null ? m.getVersion().longValue() : 0L;
m.setVersion(Long.valueOf(version + 1L));
}@Override
public String getSchemaVersionName() {
return "slim3.schemaVersion";
}@Override
public String getClassHierarchyListName() {
return "slim3.classHierarchyList";
}}
[CSSファイル]
global.css
@CHARSET "utf-8";body { background-color: #EEEEEE; }
・
・
・.gwt-DialogBox {
background-color: silver;
border-color: gray;
border-style: solid;
border-width: 5px;
}.gwt-DialogBox.Caption {
background-color: blue;
}
*1:key == null) ? 0 : key.hashCode(
*2:java.lang.String) entity.getProperty("bookArray"
*3:java.lang.String) entity.getProperty("comment"
*4:java.util.Date) entity.getProperty("createdDate"
*5:java.lang.String) entity.getProperty("email"
*6:java.lang.String) entity.getProperty("fruitArray"
*7:java.lang.String) entity.getProperty("gender"
*8:java.lang.String) entity.getProperty("mailsend"
*9:java.lang.String) entity.getProperty("name"
*10:java.lang.String) entity.getProperty("prefectural"
*11:java.lang.Long) entity.getProperty("version"