2012-02-07 86 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

相關問題