2013-02-05 7 views
8

Ich versuche, eine groovy-Funktion in einem GSP zu verwenden. Bitte helft mir, meine Haare hier draußen zu tarieren.Importieren und Verwenden von groovy Code in GSP

An der Spitze meiner GSP ich habe <%@ page import = company.ConstantsFile %>

In meinem GSP Ich habe

<p> 
I have been in the heating and cooling business for <%(ConstantsFile.daysBetween())%> 
</p> 

und meine ConstantsFile.groovy

package company 

import static java.util.Calendar.* 

class ConstantsFile { 

    def daysBetween() { 
     def startDate = Calendar.instance 
     def m = [:] 
     m[YEAR] = 2004 
     m[MONTH] = "JUNE" 
     m[DATE] = 26 
     startDate.set(m) 
     def today = Calendar.instance 

     render today - startDate 
    } 
} 

Ich habe auch versucht, Mieter zu Puts zu ändern, system.out, etc, aber das ist nicht mein Hauptproblem.

Error 500: Internal Server Error 
URI 
/company/ 
Class 
java.lang.NullPointerException 
Message 
Cannot invoke method daysBetween() on null object 

Also versuche ich

<p> 
    I have been in the heating and cooling business for <%(new ConstantsFile.daysBetween())%> 
    </p> 

aber dann bekomme ich

Class: org.codehaus.groovy.control.MultipleCompilationErrorsException 

unable to resolve class ConstantsFile.daysBetween @ line 37, column 1. (new ConstantsFile.daysBetween())^1 error 

Bitte mir jemand helfen oder mich auf eine Website verweisen, die zeigt, was zu tun .. habe ich versucht, googeln und Alles spricht von ag: select oder einer anderen Art von Tag ... Ich möchte nur das Ergebnis der Funktion ausgeben, wie ich es in den JSPs gewohnt war.

Antwort

17

Zuerst Ihr GSP Import sollte sein:

<%@ page import="company.ConstantsFile" %> 

Zweitens Ihre daysBetween statisch sein sollte (macht es mehr Sinn), und Sie machen vor nichts anderes als ein Controller:

class ConstantsFile { 

    static daysBetween() { 
     def startDate = Calendar.instance 
     def m = [:] 
     m[YEAR] = 2004 
     m[MONTH] = "JUNE" 
     m[DATE] = 26 
     startDate.set(m) 
     def today = Calendar.instance 

     return today - startDate 
    } 
} 

Drittens Zugriff es auf folgende Weise:

<p>I have been in the heating and cooling business for ${ConstantsFile.daysBetween}</p> 

Und schließlich sollten Sie eine taglib für diesen Einsatz . Ich bin die Bearbeitung meiner Post jetzt ein Beispiel

class MyTagLib { 

    static namespace = "my" 

    def daysBetween = { attr -> 
    out << ConstantsFile.daysBetween() 
    } 
} 

Dann in Ihrem GSP

<p>I have been in the heating and cooling business for <my:daysBetween /></p> 
+0

Danke für Ihre Hilfe verwenden, um hinzuzufügen, habe ich versucht, den ersten Weg du mir vorgeschlagen, und ich erhalte die folgende Fehlermeldung: Fehler 500: Interner Serverfehler URI /Unternehmen/ Klasse groovy.lang.MissingMethodException Nachricht Keine Signatur der Methode: statische company.ConstantsFile.daysBetween() für Argumenttypen anwendbar sind:() Werte: [] Pos Mögliche Lösungen: daysBetween() –

+0

OK. Es tut mir so leid, dies zu tun, aber es war die Kalenderinstanz und Mathe, die ich versuchte zu tun. +1 und akzeptieren für Hilfe in mir –