2016-06-20 6 views
0

Grails 3을 사용하고 있으며 나머지 웹 사이트의 개요가 들어있는 템플릿 페이지에서 작업하고 있습니다.Grails를 호출하지 않고 Grails 컨트롤러 메소드를 호출하십시오.

class LayoutsController { 

    def loadUsers() { 
     println("we are in here") 
    }  

} 

(가) 포함 문에 실행됩니다 다음과 같이

<g:include controller="layouts" action="loadUsers" /> 

내 컨트롤러 같습니다 the official documentation에서 권장하는 I 및 다음 코드를 사용하여, 컨트롤러에서 메소드를 호출하려고 시도하고있다 나는 그보기/GSP 페이지를하지 않는

[http-nio-8443-exec-4] ERROR o.a.c.c.C.[.[.[.[grailsDispatcherServlet] - Servlet.service() for servlet grailsDispatcherServlet threw exception 
javax.servlet.ServletException: Could not resolve view with name 'loadUsers' in servlet with name 'grailsDispatcherServlet' 

은 당연히 오류가 의미가있다 : 내 임베디드 바람둥이, 나는 다음과 같은 오류가 발생합니다. 나는 단순히 백엔드에 몇 가지 물건을 만드는 방법을 호출하기 만하면된다. gsp 페이지에 묶지 않는다. 이것이 가능한가? 기본적으로 JSF와 비슷한 방식으로 빈에 대한 공용 메소드를 실행할 수 있습니다.

+0

당신은'def loadUsers() {render 'ok'}'와 같은 것을 찾고 계십니까? – injecteer

답변

1

컨트롤러 동작이 호출 될 때 동작이 redirect 또는 render과 같은 호출하지 않으면보기가 렌더링됩니다. 그것은 의도적으로 설계된 동작이며 컨트롤러 동작이 어떻게 동작할까요? 뷰가 존재하지 않으면 오류가 발생합니다.

당신이 무엇을하려고하는지 명확하지 않지만, 단지 어떤 논리를 불러내려고하고 있는데 GSP에서 약간 특이한 것을 보는 것을 원치 않는다면 당신이하고자하는 것은 무엇이든하는 커스텀 GSP 태그를 호출하여이를 수행 할 수 있습니다. 일반적으로 모든 일은 뷰가 렌더링되기 전에 완료됩니다 (GSP 코드가 포함되기 전에).

+0

의견을 보내 주셔서 감사합니다. Jeff. 내가 말하는 것을 이해하는 동안 gsp와 서버 측 방법 사이에서 브리지를 연결하는 방법에 대해 혼란 스럽다. 예를 들어 메뉴 항목을 동적으로 보여줍니다. 나에게 웹 사이트의 템플릿에 문을 써서 메뉴의 어느 항목을 표시해야하는지, 어떤 메뉴를 표시하지 않아야 하는지를 식별하는 것이 좋습니다. 이제는 모든 뷰/컨트롤러에 연결하지 않고 어떤 방법을 호출하여 어떤 항목을 표시할지 여부를 결정하도록 템플릿에 지시합니다. 올바른 접근법을 설명하기 위해이 예를 계속 확장 할 수 있습니까? – angryip

+0

레이아웃을 사용하여 모든 작업을 수행 할 수 있다고 생각합니다. 필요한 경우 다른 섹션에 다른 레이아웃을 적용 할 수 있습니다. 그런 다음 템플릿을 사용하면 필요한 논리를 수행 할 수 있습니다.이 템플릿은 기본 페이지 변수를 공유합니다. 실패한 것은 tag lib에서 찾고자하는 것의 논리를 감싸고 필요한 경우이 tag lib를 호출합니다. 가장 적은 양의 작업 이후 처음 메서드를 추천합니다. @angryip – Vahid

+1

@angryip 일반적으로 뷰를 렌더링하기 전에 대부분의 조건부 작업을 수행 한 다음 필요한 모든 데이터를 뷰에서 사용할 수 있도록 모델에 저장합니다. . 뷰 렌더링 시간까지 그 중 일부를 연기하는 것이 타당한 경우가 있으며 이러한 경우의 많은 경우 맞춤 GSP 태그가 순서대로 적용됩니다. 예를 들어,''라는 태그가있을 수 있으며,'renderMenu' 태그는 필요한 데이터를 얻기 위해 무엇이든 할 수 있습니다. –

관련 문제