2009-08-05 4 views
31

필자는 "Grails에 대한 확실한 안내서"(Rocher/Brown)와 제 4 장에서 "레이아웃"이라고하는이 신비한 일이 설명없이 나타났습니다. (그리고 인덱스에 "레이아웃"이 없습니다. 내가 아는 한 절대 설명하지 않습니다.)Grails는 렌더링하는 페이지에 "레이아웃"을 적용하는 방법을 알고 있습니까?

시스템은 layout/main.gsp에서 페이지를 "상속받는"것을 어떻게 알고 있습니까? 인덱스에 "레이아웃"에 관한 것은 없으며 방금 등장한 것으로 보입니다. 자신의 샘플 응용 프로그램에

, 간단한 상점 사이트의/홈페이지의 URL 매핑

"/"(controller:"store") 

저장 컨트롤러의 빈 "인덱스"폐쇄

package com.g2one.gtunes 

class StoreController { 

    def index = { 
    } 
} 

단순히 가게를 렌더링 알려줍니다 말 /index.gsp

store/index.gsp에는 몇 줄의 HTML 만 있습니다. 나는 페이지가 "/"는 바로이 간단한 HTML되지 않습니다에 대해 표시된 샘플을 실행하면 어떤 레이아웃이 어떤 지시어

<html> 
    <head> 
     <meta http-equiv="Content-type" content="text/html; charset=utf-8"> 
     <meta name="layout" content="main"> 
     <title>gTunes Store</title> 
     <g:javascript library="prototype"></g:javascript> 
    </head> 
    <body id="body"> 
     <h1>Your online music store and storage service!</h1> 
     <p>Manage your own library, browse music and purchase new tracks as they become available</p> 
    </body> 
</html> 

에 포함되지 도착, 그것은 마술 삽입이 정보를 "레이아웃/main.gsp"의 내용을이다 그 안에.

layout/main.gsp의 정보가 페이지에 어떻게 적용되는지, 요소가 어떻게 혼합되는지 알 수 없습니다. 나는 페이지별로 책을 읽었으며이 기능은 아무런 설명없이 "등장했다".

<meta name="layout" content="main"> 

main.gsp가의 index.gsp의 <head><body> 내용은 마지막 페이지를 만들 레이아웃에 접어 <g:layoutHead><g:layoutBody> 포함 :

답변

47

<meta name="layout" content="main"> 태그는 gsp 페이지의 레이아웃을 포함합니다.

grails-app/views/layouts/main.gsp을보고 레이아웃을보고 수정할 수 있습니다. main.gspmymain.gsp에 복사하고 수정 한 다음, main.gsp 대신 mymain.gsp을 참조하도록 gsp 페이지의 레이아웃 항목을 변경하고 변경 사항을 쉽게 되돌릴 수있는 능력을 유지하면서 레이아웃을 사용자 정의하여 실험하십시오.

Grails는보기 레이아웃을 만들기 위해 (최대 절전 모드와 봄 모드를 사용하는 것처럼) 커버 아래에 sitemesh를 사용합니다. 프로젝트 디렉토리에도 web-app/WEB-INF/sitemesh.xml 구성 파일이 있습니다. 이 특별한 파일은별로 도움이되지 않지만 grails가 sitemesh를 사용하는 방법을 깊이 이해하고 싶다면 Groovy 프로젝트의 클래스를 참조하십시오.

+2

감사합니다! 나는 얼굴을 똑바로 쳐다보고 있었다. 나는 다른 모든 grails 지시문이

13

는 여기에 귀하의 지침입니다.

5

최근의 트릭 중 하나가 작동하는 것처럼 보입니다. 컨트롤러와 일치하도록 레이아웃 이름을 지정하면 Grails 2.3.4 이상에서 자동으로 해당 템플릿을 사용합니다.

예를 들어

, 내 컨트롤러 :

// grails-app/controllers/myapp/HomeController.groovy 
package myapp 
class HomeController { 
    def index() { 
     [ myvar: "Test" ] 
    } 
} 

내 레이아웃 :

// grails-app/views/layouts/home.gsp 
<html> 
    <head></head> 
    <body> 
    <h1>Home</h1> 
    <g:layoutBody /> 
    </body> 
</html> 

내보기 :

// grails-app/views/home/index.gsp 
<p>${ myvar }</p> 

홈 레이아웃을 사용하여 렌더링합니다.

또한,이 같은 컨트롤러의 모든 행동에 대한 레이아웃을 지정할 수 있습니다

class HomeController { 
    static layout = "someotherlayout" 

    // actions will render using grails-app/views/layouts/someotherlayout.gsp 
} 
+0

팁 주셔서 감사! AJAX가로드 된 gsp가 자동으로 줄 바꿈되었을 때 나는 이것에 물렸다. 컨트롤러 이름이있는 레이아웃이 있습니다. – EpicVoyage

관련 문제