【问题标题】:How do I set the content type in Grails?如何在 Grails 中设置内容类型?
【发布时间】:2016-07-08 21:52:12
【问题描述】:

我只是想设置一个非常简单的控制器来返回一个非常简单的视图(具有非常简单的布局),但是我不断收到与内容类型相关的错误。

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

_simple.gsp:

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

空白.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] 错误错误。GrailsExceptionResolver - 处理请求时发生 NullPointerException:[GET] /testApp/simple/ 堆栈跟踪如下: 消息:空 线 |方法 ->> 15 |在 com.opensymphony.module.sitemesh.filter.HttpContentType


| 49 |构建 com.opensymphony.sitemesh.compatability.PageParser2ContentProcessor | 89 |获取内容。 . . . . . . . . .在 org.codehaus.groovy.grails.web.sitemesh.GrailsContentBufferingResponse | 107 |在 org.codehaus.groovy.grails.web.sitemesh.GrailsLayoutView 中获取内容

调试确认 context.contentType 为空。我找到了四种不同的方法来设置内容类型,但它们似乎都不起作用。

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

在视图的顶部。

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

在视图的head标签中。

contentType: "text/html"

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

response.setContentType("text/html")

在控制器方法中调用。

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

顺便说一句,这是 Grails 2.5.1 (卡在这个版本)。

【问题讨论】:

    标签: grails


    【解决方案1】:

    你所拥有的应该可以工作。

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

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

    【讨论】:

    • 谢谢。我永远无法弄清楚何时需要 _ 。我从中复制的代码使用了一个 _,我就照着做了。我什至没有想过更改它,因为视图解析器没有抛出关于无法找到指定视图的错误。
    【解决方案2】:

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

    class SimpleController {
        def index() {
    
        }
    }
    

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

    【讨论】:

    • 这两个答案都有效,但就我而言,jmallen 的答案更合适。
    【解决方案3】:

    正如@jmallen 所说,该页面应命名为“simple.gsp”。 开头的下划线是我只知道的模板,gsp-files,可以通过以下语句包含在其他页面中:

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

    比菜单的gsp文件命名

    _menu.gsp
    

    【讨论】:

      猜你喜欢
      • 2011-06-24
      • 2016-09-28
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 1970-01-01
      • 2010-12-29
      相关资源
      最近更新 更多