Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Updated to support Grails 2.3 and Scaffolding 2.0

  • Loading branch information...
commit b6a16a1116804e0c6bcffb49fc3fee99aaa3376f 1 parent c74677e
@aggug aggug authored
View
7 application.properties
@@ -1,4 +1,5 @@
#Grails Metadata file
-#Sat Apr 06 13:47:56 BST 2013
-app.grails.version=2.2.1
-app.name=angular-scaffolding
+#Mon Oct 14 03:48:27 CDT 2013
+app.grails.version=2.3.0
+app.name=angular-scaffolding
+app.servlet.version=2.5
View
1  grails-app/conf/BuildConfig.groovy
@@ -22,5 +22,6 @@ grails.project.dependency.resolution = {
build(':release:2.2.0', ':rest-client-builder:1.0.2') {
export = false
}
+ compile ':scaffolding:2.0.0'
}
}
View
24 grails-app/conf/Config.groovy
@@ -22,3 +22,27 @@ log4j = {
warn 'org.mortbay.log'
}
+
+// Uncomment and edit the following lines to start using Grails encoding & escaping improvements
+
+/* remove this line
+// GSP settings
+grails {
+ views {
+ gsp {
+ encoding = 'UTF-8'
+ htmlcodec = 'xml' // use xml escaping instead of HTML4 escaping
+ codecs {
+ expression = 'html' // escapes values inside null
+ scriptlet = 'none' // escapes output from scriptlets in GSPs
+ taglib = 'none' // escapes output from taglibs
+ staticparts = 'none' // escapes output from static template parts
+ }
+ }
+ // escapes all not-encoded output at final stage of outputting
+ filteringCodecForContentType {
+ //'text/html' = 'html'
+ }
+ }
+}
+remove this line */
View
115 scripts/_NgGenerate.groovy
@@ -1,12 +1,7 @@
import grails.util.GrailsNameUtils
-import org.codehaus.groovy.grails.commons.GrailsDomainClass
-import org.springframework.core.io.FileSystemResource
-import org.springframework.core.io.support.PathMatchingResourcePatternResolver
-import org.springframework.util.Assert
-import org.codehaus.groovy.grails.scaffolding.*
includeTargets << grailsScript("_GrailsCreateArtifacts")
-includeTargets << grailsScript("_GrailsGenerate")
+includeTargets << new File("scaffoldingPluginDir/scripts/_GrailsGenerate.groovy")
includeTargets << grailsScript("_GrailsBootstrap")
generateForName = null
@@ -37,7 +32,9 @@ target(generateForOne: 'Generates controllers and views for only one domain clas
}
def generateForDomainClass(domainClass) {
- def templateGenerator = new AngularTemplateGenerator(classLoader)
+ def AngularTemplateGenerator = classLoader.loadClass('grails.plugin.angularscaffolding.AngularTemplateGenerator')
+ def templateGenerator = AngularTemplateGenerator.newInstance(classLoader)
+
templateGenerator.grailsApplication = grailsApp
templateGenerator.pluginManager = pluginManager
templateGenerator.event = event
@@ -53,107 +50,3 @@ def generateForDomainClass(domainClass) {
event 'GenerateControllerEnd', [domainClass.fullName]
}
}
-
-/**
- * Can't seem to load this if it's on the plugin source path so I've inlined it here
- */
-class AngularTemplateGenerator extends DefaultGrailsTemplateGenerator {
-
- def event
-
- AngularTemplateGenerator(ClassLoader classLoader) {
- super(classLoader)
- }
-
- def renderEditor = { property, prefix ->
- def domainClass = property.domainClass
- def cp
- if (pluginManager?.hasGrailsPlugin('hibernate')) {
- cp = domainClass.constrainedProperties[property.name]
- }
-
- if (!renderEditorTemplate) {
- // create template once for performance
- def templateText = getTemplateText('renderEditor.template')
- renderEditorTemplate = engine.createTemplate(templateText)
- }
-
- def binding = [
- pluginManager: pluginManager,
- property: property,
- domainClass: domainClass,
- cp: cp,
- domainInstance: getPropertyName(domainClass),
- prefix: prefix
- ]
- renderEditorTemplate.make(binding).toString()
- }
-
- @Override
- void generateViews(GrailsDomainClass domainClass, String destdir) {
- Assert.hasText destdir, 'Argument [destdir] not specified'
-
- for (t in getTemplateNames()) {
- event 'StatusUpdate', ["Generating $t for domain class ${domainClass.fullName}"]
- generateView domainClass, t, new File(destdir).absolutePath
- }
- }
-
- @Override
- void generateView(GrailsDomainClass domainClass, String viewName, Writer out) {
- def templateText = getTemplateText(viewName)
-
- if (templateText) {
-
- def t = engine.createTemplate(templateText)
- def multiPart = domainClass.properties.find {it.type == ([] as Byte[]).class || it.type == ([] as byte[]).class}
-
- boolean hasHibernate = pluginManager?.hasGrailsPlugin('hibernate')
- def packageName = domainClass.packageName ? "<%@ page import=\"${domainClass.fullName}\" %>" : ""
- def binding = [pluginManager: pluginManager,
- packageName: packageName,
- domainClass: domainClass,
- multiPart: multiPart,
- className: domainClass.shortName,
- propertyName: getPropertyName(domainClass),
- renderEditor: renderEditor,
- comparator: hasHibernate ? DomainClassPropertyComparator : SimpleDomainClassPropertyComparator]
-
- t.make(binding).writeTo(out)
- }
- }
-
- @Override
- void generateView(GrailsDomainClass domainClass, String viewName, String destDir) {
- def suffix = viewName.find(/\.\w+$/)
-
- def viewsDir = suffix == '.html' ? new File("$destDir/web-app/ng-templates/$domainClass.propertyName") : new File("$destDir/grails-app/views/$domainClass.propertyName")
- if (!viewsDir.exists()) viewsDir.mkdirs()
-
- def destFile = new File(viewsDir, "$viewName")
- destFile.withWriter { Writer writer ->
- generateView domainClass, viewName, writer
- }
- }
-
- @Override
- def getTemplateNames() {
- def resources = []
- def resolver = new PathMatchingResourcePatternResolver()
- def templatesDirPath = "${basedir}/src/templates/scaffolding"
- def templatesDir = new FileSystemResource(templatesDirPath)
- if (templatesDir.exists()) {
- try {
- resources.addAll(resolver.getResources("file:$templatesDirPath/*.html").filename)
- resources.addAll(resolver.getResources("file:$templatesDirPath/*.gsp").filename)
- } catch (e) {
- event 'StatusError', ['Error while loading views from grails-app scaffolding folder', e]
- }
- }
-
- resources
- }
-
- private String getPropertyName(GrailsDomainClass domainClass) { "${domainClass.propertyName}${domainSuffix}" }
-
-}
View
112 src/groovy/grails/plugin/angularscaffolding/AngularTemplateGenerator.groovy
@@ -0,0 +1,112 @@
+package grails.plugin.angularscaffolding
+
+import org.springframework.util.Assert
+import org.codehaus.groovy.grails.commons.GrailsDomainClass
+import org.springframework.core.io.FileSystemResource
+import org.springframework.core.io.support.PathMatchingResourcePatternResolver
+import org.codehaus.groovy.grails.scaffolding.*
+
+/**
+ * Can't seem to load this if it's on the plugin source path so I've inlined it here
+ */
+class AngularTemplateGenerator extends DefaultGrailsTemplateGenerator
+{
+ def event
+
+ AngularTemplateGenerator(ClassLoader classLoader) {
+ super(classLoader)
+ }
+
+ def renderEditor = { property, prefix ->
+ def domainClass = property.domainClass
+ def cp
+ if (pluginManager?.hasGrailsPlugin('hibernate')) {
+ cp = domainClass.constrainedProperties[property.name]
+ }
+
+ if (!renderEditorTemplate) {
+ // create template once for performance
+ def templateText = getTemplateText('renderEditor.template')
+ renderEditorTemplate = engine.createTemplate(templateText)
+ }
+
+ def binding = [
+ pluginManager: pluginManager,
+ property: property,
+ domainClass: domainClass,
+ cp: cp,
+ domainInstance: getPropertyName(domainClass),
+ prefix: prefix
+ ]
+ renderEditorTemplate.make(binding).toString()
+ }
+
+ @Override
+ void generateViews(GrailsDomainClass domainClass, String destdir) {
+ Assert.hasText destdir, 'Argument [destdir] not specified'
+
+ for (t in getTemplateNames()) {
+ event 'StatusUpdate', ["Generating $t for domain class ${domainClass.fullName}"]
+ generateView domainClass, t, new File(destdir).absolutePath
+ }
+ }
+
+ @Override
+ void generateView(GrailsDomainClass domainClass, String viewName, Writer out) {
+ def templateText = getTemplateText(viewName)
+
+ if (templateText) {
+
+ def t = engine.createTemplate(templateText)
+ def multiPart = domainClass.properties.find {it.type == ([] as Byte[]).class || it.type == ([] as byte[]).class}
+
+ boolean hasHibernate = pluginManager?.hasGrailsPlugin('hibernate')
+ def packageName = domainClass.packageName ? "<%@ page import=\"${domainClass.fullName}\" %>" : ""
+ def binding = [pluginManager: pluginManager,
+ packageName: packageName,
+ domainClass: domainClass,
+ multiPart: multiPart,
+ className: domainClass.shortName,
+ propertyName: getPropertyName(domainClass),
+ renderEditor: renderEditor,
+ comparator: hasHibernate ? DomainClassPropertyComparator : SimpleDomainClassPropertyComparator]
+
+println "viewName: $viewName, domainClass: $domainClass, class: ${domainClass.class.name}"
+ t.make(binding).writeTo(out)
+ }
+ }
+
+ @Override
+ void generateView(GrailsDomainClass domainClass, String viewName, String destDir) {
+ def suffix = viewName.find(/\.\w+$/)
+
+ def viewsDir = suffix == '.html' ? new File("$destDir/web-app/ng-templates/$domainClass.propertyName") : new File("$destDir/grails-app/views/$domainClass.propertyName")
+ if (!viewsDir.exists()) viewsDir.mkdirs()
+
+ def destFile = new File(viewsDir, "$viewName")
+ destFile.withWriter { Writer writer ->
+ generateView domainClass, viewName, writer
+ }
+ }
+
+ @Override
+ protected Set<String> getTemplateNames() {
+ def resources = []
+ def resolver = new PathMatchingResourcePatternResolver()
+ def templatesDirPath = "${basedir}/src/templates/scaffolding"
+ def templatesDir = new FileSystemResource(templatesDirPath)
+ if (templatesDir.exists()) {
+ try {
+ resources.addAll(resolver.getResources("file:$templatesDirPath/*.html").filename)
+ resources.addAll(resolver.getResources("file:$templatesDirPath/*.gsp").filename)
+ } catch (e) {
+ event 'StatusError', ['Error while loading views from grails-app scaffolding folder', e]
+ }
+ }
+
+ resources as Set
+ }
+
+ protected String getPropertyName(GrailsDomainClass domainClass) { "${domainClass.propertyName}${domainSuffix}" }
+
+}
View
2  src/templates/common/sortable.html
@@ -0,0 +1,2 @@
+<span data-ng-transclude></span>
+<i data-ng-class="{'icon-sort-up': isSortedByAscending(), 'icon-sort-down': isSortedByDescending()}" data-ng-show="isSortedBy()"></i>
View
11 src/templates/scaffolding/create.html
@@ -6,10 +6,13 @@
<form name="form" data-ng-submit="save(item)" class="form-horizontal">
<% excludedProps = Event.allEvents.toList() << 'version' << 'dateCreated' << 'lastUpdated'
persistentPropNames = domainClass.persistentProperties*.name
- boolean hasHibernate = pluginManager?.hasGrailsPlugin('hibernate')
- if (hasHibernate && org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainBinder.getMapping(domainClass)?.identity?.generator == 'assigned') {
- persistentPropNames << domainClass.identifier.name
- }
+ boolean hasHibernate = pluginManager?.hasGrailsPlugin('hibernate') || pluginManager?.hasGrailsPlugin('hibernate4')
+ if (hasHibernate) {
+ def GrailsDomainBinder = getClass().classLoader.loadClass('org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainBinder')
+ if (GrailsDomainBinder.newInstance().getMapping(domainClass)?.identity?.generator == 'assigned') {
+ persistentPropNames << domainClass.identifier.name
+ }
+ }
props = domainClass.properties.findAll { persistentPropNames.contains(it.name) && !excludedProps.contains(it.name) }
Collections.sort(props, comparator.constructors[0].newInstance([domainClass] as Object[]))
for (p in props) {
View
11 src/templates/scaffolding/edit.html
@@ -8,10 +8,13 @@
<input type="hidden" data-ng-model="item.version">
<% excludedProps = Event.allEvents.toList() << 'version' << 'dateCreated' << 'lastUpdated'
persistentPropNames = domainClass.persistentProperties*.name
- boolean hasHibernate = pluginManager?.hasGrailsPlugin('hibernate')
- if (hasHibernate && org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainBinder.getMapping(domainClass)?.identity?.generator == 'assigned') {
- persistentPropNames << domainClass.identifier.name
- }
+ boolean hasHibernate = pluginManager?.hasGrailsPlugin('hibernate') || pluginManager?.hasGrailsPlugin('hibernate4')
+ if (hasHibernate) {
+ def GrailsDomainBinder = getClass().classLoader.loadClass('org.codehaus.groovy.grails.orm.hibernate.cfg.GrailsDomainBinder')
+ if (GrailsDomainBinder.newInstance().getMapping(domainClass)?.identity?.generator == 'assigned') {
+ persistentPropNames << domainClass.identifier.name
+ }
+ }
props = domainClass.properties.findAll { persistentPropNames.contains(it.name) && !excludedProps.contains(it.name) }
Collections.sort(props, comparator.constructors[0].newInstance([domainClass] as Object[]))
for (p in props) {
View
7 web-app/WEB-INF/applicationContext.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="
-http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="grailsApplication" class="org.codehaus.groovy.grails.commons.GrailsApplicationFactoryBean">
<description>Grails application factory bean</description>
@@ -30,4 +29,6 @@ http://www.springframework.org/schema/beans http://www.springframework.org/schem
<value>utf-8</value>
</property>
</bean>
+
+ <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean" />
</beans>
View
342 web-app/WEB-INF/tld/spring.tld
@@ -1,311 +1,457 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
-
-<taglib>
-
- <tlib-version>1.1.1</tlib-version>
-
- <jsp-version>1.2</jsp-version>
-
- <short-name>Spring</short-name>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
+ version="2.0">
+
+ <description>Spring Framework JSP Tag Library</description>
+ <tlib-version>3.0</tlib-version>
+ <short-name>spring</short-name>
<uri>http://www.springframework.org/tags</uri>
- <description>Spring Framework JSP Tag Library. Authors: Rod Johnson, Juergen Hoeller</description>
-
-
<tag>
-
- <name>htmlEscape</name>
- <tag-class>org.springframework.web.servlet.tags.HtmlEscapeTag</tag-class>
- <body-content>JSP</body-content>
-
<description>
Sets default HTML escape value for the current page.
Overrides a "defaultHtmlEscape" context-param in web.xml, if any.
</description>
-
+ <name>htmlEscape</name>
+ <tag-class>org.springframework.web.servlet.tags.HtmlEscapeTag</tag-class>
+ <body-content>JSP</body-content>
<attribute>
+ <description>Set the default value for HTML escaping, to be put
+ into the current PageContext.</description>
<name>defaultHtmlEscape</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
</tag>
-
<tag>
-
- <name>escapeBody</name>
- <tag-class>org.springframework.web.servlet.tags.EscapeBodyTag</tag-class>
- <body-content>JSP</body-content>
-
<description>
Escapes its enclosed body content, applying HTML escaping and/or JavaScript escaping.
The HTML escaping flag participates in a page-wide or application-wide setting
(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
</description>
-
+ <name>escapeBody</name>
+ <tag-class>org.springframework.web.servlet.tags.EscapeBodyTag</tag-class>
+ <body-content>JSP</body-content>
<attribute>
+ <description>Set HTML escaping for this tag, as boolean value. Overrides the
+ default HTML escaping setting for the current page.</description>
<name>htmlEscape</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>Set JavaScript escaping for this tag, as boolean value.
+ Default is false.</description>
<name>javaScriptEscape</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
</tag>
-
<tag>
-
- <name>message</name>
- <tag-class>org.springframework.web.servlet.tags.MessageTag</tag-class>
- <body-content>JSP</body-content>
-
<description>
Retrieves the message with the given code, or text if code isn't resolvable.
The HTML escaping flag participates in a page-wide or application-wide setting
(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
</description>
-
+ <name>message</name>
+ <tag-class>org.springframework.web.servlet.tags.MessageTag</tag-class>
+ <body-content>JSP</body-content>
<attribute>
+ <description>A MessageSourceResolvable argument (direct or through JSP EL).
+ Fits nicely when used in conjunction with Spring's own validation error
+ classes which all implement the MessageSourceResolvable interface. For
+ example, this allows you to iterate over all of the errors in a form,
+ passing each error (using a runtime expression) as the value of this
+ 'message' attribute, thus effecting the easy display of such error
+ messages.</description>
+ <name>message</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The code (key) to use when looking up the message.
+ If code is not provided, the text attribute will be used.</description>
<name>code</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>Set optional message arguments for this tag, as a
+ (comma-)delimited String (each String argument can contain JSP EL),
+ an Object array (used as argument array), or a single Object (used
+ as single argument).</description>
<name>arguments</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>The separator character to be used for splitting the
+ arguments string value; defaults to a 'comma' (',').</description>
+ <name>argumentSeparator</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Default text to output when a message for the given code
+ could not be found. If both text and code are not set, the tag will
+ output null.</description>
<name>text</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>The string to use when binding the result to the page,
+ request, session or application scope. If not specified, the result
+ gets outputted to the writer (i.e. typically directly to the JSP).</description>
<name>var</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>The scope to use when exporting the result to a variable.
+ This attribute is only used when var is also set. Possible values are
+ page, request, session and application.</description>
<name>scope</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>Set HTML escaping for this tag, as boolean value.
+ Overrides the default HTML escaping setting for the current page.</description>
<name>htmlEscape</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>Set JavaScript escaping for this tag, as boolean value. Default is false.</description>
<name>javaScriptEscape</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
</tag>
-
<tag>
-
- <name>theme</name>
- <tag-class>org.springframework.web.servlet.tags.ThemeTag</tag-class>
- <body-content>JSP</body-content>
-
<description>
Retrieves the theme message with the given code, or text if code isn't resolvable.
The HTML escaping flag participates in a page-wide or application-wide setting
(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
</description>
-
+ <name>theme</name>
+ <tag-class>org.springframework.web.servlet.tags.ThemeTag</tag-class>
+ <body-content>JSP</body-content>
<attribute>
+ <description>A MessageSourceResolvable argument (direct or through JSP EL).</description>
+ <name>message</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The code (key) to use when looking up the message.
+ If code is not provided, the text attribute will be used.</description>
<name>code</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>Set optional message arguments for this tag, as a
+ (comma-)delimited String (each String argument can contain JSP EL),
+ an Object array (used as argument array), or a single Object (used
+ as single argument).</description>
<name>arguments</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>The separator character to be used for splitting the
+ arguments string value; defaults to a 'comma' (',').</description>
+ <name>argumentSeparator</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Default text to output when a message for the given code
+ could not be found. If both text and code are not set, the tag will
+ output null.</description>
<name>text</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>The string to use when binding the result to the page,
+ request, session or application scope. If not specified, the result
+ gets outputted to the writer (i.e. typically directly to the JSP).</description>
<name>var</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>The scope to use when exporting the result to a variable.
+ This attribute is only used when var is also set. Possible values are
+ page, request, session and application.</description>
<name>scope</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>Set HTML escaping for this tag, as boolean value.
+ Overrides the default HTML escaping setting for the current page.</description>
<name>htmlEscape</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>Set JavaScript escaping for this tag, as boolean value. Default is false.</description>
<name>javaScriptEscape</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
</tag>
-
<tag>
-
- <name>hasBindErrors</name>
- <tag-class>org.springframework.web.servlet.tags.BindErrorsTag</tag-class>
- <body-content>JSP</body-content>
-
<description>
Provides Errors instance in case of bind errors.
The HTML escaping flag participates in a page-wide or application-wide setting
(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
</description>
-
+ <name>hasBindErrors</name>
+ <tag-class>org.springframework.web.servlet.tags.BindErrorsTag</tag-class>
+ <body-content>JSP</body-content>
<variable>
<name-given>errors</name-given>
<variable-class>org.springframework.validation.Errors</variable-class>
</variable>
-
<attribute>
+ <description>The name of the bean in the request, that needs to be
+ inspected for errors. If errors are available for this bean, they
+ will be bound under the 'errors' key.</description>
<name>name</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>Set HTML escaping for this tag, as boolean value.
+ Overrides the default HTML escaping setting for the current page.</description>
<name>htmlEscape</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
</tag>
-
<tag>
-
- <name>nestedPath</name>
- <tag-class>org.springframework.web.servlet.tags.NestedPathTag</tag-class>
- <body-content>JSP</body-content>
-
<description>
Sets a nested path to be used by the bind tag's path.
</description>
-
+ <name>nestedPath</name>
+ <tag-class>org.springframework.web.servlet.tags.NestedPathTag</tag-class>
+ <body-content>JSP</body-content>
<variable>
<name-given>nestedPath</name-given>
<variable-class>java.lang.String</variable-class>
</variable>
-
<attribute>
+ <description>Set the path that this tag should apply. E.g. 'customer'
+ to allow bind paths like 'address.street' rather than
+ 'customer.address.street'.</description>
<name>path</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
</tag>
-
<tag>
-
- <name>bind</name>
- <tag-class>org.springframework.web.servlet.tags.BindTag</tag-class>
- <body-content>JSP</body-content>
-
<description>
Provides BindStatus object for the given bind path.
The HTML escaping flag participates in a page-wide or application-wide setting
(i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
</description>
-
+ <name>bind</name>
+ <tag-class>org.springframework.web.servlet.tags.BindTag</tag-class>
+ <body-content>JSP</body-content>
<variable>
<name-given>status</name-given>
<variable-class>org.springframework.web.servlet.support.BindStatus</variable-class>
</variable>
-
<attribute>
+ <description>The path to the bean or bean property to bind status
+ information for. For instance account.name, company.address.zipCode
+ or just employee. The status object will exported to the page scope,
+ specifically for this bean or bean property</description>
<name>path</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>Set whether to ignore a nested path, if any. Default is to not ignore.</description>
<name>ignoreNestedPath</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>Set HTML escaping for this tag, as boolean value. Overrides
+ the default HTML escaping setting for the current page.</description>
<name>htmlEscape</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
</tag>
-
<tag>
-
- <name>transform</name>
- <tag-class>org.springframework.web.servlet.tags.TransformTag</tag-class>
- <body-content>JSP</body-content>
-
<description>
Provides transformation of variables to Strings, using an appropriate
custom PropertyEditor from BindTag (can only be used inside BindTag).
The HTML escaping flag participates in a page-wide or application-wide setting
- (i.e. by HtmlEscapeTag or a "defaultHtmlEscape" context-param in web.xml).
+ (i.e. by HtmlEscapeTag or a 'defaultHtmlEscape' context-param in web.xml).
</description>
-
+ <name>transform</name>
+ <tag-class>org.springframework.web.servlet.tags.TransformTag</tag-class>
+ <body-content>JSP</body-content>
<attribute>
+ <description>The value to transform. This is the actual object you want
+ to have transformed (for instance a Date). Using the PropertyEditor that
+ is currently in use by the 'spring:bind' tag.</description>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>The string to use when binding the result to the page,
+ request, session or application scope. If not specified, the result gets
+ outputted to the writer (i.e. typically directly to the JSP).</description>
<name>var</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
-
<attribute>
+ <description>The scope to use when exported the result to a variable.
+ This attribute is only used when var is also set. Possible values are
+ page, request, session and application.</description>
<name>scope</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
+ <attribute>
+ <description>Set HTML escaping for this tag, as boolean value. Overrides
+ the default HTML escaping setting for the current page.</description>
+ <name>htmlEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+ <tag>
+ <description>URL tag based on the JSTL c:url tag. This variant is fully
+ backwards compatible with the standard tag. Enhancements include support
+ for URL template parameters.</description>
+ <name>url</name>
+ <tag-class>org.springframework.web.servlet.tags.UrlTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>The URL to build. This value can include template place holders
+ that are replaced with the URL encoded value of the named parameter. Parameters
+ must be defined using the param tag inside the body of this tag.</description>
+ <name>value</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Specifies a remote application context path. The default is the
+ current application context path.</description>
+ <name>context</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The name of the variable to export the URL value to.</description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
<attribute>
+ <description>The scope for the var. 'application', 'session', 'request' and
+ 'page' scopes are supported. Defaults to page scope. This attribute has no
+ effect unless the var attribute is also defined.</description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set HTML escaping for this tag, as a boolean value. Overrides the
+ default HTML escaping setting for the current page.</description>
<name>htmlEscape</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
+ <attribute>
+ <description>Set JavaScript escaping for this tag, as a boolean value.
+ Default is false.</description>
+ <name>javaScriptEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+
+ <tag>
+ <description>Parameter tag based on the JSTL c:param tag. The sole purpose is to
+ support params inside the spring:url tag.</description>
+ <name>param</name>
+ <tag-class>org.springframework.web.servlet.tags.ParamTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>The name of the parameter.</description>
+ <name>name</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The value of the parameter.</description>
+ <name>value</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ </tag>
+ <tag>
+ <description>Evaluates a Spring expression (SpEL) and either prints the result or assigns it to a variable.</description>
+ <name>eval</name>
+ <tag-class>org.springframework.web.servlet.tags.EvalTag</tag-class>
+ <body-content>JSP</body-content>
+ <attribute>
+ <description>The expression to evaluate.</description>
+ <name>expression</name>
+ <required>true</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The name of the variable to export the evaluation result to.</description>
+ <name>var</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>The scope for the var. 'application', 'session', 'request' and
+ 'page' scopes are supported. Defaults to page scope. This attribute has no
+ effect unless the var attribute is also defined.</description>
+ <name>scope</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set HTML escaping for this tag, as a boolean value. Overrides the
+ default HTML escaping setting for the current page.</description>
+ <name>htmlEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <description>Set JavaScript escaping for this tag, as a boolean value. Default is false.</description>
+ <name>javaScriptEscape</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
</tag>
</taglib>
Please sign in to comment.
Something went wrong with that request. Please try again.