2012-02-07 70 views

回答

8

您无法在GSP中定义方法。但你可以有匿名函数,如果你想:d

例子:

<% 
    def prettify = { "***$it***" } 
%> 
<h1>${prettify(someText)}</h1> 

虽然这个例子没有什么太大的意义,因为这一点格式化会内联。对于视图的任何一种额外的逻辑,我会遵循OverZealous recommendation并使用taglib。

+3

我同意在大多数情况下,a Taglib(或用'g:render'调用的子模板)是正确的解决方案。但有时候会有一些重复的逻辑,在GSP中只写一次是好事,但不能保证这样的升级到外部文件。在这些情况下,我喜欢这样写:''注意定义闭包的双线性{{}}'。然后,您可以像使用常规函数那样使用它:'{{greet(“Sam”)}' – Tobia 2015-05-20 10:41:54

6

不,不要这样做。这完全违背了普惠制的目的。 GSP旨在处理视觉标记信息,而不是编程逻辑。直接在您的GSP 中投掷功能会导致无法维护的代码混乱。

为什么你不把它放在标签中?这是标签的用途;它只在您的GSP中使用并不重要。普惠制只应包含简单的显示逻辑和输出内容。可复用代码应始终包含在taglib中或用于复杂逻辑的某种控制器或服务中。

你没有提到你使用的是什么框架,比如Gaelyk或Grails。 (除非你出于某种原因在服务器上使用纯粹的Groovy。)在没有更多信息的情况下,没有可行的方法来推荐一个好的解决方案。

如果您在GSP中使用JSP样式标签(<% %>),则可能是错误的。

如果您想要更好的答案,请提供关于编程环境的更多详细信息,目标是什么,以及为什么(为什么您不想使用taglib)。

+0

假设我有模板行。这个模板在这个GSP之外不会变化。是否可以在GSP中声明模板? – 2012-02-07 11:10:29

+0

我会使用' TEMPLATE HERE' – fixitagain 2012-02-07 13:34:08

+0

对于小型内部模板(如层次结构)可能很有用。 – Guillaume 2014-08-08 16:22:43