Skip to content

Commit b98615e

Browse files
committed
GRAILS-4859 and GRAILS-6822 applied patch for scaffolding + templates
1 parent a5cb412 commit b98615e

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

src/java/org/codehaus/groovy/grails/plugins/web/taglib/RenderTagLib.groovy

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,15 @@ import java.util.concurrent.ConcurrentHashMap
2828
import javax.servlet.ServletConfig
2929

3030
import org.codehaus.groovy.grails.plugins.GrailsPluginManager
31+
import org.codehaus.groovy.grails.commons.GrailsDomainClass
32+
import org.codehaus.groovy.grails.scaffolding.GrailsTemplateGenerator
3133
import org.codehaus.groovy.grails.web.mapping.ForwardUrlMappingInfo
3234
import org.codehaus.groovy.grails.web.metaclass.ControllerDynamicMethods
3335
import org.codehaus.groovy.grails.web.pages.GroovyPage
3436
import org.codehaus.groovy.grails.web.pages.GroovyPageMetaInfo
3537
import org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine
3638
import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes
39+
import org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequest
3740
import org.codehaus.groovy.grails.web.sitemesh.FactoryHolder
3841
import org.codehaus.groovy.grails.web.sitemesh.GSPSitemeshPage
3942
import org.codehaus.groovy.grails.web.sitemesh.GrailsPageFilter
@@ -52,6 +55,9 @@ class RenderTagLib implements RequestConstants {
5255
ServletConfig servletConfig
5356
GroovyPagesTemplateEngine groovyPagesTemplateEngine
5457
GrailsPluginManager pluginManager
58+
GrailsTemplateGenerator scaffoldingTemplateGenerator
59+
Map scaffoldedActionMap
60+
Map controllerToScaffoldedDomainClassMap
5561

5662
static Map TEMPLATE_CACHE = new ConcurrentHashMap()
5763

@@ -557,14 +563,31 @@ class RenderTagLib implements RequestConstants {
557563
}
558564
else {
559565
def templateResolveOrder
560-
def templateInContextPath = "${contextPath}/grails-app/views${uri}"
566+
def templateInContextPath = "${contextPath}/grails-app/views${uri}"
561567
if (pluginName) {
562568
templateResolveOrder = [templatePath, templateInContextPath]
563569
}
564570
else {
565571
templateResolveOrder = [uri, templatePath, templateInContextPath]
566572
}
567573
t = engine.createTemplateForUri(templateResolveOrder as String[])
574+
if (!t && scaffoldingTemplateGenerator) {
575+
GrailsWebRequest webRequest = WebUtils.retrieveGrailsWebRequest()
576+
def controllerActions = scaffoldedActionMap[webRequest.controllerName]
577+
if (controllerActions?.contains(webRequest.actionName)) {
578+
GrailsDomainClass domainClass = controllerToScaffoldedDomainClassMap[webRequest.controllerName]
579+
if (domainClass) {
580+
int i = uri.lastIndexOf('/')
581+
String templateName = i > -1 ? uri.substring(i) : uri
582+
if (templateName.toLowerCase().endsWith('.gsp')) {
583+
templateName = templateName[0..-5]
584+
}
585+
def sw = new StringWriter()
586+
scaffoldingTemplateGenerator.generateView domainClass, templateName, sw
587+
t = engine.createTemplate(sw.toString(), uri)
588+
}
589+
}
590+
}
568591
if (t) {
569592
if (!engine.isReloadEnabled()) {
570593
def prevt = TEMPLATE_CACHE.putIfAbsent(cacheKey, t)

0 commit comments

Comments
 (0)