สวัสดีครับทุกท่าน อันที่จริงว่าจะเขียนเรื่องนี้มานานละ แต่ไม่ได้เขียนซะที คราวนี้สบโอกาสพอดีจะทำ Workshop ให้น้องๆ ที่คณะครับ ก็เลยกะว่าเอามาโพสที่นี่ด้วยเลยก็แล้วกันครับ เนื้อหาก็เป็นการแบ่งปันประสบการณ์ของผมเองที่ผ่านมาหนึ่งโปรเจ็ค กับการใช้ GWT มาแบ่งปันกัน คงไม่ได้ลึกอะไรมากนะครับ เพราะลึกๆ ผมก็ไม่รู้เหมือนกัน ใช้งานเป็นอย่างเดียว 55
ผมจะแบ่งเขียนเป็น Series นะครับ น่าจะมีราว 3 ตอน คือ
1. Maven GWT Get Start : How to create GWT project using Maven
2. Spring GWT Get Start : Basic concept and configuration
3. Introduce SmartGWT
ว่าแล้วมาเริ่มตอนที่ 1 กันดีกว่าครับ
Maven GWT Get Start : How to create GWT project using Maven
Step 1 Preparing Environment
อย่างแรกเลยก็ต้อง เตรียมของกันก่อนเนอะ ก็มีตามนี้ครับ
JDK5 ลงให้เรียบร้อยครับ อย่าลืมสร้าง JAVA_HOME ให้มันด้วย
Maven2 ลงให้เรียบร้อยเช่นกันครับ อย่าลืมสร้าง M2_HOME ให้มันด้วย
Step 2 Creating Project
อะ อะ อะ แล้วพระเอกของเราหล่ะ ไปไหน ไม่ต้องห่วงครับ เราจะใช้ archetype GWT Maven plugin ช่วยสร้างโปรเจ็คครับ Maven ช่างสะดวกเสียจริง ว่าแล้วก็สร้างกันเลยครับ โดย รัวคีย์บอร์ด เจ้าบรรทัดข้างล่างนี้ลงไปเลยครับ
mvn archetype:generate
-DarchetypeRepository=repo1.maven.org
-DarchetypeGroupId=org.codehaus.mojo
-DarchetypeArtifactId=gwt-maven-plugin
-DarchetypeVersion=2.2.0
จากนั้นเมื่อเรากด Enter แล้ว maven มันจะให้เราใส่ groupId, artifactId, version และ gwt module ครับ เราก็ใส่ไปตามที่เราอยากได้ ส่วนของผมใส่แบบนี้ครับ
GroupId : com.spring66
ArtifactId : SpringGWT
Version : 1.0-SNAPSHOT
Module name : MyGWTApplication
จากนั้นพอกด Enter แล้ว maven ก็จะทำการสร้างโปรเจ็ค หล่อๆ ให้เราทั้งหมดครับ
สำหรับ Eclipse IDE นะครับ มันจะมีปัญหานิดหน่อย ไม่รู็คนอื่นเป็นกันมั้ย แต่ผมเป็น คือ maven dependedcy management มันไม่ทำงาน วิธีแก้คือไป disable มันก่อนครั้งหนึ่ง แล้ว enable มันอีกทีครับ แค่นั้นก็ได้แล้วครับ
Step 3 Let’s play
เมื่อได้โปรเจ็คมาแล้วนะครับ เราจะลองรันกันดูนะครับ โดยก่อนอื่นต้อง mvn clean install ก่อนเลย ถ้าเปิดใน netbean นะครับ เพราะว่า project ที่ได้ มันจะยังไม่ generate code บางอย่างให้เราไม่ครบ เราเลยต้อง build โปรเจ็คก่อนหนึ่งรอบครับ
จากนั้นก็ลอง mvn gwt:run ดูครับ
เราควรจะเจอ pop up window หน้าตา แบบนี้ออกมาครับ

แล้วเราก็กด Launch Default Browser ครับ ก็จะเจอ UI หน้าตาแบบนี้ครับ

สวยมั้ยครับ แถมมี validation ด้วยนะเอ่อว์ (ถ้าใส่ไใ่ครบ 3 ตัวอักษร ลองดูครับ)
Step 4 Jump into the hole
หลังจากเห็นความหล่อของ GWT แล้ว เรามาดูข้างใน Project Structure กันดีกว่า

