Skip to content

Commit a40ed64

Browse files
author
graeme
committed
fix for GRAILS-2572
git-svn-id: https://svn.codehaus.org/grails/trunk@6811 1cfb16fd-6d17-0410-8ff1-b7e8e1e2867d
1 parent aba5bab commit a40ed64

File tree

3 files changed

+46
-2
lines changed

3 files changed

+46
-2
lines changed

src/web/org/codehaus/groovy/grails/web/mapping/DefaultUrlCreator.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.io.UnsupportedEncodingException;
2727
import java.net.URLEncoder;
2828
import java.util.Collections;
29+
import java.util.HashMap;
2930
import java.util.Iterator;
3031
import java.util.Map;
3132

@@ -100,6 +101,7 @@ public String createURL(String controller, String action, Map parameterValues, S
100101
}
101102

102103
private String createURLInternal(String controller, String action, Map parameterValues, boolean includeContextPath) {
104+
if(parameterValues == null) parameterValues = new HashMap();
103105
GrailsWebRequest webRequest = (GrailsWebRequest) RequestContextHolder.currentRequestAttributes();
104106
boolean blankController = StringUtils.isBlank(controller);
105107
boolean blankAction = StringUtils.isBlank(action);

src/web/org/codehaus/groovy/grails/web/mapping/DefaultUrlMappingsHolder.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,15 @@ public UrlCreator getReverseMapping(final String controller, final String action
115115
mapping = (UrlMapping)mappingsLookup.get(new UrlMappingKey(controller, action, Collections.EMPTY_SET));
116116
}
117117
if(mapping == null || (mapping instanceof ResponseCodeUrlMapping)) {
118-
mapping = (UrlMapping)mappingsLookup.get(new UrlMappingKey(controller, null, DEFAULT_ACTION_PARAMS));
118+
Set lookupParams = new HashSet(params.keySet());
119+
lookupParams.addAll(DEFAULT_ACTION_PARAMS);
120+
mapping = (UrlMapping)mappingsLookup.get(new UrlMappingKey(controller, null, lookupParams));
119121
}
120122
if(mapping == null || (mapping instanceof ResponseCodeUrlMapping)) {
121-
mapping = (UrlMapping)mappingsLookup.get(new UrlMappingKey(null, null, DEFAULT_CONTROLLER_PARAMS));
123+
Set lookupParams = new HashSet(params.keySet());
124+
lookupParams.addAll(DEFAULT_CONTROLLER_PARAMS);
125+
126+
mapping = (UrlMapping)mappingsLookup.get(new UrlMappingKey(null, null, lookupParams));
122127
}
123128
if(mapping == null || (mapping instanceof ResponseCodeUrlMapping)) {
124129
return new DefaultUrlCreator(controller, action);
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.codehaus.groovy.grails.web.mapping
2+
3+
import org.codehaus.groovy.grails.web.taglib.AbstractGrailsTagTests
4+
5+
/**
6+
* @author Graeme Rocher
7+
* @since 1.0
8+
*
9+
* Created: Mar 19, 2008
10+
*/
11+
class ReverseUrlMappingTests extends AbstractGrailsTagTests{
12+
public void onSetUp() {
13+
gcl.parseClass '''
14+
public class CustomUrlMappings {
15+
static mappings = {
16+
"/$mslug/$controller/$action/$id?" {
17+
}
18+
}
19+
}'''
20+
21+
gcl.parseClass '''
22+
class ProductController {
23+
def create = {}
24+
def save = {}
25+
}
26+
'''
27+
}
28+
29+
30+
void testLinkTagRendering() {
31+
def template = '<g:link controller="product" action="create" params="[mslug:mslug]">New Product</g:link>'
32+
33+
assertOutputEquals '<a href="/acme/product/create">New Product</a>', template, [mslug:"acme"]
34+
}
35+
36+
37+
}

0 commit comments

Comments
 (0)