【发布时间】:2015-02-16 02:42:56
【问题描述】:
将我的应用升级到 2.4.4 后使用 g:layoutTitle 标记时出现以下异常
Caused by: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'com.opensymphony.sitemesh.compatability.Content2HTMLPage@21b3cfb7' with class 'com.opensymphony.sitemesh.compatability.Content2HTMLPage' to class 'com.opensymphony.module.sitemesh.parser.AbstractHTMLPage'
我尝试过将字符串硬编码为默认值,如下所示:
<title><g:layoutTitle default="Test"/></title>
我仍然遇到问题。升级时我错过了什么吗?我不确定这里有什么问题。
我在使用 pageProperty 时也遇到了同样的问题。例如:
<body class="${pageProperty(name: 'body.class')} ${pageProperty(name: 'page.sectionName')}">
这会引发相同的异常,但在使用 Grails 2.3.6 时也可以。
【问题讨论】:
-
我做了更多调试,发现 RenderTagLib.getPage() 导致了这个问题。 return (AbstractHTMLPage)getRequest().getAttribute(PAGE) 导致了这个问题,因为 getAttribute(PAGE) 导致 Content2HTMLPage 类型的对象,它不是 AnstractHTMLPage 的子类,因此是类转换异常。任何想法如何解决这个问题?