Skip to content

Commit 0b4f879

Browse files
author
graeme
committed
fix for GRAILS-676
git-svn-id: https://svn.codehaus.org/grails/trunk@2967 1cfb16fd-6d17-0410-8ff1-b7e8e1e2867d
1 parent 8b99de0 commit 0b4f879

File tree

2 files changed

+38
-8
lines changed

2 files changed

+38
-8
lines changed

src/web/org/codehaus/groovy/grails/web/servlet/mvc/SimpleGrailsControllerHelper.java

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ public class SimpleGrailsControllerHelper implements GrailsControllerHelper {
7373
private GrailsScaffolder scaffolder;
7474
private ServletContext servletContext;
7575
private GrailsApplicationAttributes grailsAttributes;
76-
private Pattern uriPattern = Pattern.compile("/(\\w+)/?(\\w*)/?(\\w*)/?(.*)");
76+
private Pattern uriPattern = Pattern.compile("/(\\w+)/?(\\w*)/?([^/]*)/?(.*)");
7777

7878

7979
private GrailsWebRequest webRequest;
@@ -334,17 +334,24 @@ private String configureStateForUri(String uri) {
334334
uri = '/' + controllerName + '/' + actionName;
335335
id = m.group(3);
336336
String extraParamsString = m.group(4);
337-
if(extraParamsString != null && extraParamsString.indexOf('/') > - 1) {
338-
String[] tokens = extraParamsString.split("/");
337+
if(!StringUtils.isBlank(extraParamsString)) {
339338
extraParams = new HashMap();
340-
for (int i = 0; i < tokens.length; i++) {
341-
String token = tokens[i];
342-
if(i == 0 || ((i % 2) == 0)) {
343-
if((i + 1) < tokens.length) {
344-
extraParams.put(token, tokens[i + 1]);
339+
if(extraParamsString.indexOf('/') > -1) {
340+
String[] tokens = extraParamsString.split("/");
341+
342+
for (int i = 0; i < tokens.length; i++) {
343+
String token = tokens[i];
344+
if(i == 0 || ((i % 2) == 0)) {
345+
if((i + 1) < tokens.length) {
346+
extraParams.put(token, tokens[i + 1]);
347+
}
345348
}
346349
}
347350
}
351+
else {
352+
extraParams.put(extraParamsString, null);
353+
}
354+
348355

349356
}
350357
}

test/groovy/org/codehaus/groovy/grails/web/servlet/mvc/SimpleGrailsControllerHelperTests.groovy

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,29 @@ class SimpleGrailsControllerHelperTests extends AbstractGrailsControllerTests {
4444
assertEquals "four", extraParams["three"]
4545
}
4646

47+
void testConfigureStateForUri2() {
48+
def helper = new SimpleGrailsControllerHelper(null, null, null)
49+
helper.configureStateForUri("/location/show/united-kingdom")
50+
51+
assertEquals "location", helper.@controllerName
52+
assertEquals "show", helper.@actionName
53+
assertEquals "united-kingdom", helper.@id
54+
55+
}
56+
57+
void testConfigureStateForUri3() {
58+
def helper = new SimpleGrailsControllerHelper(null, null, null)
59+
helper.configureStateForUri("/location/show/united-kingdom/london")
60+
61+
assertEquals "location", helper.@controllerName
62+
assertEquals "show", helper.@actionName
63+
assertEquals "united-kingdom", helper.@id
64+
65+
assertTrue helper.@extraParams.containsKey("london")
66+
67+
}
68+
69+
4770
void testConfigureStateForUri() {
4871
def helper = new SimpleGrailsControllerHelper(null, null, null)
4972
helper.configureStateForUri("/controller/action/id")

0 commit comments

Comments
 (0)