อันนี้คือ Layout ของโปรเจ็คนะครับ จะเห็นว่าชื่อโปรเจ็ค ไม่ตรงกับของผม เพราะไป copy เค้ามาครับ สังเกตุว่า โดยรวมแล้วก็น่าตา เหมือนกันกับ Maven Structure ปกติ
ดูใน src/main/java ครับ จะเห็นว่ามี 3 packages อยู่ข้างในคือ
client : เอาไว้เก็บ code ที่เป็น GWT ทั้งหมดครับ และถ้ามี domain object เราก็จะเก็บไว้ภายใต้ package นี้ด้วยเช่นกันครับ ในตอน compile ของทุกอย่างใน package นี้จะถูกแปลงเป็น JavaScript ทั้งหมดนะครับ ระวังอย่าเอาอะไรที่นอกเหนือจาก การทำ User Interface เ้้ข้าไปไว้ข้างในนะครับเดี๋ยว Error
server : เอาไว้เก็บ code ทำงานฝั่ง server ทั้งหมดครับ แต่ถ้าเราทำฝั่ง server เป็น RESTful เราก็ไม่ต้องมี package นี้ก็ได้ครับ เพราะส่วนใหญ่เราจะแยก โปรเจ็ค กันไปเลย
shared : อันที่จริง สำหรับ package ใน gwt-maven plugin version 1.2 มันเอาไว้เก็บ พวกรูป icon ที่เราใช้ ใน ฝั่ง client แต่ใน version ใหม่ (หลังจาก 2.1 เป็นต้นมา) ผมยังไม่ค่อยแน่ใจครับ ยังไม่ขอตอบละกันครับ เดี๋ยววันหลังมาเพิ่มเติมให้ใหม่
ต่อมาใน src/main/resources ครับ
ในนี้มีไฟล์ประเอกของเราอยู่ครับ มันคือ Module ไฟล์ครับ ซึ่งในโปรเจ็คของเราก็คือ MyGWTApplication.gwt.xml นั่นเองครับ เ่อ่ามาดูข้างในกันดีกว่า
<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='MyGWTApplication'>
<!-- Inherit the core Web Toolkit stuff. -->
<inherits name='com.google.gwt.user.User'/>
<!-- Inherit the default GWT style sheet. You can change -->
<!-- the theme of your GWT application by uncommenting -->
<!-- any one of the following lines. -->
<inherits name='com.google.gwt.user.theme.standard.Standard'/>
<!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
<!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/> -->
<!-- Other module inherits -->
<!-- Specify the app entry point class. -->
<entry-point class='com.clbs.ex.springgwt.client.MyGWTApplication'/>
<!-- Specify the paths for translatable code -->
<source path='client'/>
<source path='shared'/>
</module>
ดูกันทีละอันก็แล้วกันครับ
อันแรก tag <inherits> นะครับ อันนี้เอาไว้ inherit module และ theme ต่างที่มีใน GWT โดยอย่างน้ยที่สุดจะต้อง inherit com.google.gwt.user.User และ theme com.google.gwt.user.theme.standard.Standard ครับ
ต่อมา tag <entry-point> เป็น tag ที่เราใช้มากที่สุดครับ คือ เอาไว้ระบุว่า class ไหนจะเป็น class ที่เราเอาไว้โหลด User Interface ของเราครับ ซึ่ง class ที่จะเป็น entry-point ได้ จะต้อง inherit EntryPoint ด้วยครับ
เช่นในโปรเจ็คเรา ถ้าไปดู MyGWTApplication ใน package client ก็จะเห็น
public class MyGWTApplication implements EntryPoint {
..
}
สุดท้ายเราต้องระบุ source ที่จะถูก compile ไปเป็น JavaScript ครับ โดยใช้ tag <source> ครับ
ในโปเจ็คเราก็ระบุไว้สองที่ครับ คือ client กับ shared
<!-- Specify the paths for translatable code -->
<source path='client'/>
<source path='shared'/>
แค่นี้ก่อนครับ หมดแรง เดี๋ยวคราวหน้าเราจะต่อด้วยเรื่องของการผูก GWT กับ Spring กับ จริงๆ จังๆ ครับ
Recent Comments