2013-05-31 6 views
1

Представьте, что на странице макета вашего приложения grails есть динамический контент, который обновляется при каждом запросе страницы. Когда запрашивается страница, запрошенный контроллер не имеет ничего общего с динамическими данными, предоставленными на странице main.gsp. Как мне это сделать?Динамическое содержимое страницы макета в Grails

Я имею в виду, когда запрашивается страница, как я могу обновить динамическую часть части макета, с которой агенты статистики страницы агностик? Плюс я не хочу, чтобы динамический код макета был каждым контроллером.

+0

По существу, есть данные, которые должны использоваться в каждом GSP, который у вас есть, и вы хотите избежать его передачи в каждом контроллере? –

+0

Вы можете сделать обычный код в GSP, однако я сомневаюсь, что это лучшее решение. Сделайте это с помощью <% Map data = [:]%> '. –

+0

На самом деле я имею в виду, что некоторые данные в основном gsp должны поступать из удаленного вызова службы, но я не хочу, чтобы каждый мой контроллер вызывал эту веб-службу и все данные модели для обновления данных страницы макета. Я хочу сказать, что я хочу как-то заставить страницу макета отвечать за динамическое обновление данных, но у меня не может быть двух контроллеров для одной страницы. Лучше ли это сделать? – iCode

ответ

1

Возможно, вы сможете создать TagLib.

grails create-tag-lib myLayout 

Затем сделайте свой taglib ответственным за вызовы удаленной службы. Вы можете сделать почти что угодно в taglib, который вы можете использовать в контроллере, и вы также можете позвонить любым сервисам Grails, которые вы уже создали.

class MyLayoutTagLib { 
    static namespace = "myLayout" 
    def stockQuoteService 

    def getStockPrice = { attrs ->  
     out << stockQuoteService.getLatestPrice(attrs.stockSymbol) 
    } 
} 

Затем в GSP

<myLayout:getStockPrice stockSymbol="${user.favoriteStockSymbol}" /> 

Или же вы получите соответствующие данные, чтобы сделать вызов удаленной службы.

Смежные вопросы