Domain > constraints > validator
>Custom
name()
motherName (validator: {val, obj ->
if(val.size() < 1 && obj.name.size() < 1)
return ['validator.message']
})
Service > Criteria
Service
@Transactional(readOnly = true)
def searchCriteria(params) {
def m_itemCriteria = M_item.createCriteria()
List results = m_itemCriteria.list() {
if(params?.name) {
eq("name", params.name)
}
maxResults(10)
order("name", "desc")
}
}
Controller
def find() {
List results = m_itemService.searchCriteria(params)
render(view:'list', model:[m_itemInstanceList:results, m_itemInstanceTotal: results.size()])
}
※Sample
def testCriteria = test.createCriteria()
List results = testCriteria .list(max:10, offset:0) {
eq("name", params.name)
and {
between("balance", 500, 1000)
eq("branch", "London")
}
ilike("name","%${params.name}%")
between("balance", 500, 1000)
eq("branch", "London")
or {
like("holderFirstName", "Fred%")
like("holderFirstName", "Barney%")
}
maxResults(10)
firstResult(50)
order("holderLastName", "desc")
}
//println "Accounts of ${results.totalCount}"
//println "Rendering ${results.size()}"
render(view:'list', model:[testInstanceList:results, testInstanceTotal: results.size()])
Enum
Enum
package gapp
enum GenderEnum {
MALE('Male','msg.male.lavel'),
FEMALE('Female','msg.female.lavel'),
TRANCE('Trance','msg.trance.lavel')
private final String val
private final String msg
public GenderEnum(String val, String msg) {
this.val = val
this.msg = msg
}
String value() { return val }
String msg() { return msg }
}
Domain
GenderEnum gender
static mapping = {
version false
}
View
<g:select name="action"
from="${com.domain.ActionEnum?.values()}"
keys="${com.domain.ActionEnum.values()*.name()}" required=""
value="${xyzInstance?.action?.name()}"/>
<g:select optionKey='id' name="action"
from="${com.domain.ActionEnum?.values()}"
required=""
value="${xyzInstance?.action}"/>
Domain
//複合PK
static mapping = {
id composite:['holdYear', 'member']
}
//
String toString(){
return name
}
//db mapping
static mapping = {
table 'some_other_table_name'
columns {
name column:'airline_name'
url column:'link'
frequentFlyer column:'ff_id'
}
}
テーブルに格納されないドメイン・クラスのフィールドを設定するには、静的 transients 行を追加
static transients = ["tempField1", "tempField2"]
Car car
static embedded = {'car'}
static mapping = {
songs cascade: 'delete'
discriminator 'xxxxx'
discriminator value: '42', type: 'integer'
tablePerHierarchy false
}
コンボ・ボックス主キー表示時の漏えい回避
String toString(){
return name
}
//id to String
String id
static mapping = {
table "m_item"
id column: 'jan_code', generator: 'assigned'
}
M_item m_item
static mapping = {
m_item column: 'jan_code'
}
Pagenateページ番号非表示化
<style>
<!--
.pagination .step, .pagination .currentStep {
display : none ;
}
-->
</style>
java.util.List表示
controller
def list() {
List<NewClass> results2 = new ArrayList<NewClass>()
NewClass m_item2 = new NewClass()
m_item2.setName("java1")
results2.add(m_item2)
NewClass m_item3 = new NewClass()
m_item3.setName("java2")
results2.add(m_item3)
render(view:'list'm_itemInstanceList2:results2, m_itemInstanceTotal: results.size()])
}
gsp
<g:each in="${m_itemInstanceList2}" status="j" var="m_itemInstance2">
<tr class="${(j % 2) == 0 ? 'even' : 'odd'}">
<td>${j+1}</td>
<%--<td><c:out value="${m_itemInstance2.name}"/></td>--%>
<td>${m_itemInstance2.getName()}</td>
</tr>
</g:each>
CloudFoundary
環境
Cloud Foundryプラグインのインストール
grails install-plugin cloud-foundry
grails-app/conf/Config.groovy修正
例)
grails.plugin.cloudfoundry.username アカウント用のユーザ名/メールアドレス なし(必須)
grails.plugin.cloudfoundry.password アカウント用のパスワード なし(必須)
grails.plugin.cloudfoundry.target APIサーバ名 'api.cloudfoundry.com'
grails.plugin.cloudfoundry.appname アプリケーション名 Grailsアプリケーションの名前
grails.plugin.cloudfoundry.showStackTrace コンソールにスタックトレースを表示するかどうか false
grails.plugin.cloudfoundry.testStartWithGet GETリクエストで開始や再起動をテストするかどうか true
grails.plugin.cloudfoundry.testStartGetUrl 上記プロパティがtrueの場合に使用するURL アプリケーションのURL
grails.plugin.cloudfoundry.datasource.disableTimeoutAutoconfiguration MySQLデータソースのコネクションタイムアウトチェックの自動設定を無効にするかどうか true
grails.plugin.cloudfoundry.username=
grails.plugin.cloudfoundry.password=
grails.plugin.cloudfoundry.target='api.cloudfoundry.com'
grails.plugin.cloudfoundry.appname=gapp
grails.plugin.cloudfoundry.showStackTrace=false
grails.plugin.cloudfoundry.testStartWithGet=true
grails.plugin.cloudfoundry.testStartGetUrl=gapp
grails.plugin.cloudfoundry.datasource.disableTimeoutAutoconfiguration=true
grails refresh-dependencies
grails dependencies-report
w3m target/dependencies-report/index.html
コマンド
アプリのデプロイ
grails prod cf-push
アプリのアップデート
grails prod cf-update
インスタンス数変更
grails cf-show-instances
grails cf-update-instances 2
メモリ割り当て変更
grails cf-stats
grails cf-update-memory 1G
ログの確認
grails cf-logs
アプリケーションの起動・停止・再起動
grails prod cf-start
grails prod cf-stop
grails prod cf-restart
リモートファイル確認
grails cf-list-files/
grails cf-get-file logs/stderr.log
アプリケーションの削除
grails cf-delete-app
全アプリケーションの削除
grails cf-delete-all-apps
データのインポート
cf-tunnel
最終更新:2013年10月11日 09:36