@@ -28,12 +28,15 @@ import java.util.concurrent.ConcurrentHashMap
2828import javax.servlet.ServletConfig
2929
3030import org.codehaus.groovy.grails.plugins.GrailsPluginManager
31+ import org.codehaus.groovy.grails.commons.GrailsDomainClass
32+ import org.codehaus.groovy.grails.scaffolding.GrailsTemplateGenerator
3133import org.codehaus.groovy.grails.web.mapping.ForwardUrlMappingInfo
3234import org.codehaus.groovy.grails.web.metaclass.ControllerDynamicMethods
3335import org.codehaus.groovy.grails.web.pages.GroovyPage
3436import org.codehaus.groovy.grails.web.pages.GroovyPageMetaInfo
3537import org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine
3638import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes
39+ import org.codehaus.groovy.grails.web.servlet.mvc.GrailsWebRequest
3740import org.codehaus.groovy.grails.web.sitemesh.FactoryHolder
3841import org.codehaus.groovy.grails.web.sitemesh.GSPSitemeshPage
3942import 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