2009-07-28 22 views
15

Ví dụ, tôi có thể đưaTôi có thể sử dụng thẻ grails bên ngoài GSP không?

<g:createLink controller="user" action="show" /> 

bên trong một tập tin .gsp và nó sẽ làm việc độc đáo.

Nhưng tôi cũng muốn sử dụng cùng đóng cửa createLink bên trong một tập tin .groovy mà không phải là một phần của quan điểm grails

Trả lời

20

Bạn có thể sử dụng phương pháp taglib từ Grails điều khiển, ví dụ:

def userShow = g.createLink(controller:"user", action:"show") 

Đối với thẻ gắn liền (hoặc trong không gian tên g), bạn có thể bỏ qua tiền tố không gian tên trong cuộc gọi phương thức.

+3

Phải có nhiều điều hơn thế, chỉ sử dụng các mã trên trong một bộ điều khiển grails cho 'lỗi = groovy.lang.MissingPropertyException: Không có tài sản đó: g'. – aroth

+0

chắc chắn IS nhiều hơn thế! Xem câu trả lời của Matt Christianson về cách giải quyết lỗi "Không có thuộc tính: g". – Twelve24

+0

Tôi nghĩ trước tiên bạn phải tiêm grailsỨng dụng vào bộ điều khiển với 'def grailsApplication'. Trong các dịch vụ, trước tiên bạn phải định nghĩa 'g' bằng 'def g = gspTagLibraryLookup.lookupNamespaceDispatcher (" g ")'. –

14

Tiêm grailsỨng dụng vào dịch vụ/bộ lọc của bạn.

def grailsApplication 

Và nhận bean Spring.

def g = grailsApplication.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib') 
def userShow = g.createLink(controller: 'user', action: 'show') 
+0

Tôi đã tìm kiếm khắp nơi để xem cách tạo liên kết trong một dịch vụ ... cảm ơn bạn đã đăng bài này! – loeschg

7

Đối với các lớp học không được quản lý, bạn có thể tham khảo các g taglib với:

def g = ApplicationHolder.application.mainContext.getBean('org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib') 
Các vấn đề liên quan