2013-03-28 20 views
0

我是Grails的新手,一點一點地學習,但我真的很苦惱這個。由Grails的自動生成的ID在GSP中顯示數據時出錯 - 獲取數據類型錯誤

好的,所以我試圖從Grails中的一個類中提供數據。它將數據存儲在mySQL數據庫中。當我們在類中有一個名爲「id」的整型參數時,它一切正常,但我們發現Grails在數據庫表中自動分配了一個'id'行,所以我們刪除了它。現在,當我在GSP運行這段代碼:

<g:each in="${Proposal.where {id == 1} }" var="proposal"> 
<h3> 
    ${proposal.name} 
</h3> 
<p> 
    Starting date: <g:formatDate format="dd.MM.yyyy" date="${proposal.date_started}" /> 
</p> 
<p> 
    ending date:: <g:formatDate format="dd.MM.yyyy" date="${proposal.date_ended}" /> 
</p> 
<p> 
    description: ${ proposal.description } 
</p> 
</g:each> 

的「身份證== 1」的部分是隻是爲了獲得一些虛擬數據出來,我確信有一個在數據庫中符合的ID 1.稍後將更改爲輸入參數,以顯示動態詳細信息頁面。
當我嘗試導航到這個頁面,我得到這個錯誤:

URI /site/proposal/
Class java.lang.ClassCastException
Message java.lang.Integer cannot be cast to java.lang.Long

堆棧跟蹤似乎沒有做多告訴我更多的這種情況出現,指出我的上述代碼的位置。數據庫表有一個名爲'id'的coloumn,它是一個bigint。 Grails是否應該能夠處理這種數據類型不匹配?無論哪種方式,都不是Integer類的long和bigint子集?

我試圖以倒退的方式列出數據?是否有更好的標籤可供使用?我很困惑,需要一杯茶。

回答

0

首先,將演示文稿(視圖)與數據庫查詢分開很好,因此如果查詢更復雜且具有更多變體,則此查詢的更好位置是控制器或服務。

class PropsalController { 
    def showFirst() { 
    def proposal = Proposal.get(1) //or Proposal.where{ id == 1L } 
    [proposal: proposal] 
    } 
} 

由於您只過濾了一個對象實例,因此不需要每個標記。

<h3> 
    ${proposal.name} 
</h3> 
<p> 
    Starting date: <g:formatDate format="dd.MM.yyyy" date="${proposal.date_started}" /> 
</p> 
<p> 
    ending date:: <g:formatDate format="dd.MM.yyyy" date="${proposal.date_ended}" /> 
</p> 
<p> 
    description: ${ proposal.description } 
</p> 

,你面臨的轉換異常的發生是因爲,在默認情況下,Grails將創建一個id字段與類型Long和審覈規定不處理這個轉換。有一個爲此創建的JIRA。如果您需要使用查詢,請確保爲您的ID長時間投射。

+0

太好了,我會試着實現這個,謝謝!這是Grails的陡峭的學習曲線,但很有趣! –

相關問題