
修改UserController程式碼:package mytest•class UserController{
PG Levin Li 發表在 痞客邦 留言(0) 人氣(46)

指令說明:create-controller domain用法:create-controller User結果:
PG Levin Li 發表在 痞客邦 留言(0) 人氣(76)
static mapping 代碼區域可以用來把類名映射成另一個表名,把字段名映射成另一個列名,但是你還可以用它做一些其他的有趣事情。例如,要是想返回table按某一順序排列,可以加如下列代碼:
PG Levin Li 發表在 痞客邦 留言(0) 人氣(73)
Groovy 會自動把10.5 這樣的的小數值自動裝箱(Autobox)成java.math.BigDecimal
而非你想當然的java.lang.Float或java.lang.Double類型。
為什麼要這樣舉個大多數Java開發者都沒有意識到的一個慘通例子:
寫一個簡短的Java應用,循環10 次,每次都加上0.1。
你最終會得到0.99999或1.000001,這要看你是存成Double還是Float。
使用BigDecimal,你將會每次都得到1.0,和預期的一模一樣。
這就是(The Principle of Least Surprise)。
PG Levin Li 發表在 痞客邦 留言(0) 人氣(16)
領域類(domain)的生命週期事件
這包括針對CRUD操作的四個事件回調:
onLoad、beforeInsert、befortUpdate及beforeDelete,
當執行資料庫操作時就會觸發四個方法。
onLoad在此類從資料庫中載入時被啟用。
beforeInsert在save()方法執行前被啟用。
beforeUpdate在update()方法執行前被啟用。
beforeDelete在delete()方法執行前被啟用。
domain例:
class User{
String name
// ...
def beforeInsert = {
// your code goes here
}
def beforeUpdate = {
// your code goes here
}
def beforeDelete = {
// your code goes here
}
def onLoad = {
// your code goes here
}
}
這裡對上述事件進行補充。
Grails支持GORM事件及Hibernate套件,
GORM事件的定制包括事件的註冊,在刪除、插入及更新發生時會觸發這些事件。
Hibernate的事件套件為領域模型提供了支持,
可以使用以下這些方法來對Hibernate的事件系統進行啟用:
afterInsert、afterUpdate、afterDelete、 beforeLoad、afterLoad、beforeSave及afterSave。
其它的領域層事件就是領域類的時間戳記了。
如果你提供了一對特別命名的字段(lastUpdated与dateCreated),GORM就會自動為這個類增加時間。
在Web應用的其它層上,Grails提供了Web執行事件以管理Web的執行
(從一種狀態轉化為另一種狀態)和
Ajax事件(如果Web應用中發生了某個事件就會去調用一個特定的JavaScript函數)。
Grails還支持對自動重新加載事件的攔截,
這可用來監控資源的改變,當發生變化時會重新加載資源。
這就是Grails在運行時能重新加載應用的原因。
PG Levin Li 發表在 痞客邦 留言(0) 人氣(133)
程式如下:package mytest
import java.util.Date
/**
* 會員
* @author pc levin
*/
class User {
/**
* 名字
*/
String name
/**
* 帳號名稱
*/
String username
/**
* 密碼
*/
String password
/**
* 年齡
*/
Integer age
/**
* 生日
*/
Date birthday
/**
* 薪資
*/
BigDecimal salary
//將自動在第一次向資料庫存資料時填上日期
Date dateCreated
//將在每次次更新後的記錄存回資料庫的時候填充回這個日期
Date lastUpdated
//如果不想要自動填入這二個日期用以下三行停用
// static mapping = {
// autoTimestamp false
// }
//暫時不用理,後面會講
static constraints = {
}
}
PG Levin Li 發表在 痞客邦 留言(0) 人氣(16)
PG Levin Li 發表在 痞客邦 留言(0) 人氣(207)

Grails 接受這些簡單的類,並利用它們完成許多工作。
相對應的資料庫表格會自動為每個領域類(domain)創建。
控制器(controllers)和頁面(views)會依關聯領域類(domain)中的名字,
domain還可以存放驗証規則,定義一對多關系,以及包含其它許多信息的地方。
我們先建位一個User
指令:
create-domain-class User
或
create-domain-class com.test.User
說明:
create-domain-class 套件名.類別名
顯示以下的圖,就是成功新增一個domain
PG Levin Li 發表在 痞客邦 留言(0) 人氣(96)
Grails專案目錄結構
專案 |
grails-app | |
| | conf | 配置文件(如資料庫、URL 映射、Spring 和Hibernate 配置文件等) |
| | controllers | 控制器(MVC 中的"C") |
| | domain | 領域類(MVC 中的模型的"M"。該目錄中的每个文件在資料庫中都有對應的表。) |
| | i18n | i18n(用予錯誤消息和頁面標題及國際化) |
| | services | 服務類(用予可能跨多個domaind的企業邏輯) |
| | taglib | 自定標籤庫(用予GSP 頁面可重複用元素) |
| | utils | 自定義腳本(存放像編碼器(Codec)這類的其他工具) |
| | views | Groovy 服務器頁面(GSP)(MVC 中的"V") |
| | lib | JAR(存放JDBC 驅動和第三方的類別庫) |
| | scripts | Gant 脚本(存放項目特定的脚本) |
src | |
| | groovy | 通用Groovy 源文件(存放其他那些没有慣例位置的文件) |
| | java | Java 來源文件( 用予存放的Java 代碼)。(該目錄中的文件將被編譯並包含到WAR 文件中。) |
test | |
| | integration | 依賴其他组件(如資料庫)的測試腳本 |
| | unit | 測試隔離組件的測試腳本 |
web-app | |
| | css | CSS |
| | images | 圖像文件(JPG、GIF、PNG 等) |
| | js | JavaScript 文件( 包括像Prototype 、script.aculo.us、YUI 等這樣的第三方庫。) |
| | META-INF | 典型的JEE 目錄,用予存放manifest 文件 |
| | WEB-INF | 典型的JEE 目錄,用予存放web.xml 和其他配置文件 |
PG Levin Li 發表在 痞客邦 留言(0) 人氣(154)
如果執行時錯誤訊息如下:
Server failed to start: LifecycleException: Protocol handler initialization failed:
java.net.BindException: Address already in use<null>:8080
就是要改port號
指令如下:
-Dserver.port=9090 run-app
說明:
-Dserver.port= 你的port要改為多少 run-app
PG Levin Li 發表在 痞客邦 留言(0) 人氣(25)