Skip to content

Commit 9c8fe74

Browse files
author
graeme
committed
fix for GRAILS-1541
git-svn-id: https://svn.codehaus.org/grails/trunk@5332 1cfb16fd-6d17-0410-8ff1-b7e8e1e2867d
1 parent eab9bd1 commit 9c8fe74

File tree

2 files changed

+37
-21
lines changed

2 files changed

+37
-21
lines changed

src/groovy/org/codehaus/groovy/grails/plugins/web/mapping/UrlMappingsGrailsPlugin.groovy

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,16 @@ package org.codehaus.groovy.grails.plugins.web.mapping;
1818
import grails.util.GrailsUtil
1919
import org.codehaus.groovy.grails.web.mapping.*
2020
import org.codehaus.groovy.grails.commons.*
21+
import org.springframework.context.ApplicationContext
22+
import org.springframework.aop.target.HotSwappableTargetSource
23+
import org.springframework.aop.framework.ProxyFactoryBean
24+
2125
/**
22-
* A plug-in that handles the configuration of URL mappings for Grails
23-
*
24-
* @author Graeme Rocher
25-
* @since 0.4
26-
*/
26+
* A plug-in that handles the configuration of URL mappings for Grails
27+
*
28+
* @author Graeme Rocher
29+
* @since 0.4
30+
*/
2731
class UrlMappingsGrailsPlugin {
2832

2933
def watchedResources = ["file:./grails-app/conf/*UrlMappings.groovy"]
@@ -32,24 +36,31 @@ class UrlMappingsGrailsPlugin {
3236
def dependsOn = [core:version]
3337

3438
def doWithSpring = {
35-
grailsUrlMappingsHolder(UrlMappingsHolderFactoryBean) {
39+
grailsUrlMappingsHolderBean(UrlMappingsHolderFactoryBean) {
3640
grailsApplication = ref("grailsApplication", true)
37-
}
38-
}
39-
40-
def doWithApplicationContext = { ctx ->
41-
def beans = beans {
42-
grailsUrlMappingsHolder(UrlMappingsHolderFactoryBean) {
43-
grailsApplication = ref("grailsApplication", true)
44-
}
4541
}
46-
ctx.registerBeanDefinition(UrlMappingsHolder.BEAN_ID, beans.getBeanDefinition(UrlMappingsHolder.BEAN_ID))
42+
urlMappingsTargetSource(org.springframework.aop.target.HotSwappableTargetSource, grailsUrlMappingsHolderBean)
43+
grailsUrlMappingsHolder(ProxyFactoryBean) {
44+
targetSource = urlMappingsTargetSource
45+
proxyInterfaces = [org.codehaus.groovy.grails.web.mapping.UrlMappingsHolder]
46+
}
47+
}
48+
49+
def doWithApplicationContext = { ApplicationContext ctx ->
50+
def beans = beans(doWithSpring)
51+
beans.registerBeans(ctx)
4752
}
4853

4954
def onChange = { event ->
5055
if(application.isUrlMappingsClass(event.source)) {
5156
application.addArtefact( UrlMappingsArtefactHandler.TYPE, event.source )
52-
doWithApplicationContext(event.ctx)
57+
58+
def factory = new UrlMappingsHolderFactoryBean(grailsApplication:application)
59+
factory.afterPropertiesSet()
60+
def mappings = factory.getObject()
61+
62+
HotSwappableTargetSource ts = event.ctx.getBean("urlMappingsTargetSource")
63+
ts.swap mappings
5364
}
5465
}
5566
}

src/groovy/org/codehaus/groovy/grails/plugins/web/taglib/ApplicationTagLib.groovy

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,15 @@ package org.codehaus.groovy.grails.plugins.web.taglib
2525
import org.springframework.validation.Errors;
2626
import org.springframework.context.NoSuchMessageException;
2727
import org.springframework.web.servlet.support.RequestContextUtils as RCU;
28-
import org.codehaus.groovy.grails.commons.GrailsClassUtils as GCU;
28+
import org.codehaus.groovy.grails.commons.GrailsClassUtils as GCU
29+
import org.springframework.context.ApplicationContextAware
30+
import org.springframework.context.ApplicationContext;
2931

30-
class ApplicationTagLib {
31-
32-
def grailsUrlMappingsHolder
32+
class ApplicationTagLib implements ApplicationContextAware {
33+
34+
ApplicationContext applicationContext
35+
36+
def grailsUrlMappingsHolder
3337

3438
/**
3539
* Creates a link to a resource, generally used as a method rather than a tag.
@@ -100,7 +104,8 @@ class ApplicationTagLib {
100104
}
101105
def url
102106
if(id != null) params.id = id
103-
def mapping = grailsUrlMappingsHolder.getReverseMapping(controller,action,params)
107+
def urlMappings = applicationContext.getBean("grailsUrlMappingsHolder")
108+
def mapping = urlMappings.getReverseMapping(controller,action,params)
104109
url = mapping.createURL(controller, action, params, request.characterEncoding)
105110
out << response.encodeURL(url)
106111
}

0 commit comments

Comments
 (0)