2015-04-15 36 views
0

我使用的是Grails 1.3.8(舊的但金色)。在我看來,我呈現爲含鑑於通過與相同的變量的模板:無法訪問已加載的模板中的域類方法

<g:render template="areaInfoTemplate" model="${pageScope.variables}"/> 

這工作,除非我嘗試接入方式上域類模板內:

<g:if test="${currentState == State.findByName('foobar')}">...</g:if> 

信息到:

Exception Message: Cannot invoke method findByName() on null object 

如果我訪問State在主視圖gsp一切都很好。

我的領域類是:

class State { 
    String name 
    String value 

    static constraints = { 
     name(nullable:false,blank:false,size:0..255) 
     value(nullable:false,blank:false,size:0..255) 
    } 
} 

回答

0

我忘了在文件的開頭添加一個import語句:

<%@ page import="my.wonderful.package.State"%> 
+0

這可能適合你,但它不是一個解決方案。聽@burt – dsharew

1

Grails是不是PHP - 請不要讓數據庫調用從視圖層(除非你喜歡對抗人爲的,自我造成的可伸縮性問題)。只需在控制器或服務中進行調用,並將數據傳遞給視圖以進行渲染。 GSP只應該負責渲染輸出,而不是數據庫訪問等更高級別的問題。

+0

你是對的。將被修復......但是對於那個用例是那個import語句呢? –

+0

永遠不要說永遠:)有時候在GSP中做更加實際的工作,當你想在模板中使用不同的控制器(或者所有的模板)時,可能很難將邏輯移動到控制器層並保持乾燥。但在大多數情況下,taglib是一個很好的選擇 - 您仍然在視圖中進行僅查看工作,並將業務邏輯和數據庫訪問卸載到taglib類及其助手(通常是依賴注入的服務)。 –