Skip to content

Commit 999bfc2

Browse files
committed
GRAILS-11447 add support for namespace attribute in g:form tag
1 parent afe2a0b commit 999bfc2

File tree

3 files changed

+46
-4
lines changed

3 files changed

+46
-4
lines changed

grails-plugin-gsp/src/main/groovy/org/codehaus/groovy/grails/plugins/web/taglib/ApplicationTagLib.groovy

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,6 @@ class ApplicationTagLib implements ApplicationContextAware, InitializingBean, Gr
224224
if (elementId) {
225225
writer << " id=\"${elementId}\""
226226
}
227-
attrs.remove(UrlMapping.PLUGIN)
228-
attrs.remove(UrlMapping.NAMESPACE)
229227
def remainingKeys = attrs.keySet() - LinkGenerator.LINK_ATTRIBUTES
230228
for (key in remainingKeys) {
231229
writer << " " << key << "=\"" << attrs[key]?.encodeAsHTML() << "\""

grails-test-suite-web/src/test/groovy/org/codehaus/groovy/grails/web/taglib/FormTagLibTests.groovy

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ package org.codehaus.groovy.grails.web.taglib
22

33
import grails.util.MockRequestDataValueProcessor
44

5+
import org.codehaus.groovy.grails.commons.AbstractGrailsClass
6+
import org.codehaus.groovy.grails.commons.GrailsUrlMappingsClass
7+
import org.codehaus.groovy.grails.commons.UrlMappingsArtefactHandler
58
import org.codehaus.groovy.grails.plugins.web.taglib.FormTagLib
6-
import org.codehaus.groovy.grails.support.MockApplicationContext
79

810
/**
911
* Tests for the FormTagLib.groovy file which contains tags to help with the l
@@ -18,6 +20,42 @@ class FormTagLibTests extends AbstractGrailsTagTests {
1820
super.setUp()
1921
appCtx.getBean(FormTagLib.name).requestDataValueProcessor = new MockRequestDataValueProcessor()
2022
}
23+
24+
@Override
25+
protected void onInit() {
26+
def mappingsClosure = {
27+
"/admin/books"(controller:'books', namespace:'admin')
28+
"/books"(controller:'books')
29+
}
30+
grailsApplication.addArtefact(UrlMappingsArtefactHandler.TYPE, new MockGrailsUrlMappingsClass(mappingsClosure));
31+
}
32+
33+
void testFormNamespace() {
34+
def template = '<g:form controller="books" namespace="admin"></g:form>'
35+
assertOutputEquals('<form action="/admin/books" method="post" ><input type="hidden" name="requestDataValueProcessorHiddenName" value="hiddenValue" />\n</form>', template)
36+
}
37+
38+
void testFormNoNamespace() {
39+
def template = '<g:form controller="books"></g:form>'
40+
assertOutputEquals('<form action="/books" method="post" ><input type="hidden" name="requestDataValueProcessorHiddenName" value="hiddenValue" />\n</form>', template)
41+
}
42+
43+
private static final class MockGrailsUrlMappingsClass extends AbstractGrailsClass implements GrailsUrlMappingsClass {
44+
Closure mappingClosure;
45+
public MockGrailsUrlMappingsClass(Closure mappingClosure) {
46+
super(this.getClass(), "UrlMappings");
47+
this.mappingClosure = mappingClosure;
48+
}
49+
@Override
50+
public Closure getMappingsClosure() {
51+
return mappingClosure;
52+
}
53+
54+
@Override
55+
public List getExcludePatterns() {
56+
return null;
57+
}
58+
}
2159

2260
void testFormTagWithAlternativeMethod() {
2361
unRegisterRequestDataValueProcessor()

grails-web/src/main/groovy/org/codehaus/groovy/grails/web/mapping/LinkGenerator.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ public interface LinkGenerator {
4444
String ATTRIBUTE_MAPPING = "mapping";
4545
String ATTRIBUTE_EVENT = "event";
4646
String ATTRIBUTE_ELEMENT_ID = "elementId";
47+
String ATTRIBUTE_PLUGIN = "plugin";
48+
String ATTRIBUTE_NAMESPACE = "namespace";
49+
4750

4851
Set<String> LINK_ATTRIBUTES = CollectionUtils.newSet(
4952
ATTRIBUTE_RESOURCE,
@@ -61,7 +64,10 @@ public interface LinkGenerator {
6164
ATTRIBUTE_PARAMS,
6265
ATTRIBUTE_MAPPING,
6366
ATTRIBUTE_EVENT,
64-
ATTRIBUTE_ELEMENT_ID);
67+
ATTRIBUTE_ELEMENT_ID,
68+
ATTRIBUTE_PLUGIN,
69+
ATTRIBUTE_NAMESPACE
70+
);
6571

6672
/**
6773
* Generates a link to a static resource for the given named parameters.

0 commit comments

Comments
 (0)