main.gsp 레이아웃의 특정 모델에 액세스해야합니다. 나는Grails : main.gsp 레이아웃의 모델 액세스
class MyFilters {
all(controller:'*', action:'*') {
after = {viewModel ->
viewModel.client = Client.get(session.clientId)
// println "Client is: ${client.toString()}"
}
}
}
을 그리고 내 GSP에 : 나는 주위 검색이를 얻을 수있는 가장 좋은 방법은 필터 후를 작성하고 뷰 모델의 PARAM에 모델을 적용하고 그래서 같이 GSP에 액세스하는 것을 읽고 "클라이언트"가 있어야하고 액세스 할 수 있어야합니까?
<g:if test="${client.isPartner()}">
Do something
</g:if>
<g:else>
Do something else
</g:else>
내가 할 노력하고있어의 예
는 GSP 템플릿을 포함하고 로그인 한 현재 클라이언트 파트너에 속하는 경우에 따라 특정 CSS 스타일 시트를 포함한다. 나는이 작업을 수행 할 때마다<g:if test="${client.isPartner()}">
<link rel="stylesheet" type="text/css" href="/partners/${client.getPartner().toString()}/css/style.css"/>
</g:if>
<g:else>
<link rel="stylesheet" type="text/css" href="/partners/default/css/style.css"/>
</g:else>
이것은 또한, 그러나 ... GSP 템플릿을 함께 할 것, 내가의 예외가 : 예를 들어, 그래서 특별한 CSS 및 GSP 템플릿의 위치는 파트너의 이름에 따라 달라집니다
ERROR grails.web.pages.GroovyPagesServlet - Original exception : Cannot invoke method isPartner() on null object
분명히 "클라이언트"는 GSP에서 null입니다. 위에 표시된 필터에서 println의 주석을 제거하면 현재 null이 아니며 클라이언트 이름이 인쇄됩니다. 내가 여기서 뭔가 잘못하고있는거야? main.gsp 내부의 모델을 얻는 더 좋은 방법이 있습니까?
이 나를 위해 작동하지 않습니다. isPartner() 메서드는 hasMany 관계 인 모델의 일부를 액세스하기 때문에 지연 초기화에 대해 다른 오류가 발생합니다. 왜 이런 일이 일어나는지 ...그러나 isPartner() 메서드 이외의 다른 메서드를 사용하기 때문에 클라이언트 개체가 필요합니다. 예를 들어 파트너에게도 액세스 권한이 필요합니다. 어쨌든 고마워! – intargc
taglib로이 문제를 해결해야합니다. 많은 로직을 뷰로 끌어 들이면 MVC 개념을 위반하게됩니다. 어쩌면 당신이 시도한 taglib의 코드를 게시하고 사람들이 도움을 줄 수 있다면 가장 쉽다. – david
사실, 깨끗한 후에는 taglib에서 잘 작동한다. 그러나 if/else는 그 조건에 기반하여 일부 CSS를 렌더링하고, 특정 지역의 CSS에서 얻으려면 파트너 ID가 필요하기 때문에 isPartner() 메소드에 대한 액세스가 필요하기 때문에 의미가 있습니까? ... ... mytag : client>와 같은 태그가 있어야합니다. 그 태그의 본문 부분에 클라이언트 개체에 액세스 할 줄 것이라고 ...하지만 좋은 또는 나쁜 것으로 간주됩니다? –
intargc