2015-04-15 33 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类及其助手(通常是依赖注入的服务)。 –