2016-07-05 3 views
0

아주 단순한 컨트롤러를 설치하여 매우 간단한 뷰를 반환하려고하지만, 콘텐트 유형과 관련된 오류가 계속 발생합니다.Grails에서 콘텐츠 유형을 어떻게 설정합니까?

class SimpleController { 
    def index() { 
     render(view: "simple") 
    } 
} 

_simple.gsp :

<html> 
<head> 
    <meta name="layout" content="blank" /> 
</head> 
<body> 
Simple test page. 
</body> 
</html> 

blank.gsp :

<!DOCTYPE html> 
<html> 
<head> 
    <g:layoutHead /> 
</head> 
<body> 
    <g:layoutBody /> 
</body> 
</html> 

그것보다 훨씬 간단하지 않습니다. 컨트롤러 메서드가 올바르게 발견되었습니다. 렌더링 중에 문제가있는 것 같습니다. 여기에 오류가 있습니다 :

2016-07-05 16 : 07 : 14,931 [http-bio-8085-exec-5] 오류 errors.GrailsExceptionResolver - 요청 처리시 NullPointerException이 발생했습니다 : [GET]/testApp/단순/ 스택 추적은 다음과 같습니다. 메시지 : null Line | 방법 - >> 15 | inContentType


| 49 | com.opensymphony.sitemesh.compatability.PageParser2ContentProcessor를 빌드하십시오. | 89 | getContent. . . . . . . . . . GryilsContentBufferingResponse | 107 | obtainContent in org.codehaus.groovy.grails.web.sitemesh.GrailsLayoutView

디버깅은 context.contentType이 null임을 확인합니다. 콘텐츠 형식을 설정하는 네 가지 방법을 찾았지만 그 중 아무 것도 작동하지 않는 것 같습니다.

<%@ page contentType="text/html;charset=UTF-8" %> 

보기의 맨 위에.

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 

보기의 헤드 태그에 있습니다.

contentType: "text/html" 

컨트롤러의 렌더링 방법에 전달되었습니다.

response.setContentType("text/html") 

컨트롤러 메소드에서 호출됩니다.

이것은 많은 다른 컨트롤러와보기가 완벽하게 잘 작동하는 기존 프로젝트에 있습니다. 새로운 컨트롤러와 뷰를 추가해야하는데 원래는 기존 작업 부분을 복사했습니다. 그게 작동하지 않을 때, 가능한 한 간단하게 문제를 줄이려고 노력하고 여전히 작동하지 않는 위의 코드로 끝났습니다.

Btw, 이것은 Grails 2.5.1 (이 버전에서 멈춤)입니다.

답변

2

당신이 가지고 있어야하는 것은 작동해야합니다.

기본 URL 맵핑을 사용하는 경우 당신은 당신의보기 simple.gsp 대신 _simple.gsp

의 당신이 간단한 응용 프로그램을 다시 시도 할 수 있습니다만큼 간단하지 않으면 이름을합니다.

+0

감사합니다. 나는 _이 필요할 때 grails로 결코 알 수 없다. 사용 된 코드는 _을 사용하고 방금 나갔습니다. 뷰 해석기가 지정된 뷰를 찾을 수 없다는 오류를 던지지 않았으므로이 뷰를 변경한다고 생각조차하지 않았습니다. –

1

더욱 간단하고 부수적으로 문제를 해결할 수 있습니다.

class SimpleController { 
    def index() { 

    } 
} 

_simple.gsp에서 index.gsp로 이름을 변경하면 views/simple/directory에 있어야합니다. blank.gsp 뷰/레이아웃 디렉토리에 있다면 지금 작동해야합니다.

+0

이 두 가지 대답은 모두 효과가 있었지만 제 목적을 위해서는 jmallen의 답이 더 좋습니다. –

0

@jmallen이 말했듯이 페이지의 이름은 "simple.gsp"여야합니다.

<g:render template="/layouts/menu" /> 

_menu.gsp 

라는 메뉴에 대한 GSP 파일보다 : 처음에 밑줄은 다음 문을 다른 페이지에 포함 할 수 난 단지 템플릿, GSP-파일에 대해 알고있는이다
관련 문제