Groovy 是否可以在GSP中声明函数?

Groovy 是否可以在GSP中声明函数?,groovy,jsp-tags,gsp,Groovy,Jsp Tags,Gsp,如何在GSP中声明函数?我需要像taglib这样的东西,但在GSP内部声明-在GSP外部没有关系。只是不要这样做。这完全违背了普惠制的宗旨。GSP设计用于处理可视标记信息,而不是编程逻辑。直接在GSP中抛出函数将导致无法维护的代码混乱 你为什么不把它放在标签里?这就是标签的用途;它只在GSP中使用并不重要。GSP应仅包含简单的显示逻辑和输出内容。对于复杂逻辑,可重用代码应始终包含在标记库或某种控制器或服务中 您没有提到您正在使用的框架,例如Gaelyk或Grails。(除非您出于某种原因在服务器

如何在GSP中声明函数?我需要像taglib这样的东西,但在GSP内部声明-在GSP外部没有关系。只是不要这样做。这完全违背了普惠制的宗旨。GSP设计用于处理可视标记信息,而不是编程逻辑。直接在GSP中抛出函数将导致无法维护的代码混乱

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

您没有提到您正在使用的框架,例如Gaelyk或Grails。(除非您出于某种原因在服务器上使用纯Groovy。)如果没有更多信息,这里没有实用的方法来推荐一个好的解决方案

如果您在GSP中使用JSP样式的标记(
),则可能是做错了


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

您不能在GSP中定义方法。但如果需要,可以使用匿名函数:D

例如:

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

${美化(某些文本)}

虽然这个例子没有太多意义,因为可以内联一些格式。对于视图的任何额外逻辑,我都会遵循并使用标记库。

假设我有行的模板。此模板不符合此GSP的要求。可以在GSP中声明模板吗?我会在这里使用
模板
对于小的内部模板很有用,比如层次结构。@fedor.belov子模板应该保存在自己的文件中,并带有前导下划线,例如
\u header.GSP
,并使用
调用。另请参见我同意在大多数情况下使用标记库(或者用
g:render
调用的子模板)是正确的解决方案。但是有时候有一点重复的逻辑,在GSP中只写一次是好的,但是不能保证这样升级到外部文件。在这种情况下,我喜欢这样写:
注意双卷曲
{}定义闭包的
。然后将其作为常规函数使用:
${greet(“Sam”)}