如何在Grails中设置内容类型?

时间:2016-07-05 20:56:47

标签: 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] ERROR errors.GrailsExceptionResolver - 处理请求时发生NullPointerException:[GET] / testApp / simple / Stacktrace如下: 消息:null     线|方法 - &GT;&GT; 15 |在com.opensymphony.module.sitemesh.filter.HttpContentType

| 49 |在com.opensymphony.sitemesh.compatability.PageParser2ContentProcessor中构建 | 89 | getContent。 。 。 。 。 。 。 。 。 。在org.codehaus.groovy.grails.web.sitemesh.GrailsContentBufferingResponse | 107 |在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" />

在视图的head标签中。

contentType: "text/html"

传递给控制器​​中的render方法。

response.setContentType("text/html")

在控制器方法中调用。

这是在一个现有的项目中,许多其他控制器和视图都可以正常工作。我需要添加一个新的控制器和视图,我最初复制了现有的工件。当这不起作用时,我试图将问题减少到尽可能简单,并最终得到上面的代码,但仍然无效。

顺便说一句,这是Grails 2.5.1(坚持使用此版本)。

3 个答案:

答案 0 :(得分:2)

你有什么应该工作。

如果您使用的是默认网址映射,则应将视图命名为 simple.gsp 而不是 _simple.gsp

如果不是那么简单,您可以尝试重新创建一个简单的应用程序。

答案 1 :(得分:1)

可以更简单,顺便解决您的问题。

class SimpleController {
    def index() {

    }
}

将_simple.gsp重命名为index.gsp,并且需要位于views / simple /目录中。如果blank.gsp在views / layouts目录中,它应该可以正常工作。

答案 2 :(得分:0)

正如@jmallen所说,该页面应该命名为&#34; simple.gsp&#34;。 开头的下划线是我只知道的模板,gsp文件,可以包含在其他页面中,并带有以下语句:

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

比菜单的gsp文件命名为

_menu.gsp