I have a grails application with several pages and controllers. While some of the actions work properly and the gsp pages rendering correctly, some of them aren't being rendered due to some CGLIB related error. Here is my exception when I want to run /panel/create action:
processing request: [GET] /panel/create
Template not found for name [form] and path [/panelController$$EnhancerByCGLIB/_form.gsp]. Stacktrace follows:
org.codehaus.groovy.grails.web.pages.exceptions.GroovyPagesException: Error proc essing GroovyPageView: Template not found for name [form] and path [/panelContro ller$$EnhancerByCGLIB/_form.gsp]
at grails.plugin.cache.web.filter.PageFragmentCachingFilter.doFilter(Pag eFragmentCachingFilter.java:195)
at grails.plugin.cache.web.filter.AbstractFilter.doFilter(AbstractFilter .java:63)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor. java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor .java:615)
at java.lang.Thread.run(Thread.java:722)
_form.gsp:
<div class="fieldcontain ${hasErrors(bean: panelInstance, field: 'unitProtocol', 'error')} required">
<label for="unitProtocol">
<g:message code="panel.checkupPanel.label" />
<span class="required-indicator">*</span>
</label>
<g:if test="${panelInstance?.unitProtocol}">
<g:select id="unitProtocol" name="unitProtocolId" from="${unitProtocolService.getNonDefinedCheckUpPanelUnitProtocols() + panelInstance?.unitProtocol }" optionKey="code" value="${panelInstance?.unitProtocol?.code}" class="many-to-one"/>
</g:if>
<g:else>
<g:select id="unitProtocol" name="unitProtocolId" from="${unitProtocolService.getNonDefinedCheckUpPanelUnitProtocols()}" optionKey="code" value="${panelInstance?.unitProtocol?.code}" class="many-to-one"/>
</g:else>
</div>
<div class="fieldcontain panelGrid grid">
<table id="panelGrid"></table>
</div>
<div id="panelPager"></div>
<script type="text/javascript" src="${resource(dir: 'js', file: 'panel.js')}"></script>
create.gsp
<%@ page import="akum.main.pricingcontract.Panel" %>
<!DOCTYPE html>
<html>
<head>
<meta name="layout" content="main">
<g:set var="entityName" value="${message(code: 'panel.label', default: 'Panel')}" />
<title><g:message code="default.create.label" args="[entityName]" /></title>
</head>
<body>
<div id="create-panel" class="content scaffold-create" role="main">
<h1><g:message code="default.create.label" args="[entityName]" /></h1>
<g:if test="${flash.message}">
<div class="message" role="status">${flash.message}</div>
</g:if>
<g:hasErrors bean="${panelInstance}">
<ul class="errors" role="alert">
<g:eachError bean="${panelInstance}" var="error">
<li <g:if test="${error in org.springframework.validation.FieldError}">data-field-id="${error.field}"</g:if>><g:message error="${error}"/></li>
</g:eachError>
</ul>
</g:hasErrors>
<g:form action="save" >
<fieldset class="form">
<g:render template="form"/>
</fieldset>
<fieldset class="buttons">
<g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" />
</fieldset>
</g:form>
</div>
</body>
PanelController:
package akum.main.pricingcontract
import javax.persistence.Transient;
import grails.converters.JSON
import org.springframework.dao.DataIntegrityViolationException
import org.springframework.transaction.annotation.Transactional;
class PanelController {
def fpProviderService
def unitProtocolService
static allowedMethods = [save: "POST", update: "POST", delete: "POST"]
def index() {
redirect(action: "list", params: params)
}
def list(Integer max) {
params.max = Math.min(max ?: 10, 100)
removeSessionParameters()
[panelInstanceList: Panel.list(params), panelInstanceTotal: Panel.count()]
}
def create() {
session.activePanelOperation = "create"
[panelInstance: new Panel(params)]
}
}
The views are created using grails scaffolding and only little business involved.
My Grails version is 2.1.1.