2013-02-05 38 views
8

Tôi đang cố gắng sử dụng hàm groovy bên trong GSP. Xin vui lòng giúp đỡ như tôi về để tare tóc của tôi ra ở đây.Nhập và sử dụng mã groovy trong GSP

Ở phía trên của GSP của tôi có <%@ page import = company.ConstantsFile %>

Bên trong GSP của tôi, tôi có

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

và ConstantsFile.groovy tôi

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 
    } 
} 

Tôi cũng đã cố gắng thay đổi người thuê nhà để puts, system.out, v.v. nhưng đó không phải là vấn đề chính của tôi.

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

Vì vậy, tôi cố gắng

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

nhưng sau đó tôi nhận được

Class: org.codehaus.groovy.control.MultipleCompilationErrorsException 

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

Hãy ai đó giúp tôi hoặc điểm tôi vào một trang web cho thấy phải làm gì .. Tôi đã thử googling và tất cả mọi thứ nói về ag: chọn hoặc một số loại thẻ khác ... Tôi chỉ muốn xuất kết quả của hàm như tôi đã sử dụng trong các JSP.

Trả lời

17

Thứ nhất, nhập khẩu của GSP của bạn nên là:

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

Thứ hai, daysBetween của bạn nên được tĩnh (nó có ý nghĩa nhiều hơn) và bạn không làm bất cứ điều gì nhưng một bộ điều khiển:

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 
    } 
} 

Thứ ba, truy cập theo cách sau:

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

Và cuối cùng, bạn nên sử dụng thẻ tag cho điều này . Tôi đang chỉnh sửa bài của tôi bây giờ để thêm một ví dụ

class MyTagLib { 

    static namespace = "my" 

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

Sau đó sử dụng trong GSP của bạn

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

Nhờ sự giúp đỡ của bạn, tôi đã cố gắng cách đầu tiên bạn đề nghị với tôi và tôi nhận được lỗi sau: Lỗi 500: Internal server Error URI /công ty/ Lớp groovy.lang.MissingMethodException nhắn Không chữ ký của phương pháp: company.ConstantsFile.daysBetween tĩnh() được áp dụng cho loại đối số:() giá trị: [] Pos giải pháp sible: daysBetween() –

+0

OK. Tôi rất tiếc khi làm điều này, nhưng đó là trường hợp Lịch và môn toán mà tôi đang cố gắng thực hiện. +1 và chấp nhận để trợ giúp tôi –