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

fed*_*lov 9 groovy jsp-tags gsp

如何在GSP中声明一个函数?我需要像taglib这样的东西,但在GSP中声明 - 外面没关系

epi*_*ian 9

您无法在GSP中定义方法.但如果你愿意,你可以拥有匿名功能:D

例:

<%
    def prettify = { "***$it***" }
%>
<h1>${prettify(someText)}</h1>
Run Code Online (Sandbox Code Playgroud)

虽然这个例子没有太多意义,因为可以内联小格式.对于视图的任何额外逻辑,我会遵循OverZealous建议并使用taglib.

  • 我同意在大多数情况下,Taglib(或使用`g:render`调用的子模板)是正确的解决方案.但有时会有一些重复的逻辑,在GSP中只编写一次是好的,但不保证这样的升级到外部文件.在这些情况下,我喜欢这样写:`<g:set var ="greet"value ="$ {{it =〜/^Mr\./?it:"Mr. $ it"}}"/>`注意定义闭包的双曲线`{{}}`.然后你就像常规函数一样使用它:`$ {greet("Sam")}` (3认同)

Ove*_*ous 6

不,只是不要这样做.这完全违背了GSP的目的.GSP旨在处理可视标记信息,而不是编程逻辑.直接在GSP中抛出函数导致无法维护的代码混乱.

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

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

如果您<% %>在GSP 中使用JSP样式的标记(),那么您可能做错了.

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