성배 서비스에서 g.render 사용하기
grails 서비스에서 g.render를 사용하려고 하는데 기본적으로 g가 서비스에 제공되지 않는 것 같습니다.서비스에서 템플릿 엔진이 뷰를 렌더링하도록 하는 방법이 있습니까?제가 이 일에 대해 잘못 생각하고 있는 것 같습니다.제가 원하는 것은 뷰를 부분 템플릿에서 문자열로 렌더링하고 결과 문자열을 JSON 응답의 일부로 다시 보내어 AJAX 업데이트에 사용하는 것입니다.
무슨 생각 있어요?
저는 존의 주장에 전적으로 동의합니다. 서비스에서 GSP를 하는 것은 일반적으로 잘못된 설계 결정입니다.하지만 예외 없는 규칙은 없습니다!그래도 이 작업을 수행하려면 다음과 같은 방법을 사용해 보십시오.
class MyService implements InitializingBean {
boolean transactional = false
def gspTagLibraryLookup // being automatically injected by spring
def g
public void afterPropertiesSet() {
g = gspTagLibraryLookup.lookupNamespaceDispatcher("g")
assert g
}
def serviceMethod() {
// do anything with e.g. g.render
}
}
gspTagLibraryLookup bean을 사용하면 물론 서비스에서 원하는 다른 모든 태그립에 액세스할 수 있습니다.
PageRenderer가 탑재된 Grails 2에서는 더욱 간단해졌습니다. 예:
class SomeService {
def groovyPageRenderer
void someMethod() {
String html = groovyPageRenderer.render(view: '/email/someTemplateName')
}
}
API - http://grails.org/doc/latest/api/grails/gsp/PageRenderer.html
더 완벽한 예 - http://mrhaki.blogspot.com/2012/03/grails-goodness-render-gsp-views-and.html
제 조언은 컨트롤러에서 이 작업을 수행하라는 것입니다.서비스에는 재사용 가능한 논리가 있어야 하며 뷰 템플릿에 의존하지 않아야 하며, 해당 작업은 컨트롤러에 맡겨야 합니다.서비스를 사용하여 템플릿에 전달해야 하는 데이터를 얻되 템플릿과 상호 작용하는 작업은 컨트롤러에 맡깁니다.
여기 스테판과 비슷하지만 조금 더 간단한 해결책이 있습니다.
import org.codehaus.groovy.grails.plugins.web.taglib.ApplicationTagLib
import org.springframework.context.ApplicationContext
import org.springframework.context.ApplicationContextAware
class MyService implements ApplicationContextAware {
private ApplicationTagLib g
void setApplicationContext(ApplicationContext applicationContext) {
g = applicationContext.getBean(ApplicationTagLib)
// now you have a reference to g that you can call render() on
}
}
언급URL : https://stackoverflow.com/questions/1777640/using-g-render-in-a-grails-service
'programing' 카테고리의 다른 글
| 5 mysql 서버에서 테이블 1개를 사용하고 서버를 함께 연결합니다. (0) | 2023.10.13 |
|---|---|
| RAW 타입 변수는 PL/SQL 코드에서 불변입니까? (0) | 2023.10.13 |
| 'jquery-2.0.2min.map을 찾을 수 없습니다' 오류 (0) | 2023.10.13 |
| Oracle - 특정 값을 기준으로 먼저 순서를 지정한 후 나머지 순서를 지정 (0) | 2023.10.13 |
| C에서 정적 함수와 변수를 사용하는 이유 (0) | 2023.10.13 |