我只是想设置一个非常简单的控制器来返回一个非常简单的视图(布局非常简单),但是我不断收到与内容类型相关的错误。
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(坚持使用此版本)。
答案 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