2015-04-18 128 views
1

我在使用grails保存域實例時遇到問題;傳遞給控制器​​中默認更新方法的domainInstance是NULL。我提交的GSP頁面不是默認的編輯頁面。我有一些需要保存的數據庫值。我在頁面上定義了表單標籤,其中包含我需要提交的值,如下所示。 <g:form id="sampleForm" url="[resource:domainInstance, controller:'cntrlrName', action:'update']" method="PUT" >控制器中的Grails默認方法

我也有一個版本字段,看起來像這樣。 <g:hiddenField name="version" value="${domainInstance?.version}" />

我的G:提交如下 <g:actionSubmit action="update" value="${message(code: 'default.button.update.label', default: 'Update')}" />

爲什麼我的域名例如空?我錯過了什麼?

+0

請顯示一些社區代碼來幫助你 –

+0

你的問題是什麼,併發布你的控制器代碼。 – dsharew

+0

對不起。我注意到代碼沒有出現在我的問題描述中。我現在更新了它。 – JavaProgrammer

回答

1

您可以通過domainInstance,但我覺得最好的做法是傳遞id而不是對象。嘗試傳遞域實例的ID,然後讀取控制器中的對象。

<g:form name="sampleForm" action="action" controller="controller" id="${domainInstance.id}" ></g:form> 

//在控制器

def resource = Domain.read(params.id) 

另一種方法可能是通過domainInstance作爲hiddenField

<g:hiddenField name="resource" value="$domainInstance" /> 
+0

謝謝非常多Dspano – JavaProgrammer

2

這是常見的錯誤,一個可以使。在<g:form>標籤屬性id不是HTML標籤的id屬性,但它是在鏈接到使用默認映射的Grails的,即

"/$controller/$action/$id" {} 

因此改變你的標籤作爲ID:

<g:form name="sampleForm" id="${domainInstance.id}" controller="cntrlrName" action="update" method="PUT"> 
+0

謝謝!這解決了我的問題 – JavaProgrammer