diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..e7cf2d3
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,21 @@
+language: groovy
+
+jdk:
+ - oraclejdk7
+
+before_script:
+ - "export DISPLAY=:99.0"
+ - "sh -e /etc/init.d/xvfb start"
+
+before_install:
+ - curl -s get.sdkman.io | bash
+ - source "$HOME/.sdkman/bin/sdkman-init.sh"
+ - echo sdkman_auto_answer=true > ~/.sdkman/etc/config
+ - source "/home/travis/.sdkman/bin/sdkman-init.sh"
+ - sdk install grails 2.4.3
+
+branches:
+ only:
+ - master
+
+script: grails -Dgeb.env=firefox test-app --non-interactive --stacktrace
diff --git a/application.properties b/application.properties
new file mode 100644
index 0000000..816cc81
--- /dev/null
+++ b/application.properties
@@ -0,0 +1,6 @@
+#Grails Metadata file
+#Tue Apr 11 00:59:32 BRT 2017
+app.grails.version=2.4.3
+app.name=atec
+app.servlet.version=2.5
+app.version=0.1
diff --git a/chromedrivers/linux/chromedriver b/chromedrivers/linux/chromedriver
new file mode 100644
index 0000000..ecfd1fd
Binary files /dev/null and b/chromedrivers/linux/chromedriver differ
diff --git a/chromedrivers/mac/chromedriver b/chromedrivers/mac/chromedriver
new file mode 100644
index 0000000..0a51a15
Binary files /dev/null and b/chromedrivers/mac/chromedriver differ
diff --git a/chromedrivers/windows/chromedriver.exe b/chromedrivers/windows/chromedriver.exe
new file mode 100644
index 0000000..9b2e7c7
Binary files /dev/null and b/chromedrivers/windows/chromedriver.exe differ
diff --git a/grails-app/assets/images/apple-touch-icon-retina.png b/grails-app/assets/images/apple-touch-icon-retina.png
new file mode 100644
index 0000000..5cc83ed
Binary files /dev/null and b/grails-app/assets/images/apple-touch-icon-retina.png differ
diff --git a/grails-app/assets/images/apple-touch-icon.png b/grails-app/assets/images/apple-touch-icon.png
new file mode 100644
index 0000000..aba337f
Binary files /dev/null and b/grails-app/assets/images/apple-touch-icon.png differ
diff --git a/grails-app/assets/images/favicon.ico b/grails-app/assets/images/favicon.ico
new file mode 100644
index 0000000..3dfcb92
Binary files /dev/null and b/grails-app/assets/images/favicon.ico differ
diff --git a/grails-app/assets/images/grails_logo.png b/grails-app/assets/images/grails_logo.png
new file mode 100644
index 0000000..9836b93
Binary files /dev/null and b/grails-app/assets/images/grails_logo.png differ
diff --git a/grails-app/assets/images/skin/database_add.png b/grails-app/assets/images/skin/database_add.png
new file mode 100644
index 0000000..802bd6c
Binary files /dev/null and b/grails-app/assets/images/skin/database_add.png differ
diff --git a/grails-app/assets/images/skin/database_delete.png b/grails-app/assets/images/skin/database_delete.png
new file mode 100644
index 0000000..cce652e
Binary files /dev/null and b/grails-app/assets/images/skin/database_delete.png differ
diff --git a/grails-app/assets/images/skin/database_edit.png b/grails-app/assets/images/skin/database_edit.png
new file mode 100644
index 0000000..e501b66
Binary files /dev/null and b/grails-app/assets/images/skin/database_edit.png differ
diff --git a/grails-app/assets/images/skin/database_save.png b/grails-app/assets/images/skin/database_save.png
new file mode 100644
index 0000000..44c06dd
Binary files /dev/null and b/grails-app/assets/images/skin/database_save.png differ
diff --git a/grails-app/assets/images/skin/database_table.png b/grails-app/assets/images/skin/database_table.png
new file mode 100644
index 0000000..693709c
Binary files /dev/null and b/grails-app/assets/images/skin/database_table.png differ
diff --git a/grails-app/assets/images/skin/exclamation.png b/grails-app/assets/images/skin/exclamation.png
new file mode 100644
index 0000000..c37bd06
Binary files /dev/null and b/grails-app/assets/images/skin/exclamation.png differ
diff --git a/grails-app/assets/images/skin/house.png b/grails-app/assets/images/skin/house.png
new file mode 100644
index 0000000..fed6221
Binary files /dev/null and b/grails-app/assets/images/skin/house.png differ
diff --git a/grails-app/assets/images/skin/information.png b/grails-app/assets/images/skin/information.png
new file mode 100644
index 0000000..12cd1ae
Binary files /dev/null and b/grails-app/assets/images/skin/information.png differ
diff --git a/grails-app/assets/images/skin/shadow.jpg b/grails-app/assets/images/skin/shadow.jpg
new file mode 100644
index 0000000..b7ed44f
Binary files /dev/null and b/grails-app/assets/images/skin/shadow.jpg differ
diff --git a/grails-app/assets/images/skin/sorted_asc.gif b/grails-app/assets/images/skin/sorted_asc.gif
new file mode 100644
index 0000000..6b179c1
Binary files /dev/null and b/grails-app/assets/images/skin/sorted_asc.gif differ
diff --git a/grails-app/assets/images/skin/sorted_desc.gif b/grails-app/assets/images/skin/sorted_desc.gif
new file mode 100644
index 0000000..38b3a01
Binary files /dev/null and b/grails-app/assets/images/skin/sorted_desc.gif differ
diff --git a/grails-app/assets/images/spinner.gif b/grails-app/assets/images/spinner.gif
new file mode 100644
index 0000000..1ed786f
Binary files /dev/null and b/grails-app/assets/images/spinner.gif differ
diff --git a/grails-app/assets/images/springsource.png b/grails-app/assets/images/springsource.png
new file mode 100644
index 0000000..e806d00
Binary files /dev/null and b/grails-app/assets/images/springsource.png differ
diff --git a/grails-app/assets/javascripts/application.js b/grails-app/assets/javascripts/application.js
new file mode 100644
index 0000000..a67f7eb
--- /dev/null
+++ b/grails-app/assets/javascripts/application.js
@@ -0,0 +1,20 @@
+// This is a manifest file that'll be compiled into application.js.
+//
+// Any JavaScript file within this directory can be referenced here using a relative path.
+//
+// You're free to add application-wide JavaScript to this file, but it's generally better
+// to create separate JavaScript files as needed.
+//
+//= require jquery
+//= require_tree .
+//= require_self
+
+if (typeof jQuery !== 'undefined') {
+ (function($) {
+ $('#spinner').ajaxStart(function() {
+ $(this).fadeIn();
+ }).ajaxStop(function() {
+ $(this).fadeOut();
+ });
+ })(jQuery);
+}
diff --git a/grails-app/assets/stylesheets/application.css b/grails-app/assets/stylesheets/application.css
new file mode 100644
index 0000000..e3b02f2
--- /dev/null
+++ b/grails-app/assets/stylesheets/application.css
@@ -0,0 +1,13 @@
+/*
+* This is a manifest file that'll be compiled into application.css, which will include all the files
+* listed below.
+*
+* Any CSS file within this directory can be referenced here using a relative path.
+*
+* You're free to add application-wide styles to this file and they'll appear at the top of the
+* compiled file, but it's generally better to create a new file per style scope.
+*
+*= require main
+*= require mobile
+*= require_self
+*/
diff --git a/grails-app/assets/stylesheets/errors.css b/grails-app/assets/stylesheets/errors.css
new file mode 100644
index 0000000..bdb58bc
--- /dev/null
+++ b/grails-app/assets/stylesheets/errors.css
@@ -0,0 +1,109 @@
+h1, h2 {
+ margin: 10px 25px 5px;
+}
+
+h2 {
+ font-size: 1.1em;
+}
+
+.filename {
+ font-style: italic;
+}
+
+.exceptionMessage {
+ margin: 10px;
+ border: 1px solid #000;
+ padding: 5px;
+ background-color: #E9E9E9;
+}
+
+.stack,
+.snippet {
+ margin: 0 25px 10px;
+}
+
+.stack,
+.snippet {
+ border: 1px solid #ccc;
+ -mox-box-shadow: 0 0 2px rgba(0,0,0,0.2);
+ -webkit-box-shadow: 0 0 2px rgba(0,0,0,0.2);
+ box-shadow: 0 0 2px rgba(0,0,0,0.2);
+}
+
+/* error details */
+.error-details {
+ border-top: 1px solid #FFAAAA;
+ -mox-box-shadow: 0 0 2px rgba(0,0,0,0.2);
+ -webkit-box-shadow: 0 0 2px rgba(0,0,0,0.2);
+ box-shadow: 0 0 2px rgba(0,0,0,0.2);
+ border-bottom: 1px solid #FFAAAA;
+ -mox-box-shadow: 0 0 2px rgba(0,0,0,0.2);
+ -webkit-box-shadow: 0 0 2px rgba(0,0,0,0.2);
+ box-shadow: 0 0 2px rgba(0,0,0,0.2);
+ background-color:#FFF3F3;
+ line-height: 1.5;
+ overflow: hidden;
+ padding: 5px;
+ padding-left:25px;
+}
+
+.error-details dt {
+ clear: left;
+ float: left;
+ font-weight: bold;
+ margin-right: 5px;
+}
+
+.error-details dt:after {
+ content: ":";
+}
+
+.error-details dd {
+ display: block;
+}
+
+/* stack trace */
+.stack {
+ padding: 5px;
+ overflow: auto;
+ height: 150px;
+}
+
+/* code snippet */
+.snippet {
+ background-color: #fff;
+ font-family: monospace;
+}
+
+.snippet .line {
+ display: block;
+}
+
+.snippet .lineNumber {
+ background-color: #ddd;
+ color: #999;
+ display: inline-block;
+ margin-right: 5px;
+ padding: 0 3px;
+ text-align: right;
+ width: 3em;
+}
+
+.snippet .error {
+ background-color: #fff3f3;
+ font-weight: bold;
+}
+
+.snippet .error .lineNumber {
+ background-color: #faa;
+ color: #333;
+ font-weight: bold;
+}
+
+.snippet .line:first-child .lineNumber {
+ padding-top: 5px;
+}
+
+.snippet .line:last-child .lineNumber {
+ padding-bottom: 5px;
+}
\ No newline at end of file
diff --git a/grails-app/assets/stylesheets/main.css b/grails-app/assets/stylesheets/main.css
new file mode 100644
index 0000000..a55945d
--- /dev/null
+++ b/grails-app/assets/stylesheets/main.css
@@ -0,0 +1,596 @@
+/* FONT STACK */
+body,
+input, select, textarea {
+ font-family: "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", Helvetica, Arial, "Lucida Grande", sans-serif;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ line-height: 1.1;
+}
+
+/* BASE LAYOUT */
+
+html {
+ background-color: #ddd;
+ background-image: -moz-linear-gradient(center top, #aaa, #ddd);
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #aaa), color-stop(1, #ddd));
+ background-image: linear-gradient(top, #aaa, #ddd);
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorStr = '#aaaaaa', EndColorStr = '#dddddd');
+ background-repeat: no-repeat;
+ height: 100%;
+ /* change the box model to exclude the padding from the calculation of 100% height (IE8+) */
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+}
+
+html.no-cssgradients {
+ background-color: #aaa;
+}
+
+.ie6 html {
+ height: 100%;
+}
+
+html * {
+ margin: 0;
+}
+
+body {
+ background: #ffffff;
+ color: #333333;
+ margin: 0 auto;
+ max-width: 960px;
+ overflow-x: hidden; /* prevents box-shadow causing a horizontal scrollbar in firefox when viewport < 960px wide */
+ -moz-box-shadow: 0 0 0.3em #255b17;
+ -webkit-box-shadow: 0 0 0.3em #255b17;
+ box-shadow: 0 0 0.3em #255b17;
+}
+
+#grailsLogo {
+ background-color: #abbf78;
+}
+
+/* replace with .no-boxshadow body if you have modernizr available */
+.ie6 body,
+.ie7 body,
+.ie8 body {
+ border-color: #255b17;
+ border-style: solid;
+ border-width: 0 1px;
+}
+
+.ie6 body {
+ height: 100%;
+}
+
+a:link, a:visited, a:hover {
+ color: #48802c;
+}
+
+a:hover, a:active {
+ outline: none; /* prevents outline in webkit on active links but retains it for tab focus */
+}
+
+h1 {
+ color: #48802c;
+ font-weight: normal;
+ font-size: 1.25em;
+ margin: 0.8em 0 0.3em 0;
+}
+
+ul {
+ padding: 0;
+}
+
+img {
+ border: 0;
+}
+
+/* GENERAL */
+
+#grailsLogo a {
+ display: inline-block;
+ margin: 1em;
+}
+
+.content {
+}
+
+.content h1 {
+ border-bottom: 1px solid #CCCCCC;
+ margin: 0.8em 1em 0.3em;
+ padding: 0 0.25em;
+}
+
+.scaffold-list h1 {
+ border: none;
+}
+
+.footer {
+ background: #abbf78;
+ color: #000;
+ clear: both;
+ font-size: 0.8em;
+ margin-top: 1.5em;
+ padding: 1em;
+ min-height: 1em;
+}
+
+.footer a {
+ color: #255b17;
+}
+
+.spinner {
+ background: url(../images/spinner.gif) 50% 50% no-repeat transparent;
+ height: 16px;
+ width: 16px;
+ padding: 0.5em;
+ position: absolute;
+ right: 0;
+ top: 0;
+ text-indent: -9999px;
+}
+
+/* NAVIGATION MENU */
+
+.nav {
+ background-color: #efefef;
+ padding: 0.5em 0.75em;
+ -moz-box-shadow: 0 0 3px 1px #aaaaaa;
+ -webkit-box-shadow: 0 0 3px 1px #aaaaaa;
+ box-shadow: 0 0 3px 1px #aaaaaa;
+ zoom: 1;
+}
+
+.nav ul {
+ overflow: hidden;
+ padding-left: 0;
+ zoom: 1;
+}
+
+.nav li {
+ display: block;
+ float: left;
+ list-style-type: none;
+ margin-right: 0.5em;
+ padding: 0;
+}
+
+.nav a {
+ color: #666666;
+ display: block;
+ padding: 0.25em 0.7em;
+ text-decoration: none;
+ -moz-border-radius: 0.3em;
+ -webkit-border-radius: 0.3em;
+ border-radius: 0.3em;
+}
+
+.nav a:active, .nav a:visited {
+ color: #666666;
+}
+
+.nav a:focus, .nav a:hover {
+ background-color: #999999;
+ color: #ffffff;
+ outline: none;
+ text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.8);
+}
+
+.no-borderradius .nav a:focus, .no-borderradius .nav a:hover {
+ background-color: transparent;
+ color: #444444;
+ text-decoration: underline;
+}
+
+.nav a.home, .nav a.list, .nav a.create {
+ background-position: 0.7em center;
+ background-repeat: no-repeat;
+ text-indent: 25px;
+}
+
+.nav a.home {
+ background-image: url(../images/skin/house.png);
+}
+
+.nav a.list {
+ background-image: url(../images/skin/database_table.png);
+}
+
+.nav a.create {
+ background-image: url(../images/skin/database_add.png);
+}
+
+/* CREATE/EDIT FORMS AND SHOW PAGES */
+
+fieldset,
+.property-list {
+ margin: 0.6em 1.25em 0 1.25em;
+ padding: 0.3em 1.8em 1.25em;
+ position: relative;
+ zoom: 1;
+ border: none;
+}
+
+.property-list .fieldcontain {
+ list-style: none;
+ overflow: hidden;
+ zoom: 1;
+}
+
+.fieldcontain {
+ margin-top: 1em;
+}
+
+.fieldcontain label,
+.fieldcontain .property-label {
+ color: #666666;
+ text-align: right;
+ width: 25%;
+}
+
+.fieldcontain .property-label {
+ float: left;
+}
+
+.fieldcontain .property-value {
+ display: block;
+ margin-left: 27%;
+}
+
+label {
+ cursor: pointer;
+ display: inline-block;
+ margin: 0 0.25em 0 0;
+}
+
+input, select, textarea {
+ background-color: #fcfcfc;
+ border: 1px solid #cccccc;
+ font-size: 1em;
+ padding: 0.2em 0.4em;
+}
+
+select {
+ padding: 0.2em 0.2em 0.2em 0;
+}
+
+select[multiple] {
+ vertical-align: top;
+}
+
+textarea {
+ width: 250px;
+ height: 150px;
+ overflow: auto; /* IE always renders vertical scrollbar without this */
+ vertical-align: top;
+}
+
+input[type=checkbox], input[type=radio] {
+ background-color: transparent;
+ border: 0;
+ padding: 0;
+}
+
+input:focus, select:focus, textarea:focus {
+ background-color: #ffffff;
+ border: 1px solid #eeeeee;
+ outline: 0;
+ -moz-box-shadow: 0 0 0.5em #ffffff;
+ -webkit-box-shadow: 0 0 0.5em #ffffff;
+ box-shadow: 0 0 0.5em #ffffff;
+}
+
+.required-indicator {
+ color: #48802C;
+ display: inline-block;
+ font-weight: bold;
+ margin-left: 0.3em;
+ position: relative;
+ top: 0.1em;
+}
+
+ul.one-to-many {
+ display: inline-block;
+ list-style-position: inside;
+ vertical-align: top;
+}
+
+.ie6 ul.one-to-many, .ie7 ul.one-to-many {
+ display: inline;
+ zoom: 1;
+}
+
+ul.one-to-many li.add {
+ list-style-type: none;
+}
+
+/* EMBEDDED PROPERTIES */
+
+fieldset.embedded {
+ background-color: transparent;
+ border: 1px solid #CCCCCC;
+ margin-left: 0;
+ margin-right: 0;
+ padding-left: 0;
+ padding-right: 0;
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+fieldset.embedded legend {
+ margin: 0 1em;
+}
+
+/* MESSAGES AND ERRORS */
+
+.errors,
+.message {
+ font-size: 0.8em;
+ line-height: 2;
+ margin: 1em 2em;
+ padding: 0.25em;
+}
+
+.message {
+ background: #f3f3ff;
+ border: 1px solid #b2d1ff;
+ color: #006dba;
+ -moz-box-shadow: 0 0 0.25em #b2d1ff;
+ -webkit-box-shadow: 0 0 0.25em #b2d1ff;
+ box-shadow: 0 0 0.25em #b2d1ff;
+}
+
+.errors {
+ background: #fff3f3;
+ border: 1px solid #ffaaaa;
+ color: #cc0000;
+ -moz-box-shadow: 0 0 0.25em #ff8888;
+ -webkit-box-shadow: 0 0 0.25em #ff8888;
+ box-shadow: 0 0 0.25em #ff8888;
+}
+
+.errors ul,
+.message {
+ padding: 0;
+}
+
+.errors li {
+ list-style: none;
+ background: transparent url(../images/skin/exclamation.png) 0.5em 50% no-repeat;
+ text-indent: 2.2em;
+}
+
+.message {
+ background: transparent url(../images/skin/information.png) 0.5em 50% no-repeat;
+ text-indent: 2.2em;
+}
+
+/* form fields with errors */
+
+.error input, .error select, .error textarea {
+ background: #fff3f3;
+ border-color: #ffaaaa;
+ color: #cc0000;
+}
+
+.error input:focus, .error select:focus, .error textarea:focus {
+ -moz-box-shadow: 0 0 0.5em #ffaaaa;
+ -webkit-box-shadow: 0 0 0.5em #ffaaaa;
+ box-shadow: 0 0 0.5em #ffaaaa;
+}
+
+/* same effects for browsers that support HTML5 client-side validation (these have to be specified separately or IE will ignore the entire rule) */
+
+input:invalid, select:invalid, textarea:invalid {
+ background: #fff3f3;
+ border-color: #ffaaaa;
+ color: #cc0000;
+}
+
+input:invalid:focus, select:invalid:focus, textarea:invalid:focus {
+ -moz-box-shadow: 0 0 0.5em #ffaaaa;
+ -webkit-box-shadow: 0 0 0.5em #ffaaaa;
+ box-shadow: 0 0 0.5em #ffaaaa;
+}
+
+/* TABLES */
+
+table {
+ border-top: 1px solid #DFDFDF;
+ border-collapse: collapse;
+ width: 100%;
+ margin-bottom: 1em;
+}
+
+tr {
+ border: 0;
+}
+
+tr>td:first-child, tr>th:first-child {
+ padding-left: 1.25em;
+}
+
+tr>td:last-child, tr>th:last-child {
+ padding-right: 1.25em;
+}
+
+td, th {
+ line-height: 1.5em;
+ padding: 0.5em 0.6em;
+ text-align: left;
+ vertical-align: top;
+}
+
+th {
+ background-color: #efefef;
+ background-image: -moz-linear-gradient(top, #ffffff, #eaeaea);
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #ffffff), color-stop(1, #eaeaea));
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorStr = '#ffffff', EndColorStr = '#eaeaea');
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffffff', EndColorStr='#eaeaea')";
+ color: #666666;
+ font-weight: bold;
+ line-height: 1.7em;
+ padding: 0.2em 0.6em;
+}
+
+thead th {
+ white-space: nowrap;
+}
+
+th a {
+ display: block;
+ text-decoration: none;
+}
+
+th a:link, th a:visited {
+ color: #666666;
+}
+
+th a:hover, th a:focus {
+ color: #333333;
+}
+
+th.sortable a {
+ background-position: right;
+ background-repeat: no-repeat;
+ padding-right: 1.1em;
+}
+
+th.asc a {
+ background-image: url(../images/skin/sorted_asc.gif);
+}
+
+th.desc a {
+ background-image: url(../images/skin/sorted_desc.gif);
+}
+
+.odd {
+ background: #f7f7f7;
+}
+
+.even {
+ background: #ffffff;
+}
+
+th:hover, tr:hover {
+ background: #E1F2B6;
+}
+
+/* PAGINATION */
+
+.pagination {
+ border-top: 0;
+ margin: 0;
+ padding: 0.3em 0.2em;
+ text-align: center;
+ -moz-box-shadow: 0 0 3px 1px #AAAAAA;
+ -webkit-box-shadow: 0 0 3px 1px #AAAAAA;
+ box-shadow: 0 0 3px 1px #AAAAAA;
+ background-color: #EFEFEF;
+}
+
+.pagination a,
+.pagination .currentStep {
+ color: #666666;
+ display: inline-block;
+ margin: 0 0.1em;
+ padding: 0.25em 0.7em;
+ text-decoration: none;
+ -moz-border-radius: 0.3em;
+ -webkit-border-radius: 0.3em;
+ border-radius: 0.3em;
+}
+
+.pagination a:hover, .pagination a:focus,
+.pagination .currentStep {
+ background-color: #999999;
+ color: #ffffff;
+ outline: none;
+ text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.8);
+}
+
+.no-borderradius .pagination a:hover, .no-borderradius .pagination a:focus,
+.no-borderradius .pagination .currentStep {
+ background-color: transparent;
+ color: #444444;
+ text-decoration: underline;
+}
+
+/* ACTION BUTTONS */
+
+.buttons {
+ background-color: #efefef;
+ overflow: hidden;
+ padding: 0.3em;
+ -moz-box-shadow: 0 0 3px 1px #aaaaaa;
+ -webkit-box-shadow: 0 0 3px 1px #aaaaaa;
+ box-shadow: 0 0 3px 1px #aaaaaa;
+ margin: 0.1em 0 0 0;
+ border: none;
+}
+
+.buttons input,
+.buttons a {
+ background-color: transparent;
+ border: 0;
+ color: #666666;
+ cursor: pointer;
+ display: inline-block;
+ margin: 0 0.25em 0;
+ overflow: visible;
+ padding: 0.25em 0.7em;
+ text-decoration: none;
+
+ -moz-border-radius: 0.3em;
+ -webkit-border-radius: 0.3em;
+ border-radius: 0.3em;
+}
+
+.buttons input:hover, .buttons input:focus,
+.buttons a:hover, .buttons a:focus {
+ background-color: #999999;
+ color: #ffffff;
+ outline: none;
+ text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.8);
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+}
+
+.no-borderradius .buttons input:hover, .no-borderradius .buttons input:focus,
+.no-borderradius .buttons a:hover, .no-borderradius .buttons a:focus {
+ background-color: transparent;
+ color: #444444;
+ text-decoration: underline;
+}
+
+.buttons .delete, .buttons .edit, .buttons .save {
+ background-position: 0.7em center;
+ background-repeat: no-repeat;
+ text-indent: 25px;
+}
+
+.ie6 .buttons input.delete, .ie6 .buttons input.edit, .ie6 .buttons input.save,
+.ie7 .buttons input.delete, .ie7 .buttons input.edit, .ie7 .buttons input.save {
+ padding-left: 36px;
+}
+
+.buttons .delete {
+ background-image: url(../images/skin/database_delete.png);
+}
+
+.buttons .edit {
+ background-image: url(../images/skin/database_edit.png);
+}
+
+.buttons .save {
+ background-image: url(../images/skin/database_save.png);
+}
+
+a.skip {
+ position: absolute;
+ left: -9999px;
+}
diff --git a/grails-app/assets/stylesheets/mobile.css b/grails-app/assets/stylesheets/mobile.css
new file mode 100644
index 0000000..167f502
--- /dev/null
+++ b/grails-app/assets/stylesheets/mobile.css
@@ -0,0 +1,82 @@
+/* Styles for mobile devices */
+
+@media screen and (max-width: 480px) {
+ .nav {
+ padding: 0.5em;
+ }
+
+ .nav li {
+ margin: 0 0.5em 0 0;
+ padding: 0.25em;
+ }
+
+ /* Hide individual steps in pagination, just have next & previous */
+ .pagination .step, .pagination .currentStep {
+ display: none;
+ }
+
+ .pagination .prevLink {
+ float: left;
+ }
+
+ .pagination .nextLink {
+ float: right;
+ }
+
+ /* pagination needs to wrap around floated buttons */
+ .pagination {
+ overflow: hidden;
+ }
+
+ /* slightly smaller margin around content body */
+ fieldset,
+ .property-list {
+ padding: 0.3em 1em 1em;
+ }
+
+ input, textarea {
+ width: 100%;
+ -moz-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ -ms-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+
+ select, input[type=checkbox], input[type=radio], input[type=submit], input[type=button], input[type=reset] {
+ width: auto;
+ }
+
+ /* hide all but the first column of list tables */
+ .scaffold-list td:not(:first-child),
+ .scaffold-list th:not(:first-child) {
+ display: none;
+ }
+
+ .scaffold-list thead th {
+ text-align: center;
+ }
+
+ /* stack form elements */
+ .fieldcontain {
+ margin-top: 0.6em;
+ }
+
+ .fieldcontain label,
+ .fieldcontain .property-label,
+ .fieldcontain .property-value {
+ display: block;
+ float: none;
+ margin: 0 0 0.25em 0;
+ text-align: left;
+ width: auto;
+ }
+
+ .errors ul,
+ .message p {
+ margin: 0.5em;
+ }
+
+ .error ul {
+ margin-left: 0;
+ }
+}
diff --git a/grails-app/conf/BootStrap.groovy b/grails-app/conf/BootStrap.groovy
new file mode 100644
index 0000000..1287dae
--- /dev/null
+++ b/grails-app/conf/BootStrap.groovy
@@ -0,0 +1,7 @@
+class BootStrap {
+
+ def init = { servletContext ->
+ }
+ def destroy = {
+ }
+}
diff --git a/grails-app/conf/BuildConfig.groovy b/grails-app/conf/BuildConfig.groovy
new file mode 100644
index 0000000..e3f5fe8
--- /dev/null
+++ b/grails-app/conf/BuildConfig.groovy
@@ -0,0 +1,81 @@
+grails.servlet.version = "3.0" // Change depending on target container compliance (2.5 or 3.0)
+grails.project.class.dir = "target/classes"
+grails.project.test.class.dir = "target/test-classes"
+grails.project.test.reports.dir = "target/test-reports"
+grails.project.work.dir = "target/work"
+grails.project.target.level = 1.7
+grails.project.source.level = 1.7
+grails.server.port.http = 8070
+//grails.project.war.file = "target/${appName}-${appVersion}.war"
+
+grails.project.dependency.resolver = "maven" // or ivy
+grails.project.dependency.resolution = {
+ // inherit Grails' default dependencies
+ inherits("global") {
+ // specify dependency exclusions here; for example, uncomment this to disable ehcache:
+ // excludes 'ehcache'
+ }
+ log "error" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose'
+ checksums true // Whether to verify checksums on resolve
+ legacyResolve false
+ // whether to do a secondary resolve on plugin installation, not advised and here for backwards compatibility
+
+ repositories {
+ inherits true // Whether to inherit repository definitions from plugins
+
+ grailsPlugins()
+ grailsHome()
+ mavenLocal()
+ grailsCentral()
+ mavenCentral()
+ // uncomment these (or add new ones) to enable remote dependency resolution from public Maven repositories
+ mavenRepo "http://repository.codehaus.org"
+ mavenRepo "http://download.java.net/maven/2/"
+ mavenRepo "http://repository.jboss.com/maven2/"
+ // Repositorios adicionados
+ mavenRepo "http://snapshots.repository.codehaus.org"
+ mavenRepo "https://repo.grails.org/grails/plugins"
+ mavenRepo "http://dl.bintray.com/alkemist/maven/"
+ }
+
+ dependencies {
+ // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes e.g.
+ // runtime 'mysql:mysql-connector-java:5.1.29'
+ // runtime 'org.postgresql:postgresql:9.3-1101-jdbc41'
+ test "org.grails:grails-datastore-test-support:1.0-grails-2.4"
+
+ // Dependencias adicionadas
+ compile "org.spockframework:spock-grails-support:0.7-groovy-1.8"
+ test "org.gebish:geb-junit4:0.9.2"
+ test "org.seleniumhq.selenium:selenium-support:2.39.0"
+ test "org.seleniumhq.selenium:selenium-chrome-driver:2.39.0"
+ test "org.seleniumhq.selenium:selenium-firefox-driver:2.39.0"
+ }
+
+ plugins {
+ // plugins for the build system only
+ build ":tomcat:7.0.55"
+
+ // plugins for the compile step
+ compile ":scaffolding:2.1.2"
+ compile ':cache:1.1.7'
+ compile ":asset-pipeline:1.9.6"
+
+ // plugins needed at runtime but not for compilation
+ runtime ":hibernate4:4.3.5.5" // or ":hibernate:3.6.10.17"
+ runtime ":database-migration:1.4.0"
+ runtime ":jquery:1.11.1"
+
+ // Uncomment these to enable additional asset-pipeline capabilities
+ //compile ":sass-asset-pipeline:1.9.0"
+ //compile ":less-asset-pipeline:1.10.0"
+ //compile ":coffee-asset-pipeline:1.8.0"
+ //compile ":handlebars-asset-pipeline:1.3.0.3"
+
+ // Plugins adicionados
+ test(":cucumber:1.1.0") {
+ exclude "spock-core"
+ }
+ test ":geb:0.9.2"
+ }
+}
\ No newline at end of file
diff --git a/grails-app/conf/Config.groovy b/grails-app/conf/Config.groovy
new file mode 100644
index 0000000..8153152
--- /dev/null
+++ b/grails-app/conf/Config.groovy
@@ -0,0 +1,117 @@
+// locations to search for config files that get merged into the main config;
+// config files can be ConfigSlurper scripts, Java properties files, or classes
+// in the classpath in ConfigSlurper format
+
+// grails.config.locations = [ "classpath:${appName}-config.properties",
+// "classpath:${appName}-config.groovy",
+// "file:${userHome}/.grails/${appName}-config.properties",
+// "file:${userHome}/.grails/${appName}-config.groovy"]
+
+// if (System.properties["${appName}.config.location"]) {
+// grails.config.locations << "file:" + System.properties["${appName}.config.location"]
+// }
+
+grails.project.groupId = appName // change this to alter the default package name and Maven publishing destination
+
+// The ACCEPT header will not be used for content negotiation for user agents containing the following strings (defaults to the 4 major rendering engines)
+grails.mime.disable.accept.header.userAgents = ['Gecko', 'WebKit', 'Presto', 'Trident']
+grails.mime.types = [ // the first one is the default format
+ all: '*/*', // 'all' maps to '*' or the first available format in withFormat
+ atom: 'application/atom+xml',
+ css: 'text/css',
+ csv: 'text/csv',
+ form: 'application/x-www-form-urlencoded',
+ html: ['text/html','application/xhtml+xml'],
+ js: 'text/javascript',
+ json: ['application/json', 'text/json'],
+ multipartForm: 'multipart/form-data',
+ rss: 'application/rss+xml',
+ text: 'text/plain',
+ hal: ['application/hal+json','application/hal+xml'],
+ xml: ['text/xml', 'application/xml']
+]
+
+// URL Mapping Cache Max Size, defaults to 5000
+//grails.urlmapping.cache.maxsize = 1000
+
+// Legacy setting for codec used to encode data with ${}
+grails.views.default.codec = "html"
+
+// The default scope for controllers. May be prototype, session or singleton.
+// If unspecified, controllers are prototype scoped.
+grails.controllers.defaultScope = 'singleton'
+
+// GSP settings
+grails {
+ views {
+ gsp {
+ encoding = 'UTF-8'
+ htmlcodec = 'xml' // use xml escaping instead of HTML4 escaping
+ codecs {
+ expression = 'html' // escapes values inside ${}
+ scriptlet = 'html' // 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'
+ }
+}
+
+
+grails.converters.encoding = "UTF-8"
+// scaffolding templates configuration
+grails.scaffolding.templates.domainSuffix = 'Instance'
+
+// Set to false to use the new Grails 1.2 JSONBuilder in the render method
+grails.json.legacy.builder = false
+// enabled native2ascii conversion of i18n properties files
+grails.enable.native2ascii = true
+// packages to include in Spring bean scanning
+grails.spring.bean.packages = []
+// whether to disable processing of multi part requests
+grails.web.disable.multipart=false
+
+// request parameters to mask when logging exceptions
+grails.exceptionresolver.params.exclude = ['password']
+
+// configure auto-caching of queries by default (if false you can cache individual queries with 'cache: true')
+grails.hibernate.cache.queries = false
+
+// configure passing transaction's read-only attribute to Hibernate session, queries and criterias
+// set "singleSession = false" OSIV mode in hibernate configuration after enabling
+grails.hibernate.pass.readonly = false
+// configure passing read-only to OSIV session by default, requires "singleSession = false" OSIV mode
+grails.hibernate.osiv.readonly = false
+
+environments {
+ development {
+ grails.logging.jul.usebridge = true
+ }
+ production {
+ grails.logging.jul.usebridge = false
+ // TODO: grails.serverURL = "http://www.changeme.com"
+ }
+}
+
+// log4j configuration
+log4j.main = {
+ // Example of changing the log pattern for the default console appender:
+ //
+ //appenders {
+ // console name:'stdout', layout:pattern(conversionPattern: '%c{2} %m%n')
+ //}
+
+ error 'org.codehaus.groovy.grails.web.servlet', // controllers
+ 'org.codehaus.groovy.grails.web.pages', // GSP
+ 'org.codehaus.groovy.grails.web.sitemesh', // layouts
+ 'org.codehaus.groovy.grails.web.mapping.filter', // URL mapping
+ 'org.codehaus.groovy.grails.web.mapping', // URL mapping
+ 'org.codehaus.groovy.grails.commons', // core / classloading
+ 'org.codehaus.groovy.grails.plugins', // plugins
+ 'org.codehaus.groovy.grails.orm.hibernate', // hibernate integration
+ 'org.springframework',
+ 'org.hibernate',
+ 'net.sf.ehcache.hibernate'
+}
diff --git a/grails-app/conf/CucumberConfig.groovy b/grails-app/conf/CucumberConfig.groovy
new file mode 100644
index 0000000..d5d2f97
--- /dev/null
+++ b/grails-app/conf/CucumberConfig.groovy
@@ -0,0 +1,6 @@
+cucumber {
+ features = ["test/cucumber"]
+ sources = ["test/cucumber"]
+ glue = sources
+ tags = ["~@ignore"]
+}
\ No newline at end of file
diff --git a/grails-app/conf/DataSource.groovy b/grails-app/conf/DataSource.groovy
new file mode 100644
index 0000000..095c66c
--- /dev/null
+++ b/grails-app/conf/DataSource.groovy
@@ -0,0 +1,57 @@
+dataSource {
+ pooled = true
+ jmxExport = true
+ driverClassName = "org.h2.Driver"
+ username = "sa"
+ password = ""
+}
+hibernate {
+ cache.use_second_level_cache = true
+ cache.use_query_cache = false
+// cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory' // Hibernate 3
+ cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' // Hibernate 4
+ singleSession = true // configure OSIV singleSession mode
+ flush.mode = 'manual' // OSIV session flush mode outside of transactional context
+}
+
+// environment specific settings
+environments {
+ development {
+ dataSource {
+ dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
+ url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
+ }
+ }
+ test {
+ dataSource {
+ dbCreate = "update"
+ url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
+ }
+ }
+ production {
+ dataSource {
+ dbCreate = "update"
+ url = "jdbc:h2:prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
+ properties {
+ // See http://grails.org/doc/latest/guide/conf.html#dataSource for documentation
+ jmxEnabled = true
+ initialSize = 5
+ maxActive = 50
+ minIdle = 5
+ maxIdle = 25
+ maxWait = 10000
+ maxAge = 10 * 60000
+ timeBetweenEvictionRunsMillis = 5000
+ minEvictableIdleTimeMillis = 60000
+ validationQuery = "SELECT 1"
+ validationQueryTimeout = 3
+ validationInterval = 15000
+ testOnBorrow = true
+ testWhileIdle = true
+ testOnReturn = false
+ jdbcInterceptors = "ConnectionState"
+ defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED
+ }
+ }
+ }
+}
diff --git a/grails-app/conf/UrlMappings.groovy b/grails-app/conf/UrlMappings.groovy
new file mode 100644
index 0000000..69634b8
--- /dev/null
+++ b/grails-app/conf/UrlMappings.groovy
@@ -0,0 +1,13 @@
+class UrlMappings {
+
+ static mappings = {
+ "/$controller/$action?/$id?(.$format)?"{
+ constraints {
+ // apply constraints here
+ }
+ }
+
+ "/"(view:"/index")
+ "500"(view:'/error')
+ }
+}
diff --git a/grails-app/conf/spring/resources.groovy b/grails-app/conf/spring/resources.groovy
new file mode 100644
index 0000000..fa95006
--- /dev/null
+++ b/grails-app/conf/spring/resources.groovy
@@ -0,0 +1,3 @@
+// Place your Spring DSL code here
+beans = {
+}
diff --git a/grails-app/i18n/messages.properties b/grails-app/i18n/messages.properties
new file mode 100644
index 0000000..0c9d7ee
--- /dev/null
+++ b/grails-app/i18n/messages.properties
@@ -0,0 +1,55 @@
+default.doesnt.match.message=Property [{0}] of class [{1}] with value [{2}] does not match the required pattern [{3}]
+default.invalid.url.message=Property [{0}] of class [{1}] with value [{2}] is not a valid URL
+default.invalid.creditCard.message=Property [{0}] of class [{1}] with value [{2}] is not a valid credit card number
+default.invalid.email.message=Property [{0}] of class [{1}] with value [{2}] is not a valid e-mail address
+default.invalid.range.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid range from [{3}] to [{4}]
+default.invalid.size.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid size range from [{3}] to [{4}]
+default.invalid.max.message=Property [{0}] of class [{1}] with value [{2}] exceeds maximum value [{3}]
+default.invalid.min.message=Property [{0}] of class [{1}] with value [{2}] is less than minimum value [{3}]
+default.invalid.max.size.message=Property [{0}] of class [{1}] with value [{2}] exceeds the maximum size of [{3}]
+default.invalid.min.size.message=Property [{0}] of class [{1}] with value [{2}] is less than the minimum size of [{3}]
+default.invalid.validator.message=Property [{0}] of class [{1}] with value [{2}] does not pass custom validation
+default.not.inlist.message=Property [{0}] of class [{1}] with value [{2}] is not contained within the list [{3}]
+default.blank.message=Property [{0}] of class [{1}] cannot be blank
+default.not.equal.message=Property [{0}] of class [{1}] with value [{2}] cannot equal [{3}]
+default.null.message=Property [{0}] of class [{1}] cannot be null
+default.not.unique.message=Property [{0}] of class [{1}] with value [{2}] must be unique
+
+default.paginate.prev=Previous
+default.paginate.next=Next
+default.boolean.true=True
+default.boolean.false=False
+default.date.format=yyyy-MM-dd HH:mm:ss z
+default.number.format=0
+
+default.created.message={0} {1} created
+default.updated.message={0} {1} updated
+default.deleted.message={0} {1} deleted
+default.not.deleted.message={0} {1} could not be deleted
+default.not.found.message={0} not found with id {1}
+default.optimistic.locking.failure=Another user has updated this {0} while you were editing
+
+default.home.label=Home
+default.list.label={0} List
+default.add.label=Add {0}
+default.new.label=New {0}
+default.create.label=Create {0}
+default.show.label=Show {0}
+default.edit.label=Edit {0}
+
+default.button.create.label=Create
+default.button.edit.label=Edit
+default.button.update.label=Update
+default.button.delete.label=Delete
+default.button.delete.confirm.message=Are you sure?
+
+# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
+typeMismatch.java.net.URL=Property {0} must be a valid URL
+typeMismatch.java.net.URI=Property {0} must be a valid URI
+typeMismatch.java.util.Date=Property {0} must be a valid Date
+typeMismatch.java.lang.Double=Property {0} must be a valid number
+typeMismatch.java.lang.Integer=Property {0} must be a valid number
+typeMismatch.java.lang.Long=Property {0} must be a valid number
+typeMismatch.java.lang.Short=Property {0} must be a valid number
+typeMismatch.java.math.BigDecimal=Property {0} must be a valid number
+typeMismatch.java.math.BigInteger=Property {0} must be a valid number
diff --git a/grails-app/i18n/messages_cs_CZ.properties b/grails-app/i18n/messages_cs_CZ.properties
new file mode 100644
index 0000000..7345531
--- /dev/null
+++ b/grails-app/i18n/messages_cs_CZ.properties
@@ -0,0 +1,55 @@
+default.doesnt.match.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] neodpovídá požadovanému vzoru [{3}]
+default.invalid.url.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není validní URL
+default.invalid.creditCard.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není validní číslo kreditní karty
+default.invalid.email.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není validní emailová adresa
+default.invalid.range.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není v povoleném rozmezí od [{3}] do [{4}]
+default.invalid.size.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není v povoleném rozmezí od [{3}] do [{4}]
+default.invalid.max.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] překračuje maximální povolenou hodnotu [{3}]
+default.invalid.min.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] je menší než minimální povolená hodnota [{3}]
+default.invalid.max.size.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] překračuje maximální velikost [{3}]
+default.invalid.min.size.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] je menší než minimální velikost [{3}]
+default.invalid.validator.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] neprošla validací
+default.not.inlist.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] není obsažena v seznamu [{3}]
+default.blank.message=Položka [{0}] třídy [{1}] nemůže být prázdná
+default.not.equal.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] nemůže být stejná jako [{3}]
+default.null.message=Položka [{0}] třídy [{1}] nemůže být prázdná
+default.not.unique.message=Položka [{0}] třídy [{1}] o hodnotě [{2}] musí být unikátní
+
+default.paginate.prev=Předcházející
+default.paginate.next=Následující
+default.boolean.true=Pravda
+default.boolean.false=Nepravda
+default.date.format=dd. MM. yyyy HH:mm:ss z
+default.number.format=0
+
+default.created.message={0} {1} vytvořeno
+default.updated.message={0} {1} aktualizováno
+default.deleted.message={0} {1} smazáno
+default.not.deleted.message={0} {1} nelze smazat
+default.not.found.message={0} nenalezen s id {1}
+default.optimistic.locking.failure=Jiný uživatel aktualizoval záznam {0}, právě když byl vámi editován
+
+default.home.label=Domů
+default.list.label={0} Seznam
+default.add.label=Přidat {0}
+default.new.label=Nový {0}
+default.create.label=Vytvořit {0}
+default.show.label=Ukázat {0}
+default.edit.label=Editovat {0}
+
+default.button.create.label=Vytvoř
+default.button.edit.label=Edituj
+default.button.update.label=Aktualizuj
+default.button.delete.label=Smaž
+default.button.delete.confirm.message=Jste si jistý?
+
+# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
+typeMismatch.java.net.URL=Položka {0} musí být validní URL
+typeMismatch.java.net.URI=Položka {0} musí být validní URI
+typeMismatch.java.util.Date=Položka {0} musí být validní datum
+typeMismatch.java.lang.Double=Položka {0} musí být validní desetinné číslo
+typeMismatch.java.lang.Integer=Položka {0} musí být validní číslo
+typeMismatch.java.lang.Long=Položka {0} musí být validní číslo
+typeMismatch.java.lang.Short=Položka {0} musí být validní číslo
+typeMismatch.java.math.BigDecimal=Položka {0} musí být validní číslo
+typeMismatch.java.math.BigInteger=Položka {0} musí být validní číslo
diff --git a/grails-app/i18n/messages_da.properties b/grails-app/i18n/messages_da.properties
new file mode 100644
index 0000000..858b229
--- /dev/null
+++ b/grails-app/i18n/messages_da.properties
@@ -0,0 +1,56 @@
+default.doesnt.match.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] overholder ikke mønsteret [{3}]
+default.invalid.url.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] er ikke en gyldig URL
+default.invalid.creditCard.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] er ikke et gyldigt kreditkortnummer
+default.invalid.email.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] er ikke en gyldig e-mail adresse
+default.invalid.range.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] ligger ikke inden for intervallet fra [{3}] til [{4}]
+default.invalid.size.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] ligger ikke inden for størrelsen fra [{3}] til [{4}]
+default.invalid.max.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] overstiger den maksimale værdi [{3}]
+default.invalid.min.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] er under den minimale værdi [{3}]
+default.invalid.max.size.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] overstiger den maksimale størrelse på [{3}]
+default.invalid.min.size.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] er under den minimale størrelse på [{3}]
+default.invalid.validator.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] overholder ikke den brugerdefinerede validering
+default.not.inlist.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] findes ikke i listen [{3}]
+default.blank.message=Feltet [{0}] i klassen [{1}] kan ikke være tom
+default.not.equal.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] må ikke være [{3}]
+default.null.message=Feltet [{0}] i klassen [{1}] kan ikke være null
+default.not.unique.message=Feltet [{0}] i klassen [{1}] som har værdien [{2}] skal være unik
+
+default.paginate.prev=Forrige
+default.paginate.next=Næste
+default.boolean.true=Sand
+default.boolean.false=Falsk
+default.date.format=yyyy-MM-dd HH:mm:ss z
+default.number.format=0
+
+default.created.message={0} {1} oprettet
+default.updated.message={0} {1} opdateret
+default.deleted.message={0} {1} slettet
+default.not.deleted.message={0} {1} kunne ikke slettes
+default.not.found.message={0} med id {1} er ikke fundet
+default.optimistic.locking.failure=En anden bruger har opdateret denne {0} imens du har lavet rettelser
+
+default.home.label=Hjem
+default.list.label={0} Liste
+default.add.label=Tilføj {0}
+default.new.label=Ny {0}
+default.create.label=Opret {0}
+default.show.label=Vis {0}
+default.edit.label=Ret {0}
+
+default.button.create.label=Opret
+default.button.edit.label=Ret
+default.button.update.label=Opdater
+default.button.delete.label=Slet
+default.button.delete.confirm.message=Er du sikker?
+
+# Databindingsfejl. Brug "typeMismatch.$className.$propertyName for at passe til en given klasse (f.eks typeMismatch.Book.author)
+typeMismatch.java.net.URL=Feltet {0} skal være en valid URL
+typeMismatch.java.net.URI=Feltet {0} skal være en valid URI
+typeMismatch.java.util.Date=Feltet {0} skal være en valid Dato
+typeMismatch.java.lang.Double=Feltet {0} skal være et valid tal
+typeMismatch.java.lang.Integer=Feltet {0} skal være et valid tal
+typeMismatch.java.lang.Long=Feltet {0} skal være et valid tal
+typeMismatch.java.lang.Short=Feltet {0} skal være et valid tal
+typeMismatch.java.math.BigDecimal=Feltet {0} skal være et valid tal
+typeMismatch.java.math.BigInteger=Feltet {0} skal være et valid tal
+
diff --git a/grails-app/i18n/messages_de.properties b/grails-app/i18n/messages_de.properties
new file mode 100644
index 0000000..0f7bfe9
--- /dev/null
+++ b/grails-app/i18n/messages_de.properties
@@ -0,0 +1,55 @@
+default.doesnt.match.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] entspricht nicht dem vorgegebenen Muster [{3}]
+default.invalid.url.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist keine gültige URL
+default.invalid.creditCard.message=Das Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist keine gültige Kreditkartennummer
+default.invalid.email.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist keine gültige E-Mail Adresse
+default.invalid.range.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist nicht im Wertebereich von [{3}] bis [{4}]
+default.invalid.size.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist nicht im Wertebereich von [{3}] bis [{4}]
+default.invalid.max.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist größer als der Höchstwert von [{3}]
+default.invalid.min.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist kleiner als der Mindestwert von [{3}]
+default.invalid.max.size.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] übersteigt den Höchstwert von [{3}]
+default.invalid.min.size.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] unterschreitet den Mindestwert von [{3}]
+default.invalid.validator.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist ungültig
+default.not.inlist.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] ist nicht in der Liste [{3}] enthalten.
+default.blank.message=Die Eigenschaft [{0}] des Typs [{1}] darf nicht leer sein
+default.not.equal.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] darf nicht gleich [{3}] sein
+default.null.message=Die Eigenschaft [{0}] des Typs [{1}] darf nicht null sein
+default.not.unique.message=Die Eigenschaft [{0}] des Typs [{1}] mit dem Wert [{2}] darf nur einmal vorkommen
+
+default.paginate.prev=Vorherige
+default.paginate.next=Nächste
+default.boolean.true=Wahr
+default.boolean.false=Falsch
+default.date.format=dd.MM.yyyy HH:mm:ss z
+default.number.format=0
+
+default.created.message={0} {1} wurde angelegt
+default.updated.message={0} {1} wurde geändert
+default.deleted.message={0} {1} wurde gelöscht
+default.not.deleted.message={0} {1} konnte nicht gelöscht werden
+default.not.found.message={0} mit der id {1} wurde nicht gefunden
+default.optimistic.locking.failure=Ein anderer Benutzer hat das {0} Object geändert während Sie es bearbeitet haben
+
+default.home.label=Home
+default.list.label={0} Liste
+default.add.label={0} hinzufügen
+default.new.label={0} anlegen
+default.create.label={0} anlegen
+default.show.label={0} anzeigen
+default.edit.label={0} bearbeiten
+
+default.button.create.label=Anlegen
+default.button.edit.label=Bearbeiten
+default.button.update.label=Aktualisieren
+default.button.delete.label=Löschen
+default.button.delete.confirm.message=Sind Sie sicher?
+
+# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
+typeMismatch.java.net.URL=Die Eigenschaft {0} muss eine gültige URL sein
+typeMismatch.java.net.URI=Die Eigenschaft {0} muss eine gültige URI sein
+typeMismatch.java.util.Date=Die Eigenschaft {0} muss ein gültiges Datum sein
+typeMismatch.java.lang.Double=Die Eigenschaft {0} muss eine gültige Zahl sein
+typeMismatch.java.lang.Integer=Die Eigenschaft {0} muss eine gültige Zahl sein
+typeMismatch.java.lang.Long=Die Eigenschaft {0} muss eine gültige Zahl sein
+typeMismatch.java.lang.Short=Die Eigenschaft {0} muss eine gültige Zahl sein
+typeMismatch.java.math.BigDecimal=Die Eigenschaft {0} muss eine gültige Zahl sein
+typeMismatch.java.math.BigInteger=Die Eigenschaft {0} muss eine gültige Zahl sein
diff --git a/grails-app/i18n/messages_es.properties b/grails-app/i18n/messages_es.properties
new file mode 100644
index 0000000..f0ede53
--- /dev/null
+++ b/grails-app/i18n/messages_es.properties
@@ -0,0 +1,55 @@
+default.doesnt.match.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no corresponde al patrón [{3}]
+default.invalid.url.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no es una URL válida
+default.invalid.creditCard.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no es un número de tarjeta de crédito válida
+default.invalid.email.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no es una dirección de correo electrónico válida
+default.invalid.range.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no entra en el rango válido de [{3}] a [{4}]
+default.invalid.size.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no entra en el tamaño válido de [{3}] a [{4}]
+default.invalid.max.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] excede el valor máximo [{3}]
+default.invalid.min.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] es menos que el valor mínimo [{3}]
+default.invalid.max.size.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] excede el tamaño máximo de [{3}]
+default.invalid.min.size.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] es menor que el tamaño mínimo de [{3}]
+default.invalid.validator.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no es válido
+default.not.inlist.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no esta contenido dentro de la lista [{3}]
+default.blank.message=La propiedad [{0}] de la clase [{1}] no puede ser vacía
+default.not.equal.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] no puede igualar a [{3}]
+default.null.message=La propiedad [{0}] de la clase [{1}] no puede ser nulo
+default.not.unique.message=La propiedad [{0}] de la clase [{1}] con valor [{2}] debe ser única
+
+default.paginate.prev=Anterior
+default.paginate.next=Siguiente
+default.boolean.true=Verdadero
+default.boolean.false=Falso
+default.date.format=yyyy-MM-dd HH:mm:ss z
+default.number.format=0
+
+default.created.message={0} {1} creado
+default.updated.message={0} {1} actualizado
+default.deleted.message={0} {1} eliminado
+default.not.deleted.message={0} {1} no puede eliminarse
+default.not.found.message=No se encuentra {0} con id {1}
+default.optimistic.locking.failure=Mientras usted editaba, otro usuario ha actualizado su {0}
+
+default.home.label=Principal
+default.list.label={0} Lista
+default.add.label=Agregar {0}
+default.new.label=Nuevo {0}
+default.create.label=Crear {0}
+default.show.label=Mostrar {0}
+default.edit.label=Editar {0}
+
+default.button.create.label=Crear
+default.button.edit.label=Editar
+default.button.update.label=Actualizar
+default.button.delete.label=Eliminar
+default.button.delete.confirm.message=¿Está usted seguro?
+
+# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
+typeMismatch.java.net.URL=La propiedad {0} debe ser una URL válida
+typeMismatch.java.net.URI=La propiedad {0} debe ser una URI válida
+typeMismatch.java.util.Date=La propiedad {0} debe ser una fecha válida
+typeMismatch.java.lang.Double=La propiedad {0} debe ser un número válido
+typeMismatch.java.lang.Integer=La propiedad {0} debe ser un número válido
+typeMismatch.java.lang.Long=La propiedad {0} debe ser un número válido
+typeMismatch.java.lang.Short=La propiedad {0} debe ser un número válido
+typeMismatch.java.math.BigDecimal=La propiedad {0} debe ser un número válido
+typeMismatch.java.math.BigInteger=La propiedad {0} debe ser un número válido
\ No newline at end of file
diff --git a/grails-app/i18n/messages_fr.properties b/grails-app/i18n/messages_fr.properties
new file mode 100644
index 0000000..5572164
--- /dev/null
+++ b/grails-app/i18n/messages_fr.properties
@@ -0,0 +1,19 @@
+default.doesnt.match.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] ne correspond pas au pattern [{3}]
+default.invalid.url.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas une URL valide
+default.invalid.creditCard.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas un numéro de carte de crédit valide
+default.invalid.email.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas une adresse e-mail valide
+default.invalid.range.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas contenue dans l'intervalle [{3}] à [{4}]
+default.invalid.size.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas contenue dans l'intervalle [{3}] à [{4}]
+default.invalid.max.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] est supérieure à la valeur maximum [{3}]
+default.invalid.min.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] est inférieure à la valeur minimum [{3}]
+default.invalid.max.size.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] est supérieure à la valeur maximum [{3}]
+default.invalid.min.size.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] est inférieure à la valeur minimum [{3}]
+default.invalid.validator.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] n'est pas valide
+default.not.inlist.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] ne fait pas partie de la liste [{3}]
+default.blank.message=La propriété [{0}] de la classe [{1}] ne peut pas être vide
+default.not.equal.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] ne peut pas être égale à [{3}]
+default.null.message=La propriété [{0}] de la classe [{1}] ne peut pas être nulle
+default.not.unique.message=La propriété [{0}] de la classe [{1}] avec la valeur [{2}] doit être unique
+
+default.paginate.prev=Précédent
+default.paginate.next=Suivant
diff --git a/grails-app/i18n/messages_it.properties b/grails-app/i18n/messages_it.properties
new file mode 100644
index 0000000..a90f1c7
--- /dev/null
+++ b/grails-app/i18n/messages_it.properties
@@ -0,0 +1,55 @@
+default.doesnt.match.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non corrisponde al pattern [{3}]
+default.invalid.url.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è un URL valido
+default.invalid.creditCard.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è un numero di carta di credito valido
+default.invalid.email.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è un indirizzo email valido
+default.invalid.range.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non rientra nell'intervallo valido da [{3}] a [{4}]
+default.invalid.size.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non rientra nell'intervallo di dimensioni valide da [{3}] a [{4}]
+default.invalid.max.message=La proprietà [{0}] della classe [{1}] con valore [{2}] è maggiore di [{3}]
+default.invalid.min.message=La proprietà [{0}] della classe [{1}] con valore [{2}] è minore di [{3}]
+default.invalid.max.size.message=La proprietà [{0}] della classe [{1}] con valore [{2}] è maggiore di [{3}]
+default.invalid.min.size.message=La proprietà [{0}] della classe [{1}] con valore [{2}] è minore di [{3}]
+default.invalid.validator.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è valida
+default.not.inlist.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non è contenuta nella lista [{3}]
+default.blank.message=La proprietà [{0}] della classe [{1}] non può essere vuota
+default.not.equal.message=La proprietà [{0}] della classe [{1}] con valore [{2}] non può essere uguale a [{3}]
+default.null.message=La proprietà [{0}] della classe [{1}] non può essere null
+default.not.unique.message=La proprietà [{0}] della classe [{1}] con valore [{2}] deve essere unica
+
+default.paginate.prev=Precedente
+default.paginate.next=Successivo
+default.boolean.true=Vero
+default.boolean.false=Falso
+default.date.format=dd/MM/yyyy HH:mm:ss z
+default.number.format=0
+
+default.created.message={0} {1} creato
+default.updated.message={0} {1} aggiornato
+default.deleted.message={0} {1} eliminato
+default.not.deleted.message={0} {1} non può essere eliminato
+default.not.found.message={0} non trovato con id {1}
+default.optimistic.locking.failure=Un altro utente ha aggiornato questo {0} mentre si era in modifica
+
+default.home.label=Home
+default.list.label={0} Elenco
+default.add.label=Aggiungi {0}
+default.new.label=Nuovo {0}
+default.create.label=Crea {0}
+default.show.label=Mostra {0}
+default.edit.label=Modifica {0}
+
+default.button.create.label=Crea
+default.button.edit.label=Modifica
+default.button.update.label=Aggiorna
+default.button.delete.label=Elimina
+default.button.delete.confirm.message=Si è sicuri?
+
+# Data binding errors. Usa "typeMismatch.$className.$propertyName per la personalizzazione (es typeMismatch.Book.author)
+typeMismatch.java.net.URL=La proprietà {0} deve essere un URL valido
+typeMismatch.java.net.URI=La proprietà {0} deve essere un URI valido
+typeMismatch.java.util.Date=La proprietà {0} deve essere una data valida
+typeMismatch.java.lang.Double=La proprietà {0} deve essere un numero valido
+typeMismatch.java.lang.Integer=La proprietà {0} deve essere un numero valido
+typeMismatch.java.lang.Long=La proprietà {0} deve essere un numero valido
+typeMismatch.java.lang.Short=La proprietà {0} deve essere un numero valido
+typeMismatch.java.math.BigDecimal=La proprietà {0} deve essere un numero valido
+typeMismatch.java.math.BigInteger=La proprietà {0} deve essere un numero valido
diff --git a/grails-app/i18n/messages_ja.properties b/grails-app/i18n/messages_ja.properties
new file mode 100644
index 0000000..f716d75
--- /dev/null
+++ b/grails-app/i18n/messages_ja.properties
@@ -0,0 +1,55 @@
+default.doesnt.match.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]パターンと一致していません。
+default.invalid.url.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、有効なURLではありません。
+default.invalid.creditCard.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、有効なクレジットカード番号ではありません。
+default.invalid.email.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、有効なメールアドレスではありません。
+default.invalid.range.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]から[{4}]範囲内を指定してください。
+default.invalid.size.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]から[{4}]以内を指定してください。
+default.invalid.max.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、最大値[{3}]より大きいです。
+default.invalid.min.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、最小値[{3}]より小さいです。
+default.invalid.max.size.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、最大値[{3}]より大きいです。
+default.invalid.min.size.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、最小値[{3}]より小さいです。
+default.invalid.validator.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、カスタムバリデーションを通過できません。
+default.not.inlist.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]リスト内に存在しません。
+default.blank.message=[{1}]クラスのプロパティ[{0}]の空白は許可されません。
+default.not.equal.message=クラス[{1}]プロパティ[{0}]の値[{2}]は、[{3}]と同等ではありません。
+default.null.message=[{1}]クラスのプロパティ[{0}]にnullは許可されません。
+default.not.unique.message=クラス[{1}]プロパティ[{0}]の値[{2}]は既に使用されています。
+
+default.paginate.prev=戻る
+default.paginate.next=次へ
+default.boolean.true=はい
+default.boolean.false=いいえ
+default.date.format=yyyy/MM/dd HH:mm:ss z
+default.number.format=0
+
+default.created.message={0}(id:{1})を作成しました。
+default.updated.message={0}(id:{1})を更新しました。
+default.deleted.message={0}(id:{1})を削除しました。
+default.not.deleted.message={0}(id:{1})は削除できませんでした。
+default.not.found.message={0}(id:{1})は見つかりませんでした。
+default.optimistic.locking.failure=この{0}は編集中に他のユーザによって先に更新されています。
+
+default.home.label=ホーム
+default.list.label={0}リスト
+default.add.label={0}を追加
+default.new.label={0}を新規作成
+default.create.label={0}を作成
+default.show.label={0}詳細
+default.edit.label={0}を編集
+
+default.button.create.label=作成
+default.button.edit.label=編集
+default.button.update.label=更新
+default.button.delete.label=削除
+default.button.delete.confirm.message=本当に削除してよろしいですか?
+
+# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
+typeMismatch.java.net.URL={0}は有効なURLでなければなりません。
+typeMismatch.java.net.URI={0}は有効なURIでなければなりません。
+typeMismatch.java.util.Date={0}は有効な日付でなければなりません。
+typeMismatch.java.lang.Double={0}は有効な数値でなければなりません。
+typeMismatch.java.lang.Integer={0}は有効な数値でなければなりません。
+typeMismatch.java.lang.Long={0}は有効な数値でなければなりません。
+typeMismatch.java.lang.Short={0}は有効な数値でなければなりません。
+typeMismatch.java.math.BigDecimal={0}は有効な数値でなければなりません。
+typeMismatch.java.math.BigInteger={0}は有効な数値でなければなりません。
diff --git a/grails-app/i18n/messages_nb.properties b/grails-app/i18n/messages_nb.properties
new file mode 100644
index 0000000..47a8a1a
--- /dev/null
+++ b/grails-app/i18n/messages_nb.properties
@@ -0,0 +1,56 @@
+default.doesnt.match.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] overholder ikke mønsteret [{3}]
+default.invalid.url.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er ikke en gyldig URL
+default.invalid.creditCard.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er ikke et gyldig kredittkortnummer
+default.invalid.email.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er ikke en gyldig epostadresse
+default.invalid.range.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er ikke innenfor intervallet [{3}] til [{4}]
+default.invalid.size.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er ikke innenfor intervallet [{3}] til [{4}]
+default.invalid.max.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] overstiger maksimumsverdien på [{3}]
+default.invalid.min.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er under minimumsverdien på [{3}]
+default.invalid.max.size.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] overstiger maksimumslengden på [{3}]
+default.invalid.min.size.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] er kortere enn minimumslengden på [{3}]
+default.invalid.validator.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] overholder ikke den brukerdefinerte valideringen
+default.not.inlist.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] finnes ikke i listen [{3}]
+default.blank.message=Feltet [{0}] i klassen [{1}] kan ikke være tom
+default.not.equal.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] kan ikke være [{3}]
+default.null.message=Feltet [{0}] i klassen [{1}] kan ikke være null
+default.not.unique.message=Feltet [{0}] i klassen [{1}] med verdien [{2}] må være unik
+
+default.paginate.prev=Forrige
+default.paginate.next=Neste
+default.boolean.true=Ja
+default.boolean.false=Nei
+default.date.format=dd.MM.yyyy HH:mm:ss z
+default.number.format=0
+
+default.created.message={0} {1} opprettet
+default.updated.message={0} {1} oppdatert
+default.deleted.message={0} {1} slettet
+default.not.deleted.message={0} {1} kunne ikke slettes
+default.not.found.message={0} med id {1} ble ikke funnet
+default.optimistic.locking.failure=En annen bruker har oppdatert denne {0} mens du redigerte
+
+default.home.label=Hjem
+default.list.label={0}liste
+default.add.label=Legg til {0}
+default.new.label=Ny {0}
+default.create.label=Opprett {0}
+default.show.label=Vis {0}
+default.edit.label=Endre {0}
+
+default.button.create.label=Opprett
+default.button.edit.label=Endre
+default.button.update.label=Oppdater
+default.button.delete.label=Slett
+default.button.delete.confirm.message=Er du sikker?
+
+# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
+typeMismatch.java.net.URL=Feltet {0} må være en gyldig URL
+typeMismatch.java.net.URI=Feltet {0} må være en gyldig URI
+typeMismatch.java.util.Date=Feltet {0} må være en gyldig dato
+typeMismatch.java.lang.Double=Feltet {0} må være et gyldig tall
+typeMismatch.java.lang.Integer=Feltet {0} må være et gyldig heltall
+typeMismatch.java.lang.Long=Feltet {0} må være et gyldig heltall
+typeMismatch.java.lang.Short=Feltet {0} må være et gyldig heltall
+typeMismatch.java.math.BigDecimal=Feltet {0} må være et gyldig tall
+typeMismatch.java.math.BigInteger=Feltet {0} må være et gyldig heltall
+
diff --git a/grails-app/i18n/messages_nl.properties b/grails-app/i18n/messages_nl.properties
new file mode 100644
index 0000000..cd5cc94
--- /dev/null
+++ b/grails-app/i18n/messages_nl.properties
@@ -0,0 +1,55 @@
+default.doesnt.match.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] komt niet overeen met het vereiste patroon [{3}]
+default.invalid.url.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is geen geldige URL
+default.invalid.creditCard.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is geen geldig credit card nummer
+default.invalid.email.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is geen geldig e-mailadres
+default.invalid.range.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] valt niet in de geldige waardenreeks van [{3}] tot [{4}]
+default.invalid.size.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] valt niet in de geldige grootte van [{3}] tot [{4}]
+default.invalid.max.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] overschrijdt de maximumwaarde [{3}]
+default.invalid.min.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is minder dan de minimumwaarde [{3}]
+default.invalid.max.size.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] overschrijdt de maximumgrootte van [{3}]
+default.invalid.min.size.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is minder dan minimumgrootte van [{3}]
+default.invalid.validator.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] is niet geldig
+default.not.inlist.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] komt niet voor in de lijst [{3}]
+default.blank.message=Attribuut [{0}] van entiteit [{1}] mag niet leeg zijn
+default.not.equal.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] mag niet gelijk zijn aan [{3}]
+default.null.message=Attribuut [{0}] van entiteit [{1}] mag niet leeg zijn
+default.not.unique.message=Attribuut [{0}] van entiteit [{1}] met waarde [{2}] moet uniek zijn
+
+default.paginate.prev=Vorige
+default.paginate.next=Volgende
+default.boolean.true=Ja
+default.boolean.false=Nee
+default.date.format=dd-MM-yyyy HH:mm:ss z
+default.number.format=0
+
+default.created.message={0} {1} ingevoerd
+default.updated.message={0} {1} gewijzigd
+default.deleted.message={0} {1} verwijderd
+default.not.deleted.message={0} {1} kon niet worden verwijderd
+default.not.found.message={0} met id {1} kon niet worden gevonden
+default.optimistic.locking.failure=Een andere gebruiker heeft deze {0} al gewijzigd
+
+default.home.label=Home
+default.list.label={0} Overzicht
+default.add.label=Toevoegen {0}
+default.new.label=Invoeren {0}
+default.create.label=Invoeren {0}
+default.show.label=Details {0}
+default.edit.label=Wijzigen {0}
+
+default.button.create.label=Invoeren
+default.button.edit.label=Wijzigen
+default.button.update.label=Opslaan
+default.button.delete.label=Verwijderen
+default.button.delete.confirm.message=Weet je het zeker?
+
+# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
+typeMismatch.java.net.URL=Attribuut {0} is geen geldige URL
+typeMismatch.java.net.URI=Attribuut {0} is geen geldige URI
+typeMismatch.java.util.Date=Attribuut {0} is geen geldige datum
+typeMismatch.java.lang.Double=Attribuut {0} is geen geldig nummer
+typeMismatch.java.lang.Integer=Attribuut {0} is geen geldig nummer
+typeMismatch.java.lang.Long=Attribuut {0} is geen geldig nummer
+typeMismatch.java.lang.Short=Attribuut {0} is geen geldig nummer
+typeMismatch.java.math.BigDecimal=Attribuut {0} is geen geldig nummer
+typeMismatch.java.math.BigInteger=Attribuut {0} is geen geldig nummer
diff --git a/grails-app/i18n/messages_pl.properties b/grails-app/i18n/messages_pl.properties
new file mode 100644
index 0000000..959296c
--- /dev/null
+++ b/grails-app/i18n/messages_pl.properties
@@ -0,0 +1,59 @@
+#
+# Translated by Matthias Hryniszak - padcom@gmail.com
+#
+
+default.doesnt.match.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie pasuje do wymaganego wzorca [{3}]
+default.invalid.url.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] jest niepoprawnym adresem URL
+default.invalid.creditCard.message=Właściwość [{0}] klasy [{1}] with value [{2}] nie jest poprawnym numerem karty kredytowej
+default.invalid.email.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie jest poprawnym adresem e-mail
+default.invalid.range.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie zawiera się zakładanym zakresie od [{3}] do [{4}]
+default.invalid.size.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie zawiera się w zakładanym zakresie rozmiarów od [{3}] do [{4}]
+default.invalid.max.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] przekracza maksymalną wartość [{3}]
+default.invalid.min.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] jest mniejsza niż minimalna wartość [{3}]
+default.invalid.max.size.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] przekracza maksymalny rozmiar [{3}]
+default.invalid.min.size.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] jest mniejsza niż minimalny rozmiar [{3}]
+default.invalid.validator.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie spełnia założonych niestandardowych warunków
+default.not.inlist.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie zawiera się w liście [{3}]
+default.blank.message=Właściwość [{0}] klasy [{1}] nie może być pusta
+default.not.equal.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] nie może równać się [{3}]
+default.null.message=Właściwość [{0}] klasy [{1}] nie może być null
+default.not.unique.message=Właściwość [{0}] klasy [{1}] o wartości [{2}] musi być unikalna
+
+default.paginate.prev=Poprzedni
+default.paginate.next=Następny
+default.boolean.true=Prawda
+default.boolean.false=Fałsz
+default.date.format=yyyy-MM-dd HH:mm:ss z
+default.number.format=0
+
+default.created.message=Utworzono {0} {1}
+default.updated.message=Zaktualizowano {0} {1}
+default.deleted.message=Usunięto {0} {1}
+default.not.deleted.message={0} {1} nie mógł zostać usunięty
+default.not.found.message=Nie znaleziono {0} o id {1}
+default.optimistic.locking.failure=Inny użytkownik zaktualizował ten obiekt {0} w trakcie twoich zmian
+
+default.home.label=Strona domowa
+default.list.label=Lista {0}
+default.add.label=Dodaj {0}
+default.new.label=Utwórz {0}
+default.create.label=Utwórz {0}
+default.show.label=Pokaż {0}
+default.edit.label=Edytuj {0}
+
+default.button.create.label=Utwórz
+default.button.edit.label=Edytuj
+default.button.update.label=Zaktualizuj
+default.button.delete.label=Usuń
+default.button.delete.confirm.message=Czy jesteś pewien?
+
+# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
+typeMismatch.java.net.URL=Właściwość {0} musi być poprawnym adresem URL
+typeMismatch.java.net.URI=Właściwość {0} musi być poprawnym adresem URI
+typeMismatch.java.util.Date=Właściwość {0} musi być poprawną datą
+typeMismatch.java.lang.Double=Właściwość {0} musi być poprawnyą liczbą
+typeMismatch.java.lang.Integer=Właściwość {0} musi być poprawnyą liczbą
+typeMismatch.java.lang.Long=Właściwość {0} musi być poprawnyą liczbą
+typeMismatch.java.lang.Short=Właściwość {0} musi być poprawnyą liczbą
+typeMismatch.java.math.BigDecimal=Właściwość {0} musi być poprawnyą liczbą
+typeMismatch.java.math.BigInteger=Właściwość {0} musi być poprawnyą liczbą
diff --git a/grails-app/i18n/messages_pt_BR.properties b/grails-app/i18n/messages_pt_BR.properties
new file mode 100644
index 0000000..0c368f2
--- /dev/null
+++ b/grails-app/i18n/messages_pt_BR.properties
@@ -0,0 +1,59 @@
+#
+# Translated by Lucas Teixeira - lucastex@gmail.com
+#
+
+default.doesnt.match.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atende ao padrão definido [{3}]
+default.invalid.url.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é uma URL válida
+default.invalid.creditCard.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um número válido de cartão de crédito
+default.invalid.email.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um endereço de email válido.
+default.invalid.range.message=O campo [{0}] da classe [{1}] com o valor [{2}] não está entre a faixa de valores válida de [{3}] até [{4}]
+default.invalid.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] não está na faixa de tamanho válida de [{3}] até [{4}]
+default.invalid.max.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapass o valor máximo [{3}]
+default.invalid.min.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atinge o valor mínimo [{3}]
+default.invalid.max.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapassa o tamanho máximo de [{3}]
+default.invalid.min.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atinge o tamanho mínimo de [{3}]
+default.invalid.validator.message=O campo [{0}] da classe [{1}] com o valor [{2}] não passou na validação
+default.not.inlist.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um valor dentre os permitidos na lista [{3}]
+default.blank.message=O campo [{0}] da classe [{1}] não pode ficar em branco
+default.not.equal.message=O campo [{0}] da classe [{1}] com o valor [{2}] não pode ser igual a [{3}]
+default.null.message=O campo [{0}] da classe [{1}] não pode ser vazia
+default.not.unique.message=O campo [{0}] da classe [{1}] com o valor [{2}] deve ser único
+
+default.paginate.prev=Anterior
+default.paginate.next=Próximo
+default.boolean.true=Sim
+default.boolean.false=Não
+default.date.format=dd/MM/yyyy HH:mm:ss z
+default.number.format=0
+
+default.created.message={0} {1} criado
+default.updated.message={0} {1} atualizado
+default.deleted.message={0} {1} removido
+default.not.deleted.message={0} {1} não pode ser removido
+default.not.found.message={0} não foi encontrado com id {1}
+default.optimistic.locking.failure=Outro usuário atualizou este [{0}] enquanto você tentou salvá-lo
+
+default.home.label=Principal
+default.list.label={0} Listagem
+default.add.label=Adicionar {0}
+default.new.label=Novo {0}
+default.create.label=Criar {0}
+default.show.label=Ver {0}
+default.edit.label=Editar {0}
+
+default.button.create.label=Criar
+default.button.edit.label=Editar
+default.button.update.label=Alterar
+default.button.delete.label=Remover
+default.button.delete.confirm.message=Tem certeza?
+
+# Mensagens de erro em atribuição de valores. Use "typeMismatch.$className.$propertyName" para customizar (eg typeMismatch.Book.author)
+typeMismatch.java.net.URL=O campo {0} deve ser uma URL válida.
+typeMismatch.java.net.URI=O campo {0} deve ser uma URI válida.
+typeMismatch.java.util.Date=O campo {0} deve ser uma data válida
+typeMismatch.java.lang.Double=O campo {0} deve ser um número válido.
+typeMismatch.java.lang.Integer=O campo {0} deve ser um número válido.
+typeMismatch.java.lang.Long=O campo {0} deve ser um número válido.
+typeMismatch.java.lang.Short=O campo {0} deve ser um número válido.
+typeMismatch.java.math.BigDecimal=O campo {0} deve ser um número válido.
+typeMismatch.java.math.BigInteger=O campo {0} deve ser um número válido.
\ No newline at end of file
diff --git a/grails-app/i18n/messages_pt_PT.properties b/grails-app/i18n/messages_pt_PT.properties
new file mode 100644
index 0000000..a386070
--- /dev/null
+++ b/grails-app/i18n/messages_pt_PT.properties
@@ -0,0 +1,34 @@
+#
+# translation by miguel.ping@gmail.com, based on pt_BR translation by Lucas Teixeira - lucastex@gmail.com
+#
+
+default.doesnt.match.message=O campo [{0}] da classe [{1}] com o valor [{2}] não corresponde ao padrão definido [{3}]
+default.invalid.url.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um URL válido
+default.invalid.creditCard.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um número válido de cartão de crédito
+default.invalid.email.message=O campo [{0}] da classe [{1}] com o valor [{2}] não é um endereço de email válido.
+default.invalid.range.message=O campo [{0}] da classe [{1}] com o valor [{2}] não está dentro dos limites de valores válidos de [{3}] a [{4}]
+default.invalid.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] está fora dos limites de tamanho válido de [{3}] a [{4}]
+default.invalid.max.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapassa o valor máximo [{3}]
+default.invalid.min.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atinge o valor mínimo [{3}]
+default.invalid.max.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] ultrapassa o tamanho máximo de [{3}]
+default.invalid.min.size.message=O campo [{0}] da classe [{1}] com o valor [{2}] não atinge o tamanho mínimo de [{3}]
+default.invalid.validator.message=O campo [{0}] da classe [{1}] com o valor [{2}] não passou na validação
+default.not.inlist.message=O campo [{0}] da classe [{1}] com o valor [{2}] não se encontra nos valores permitidos da lista [{3}]
+default.blank.message=O campo [{0}] da classe [{1}] não pode ser vazio
+default.not.equal.message=O campo [{0}] da classe [{1}] com o valor [{2}] não pode ser igual a [{3}]
+default.null.message=O campo [{0}] da classe [{1}] não pode ser vazio
+default.not.unique.message=O campo [{0}] da classe [{1}] com o valor [{2}] deve ser único
+
+default.paginate.prev=Anterior
+default.paginate.next=Próximo
+
+# Mensagens de erro em atribuição de valores. Use "typeMismatch.$className.$propertyName" para personalizar(eg typeMismatch.Book.author)
+typeMismatch.java.net.URL=O campo {0} deve ser um URL válido.
+typeMismatch.java.net.URI=O campo {0} deve ser um URI válido.
+typeMismatch.java.util.Date=O campo {0} deve ser uma data válida
+typeMismatch.java.lang.Double=O campo {0} deve ser um número válido.
+typeMismatch.java.lang.Integer=O campo {0} deve ser um número válido.
+typeMismatch.java.lang.Long=O campo {0} deve ser um número valido.
+typeMismatch.java.lang.Short=O campo {0} deve ser um número válido.
+typeMismatch.java.math.BigDecimal=O campo {0} deve ser um número válido.
+typeMismatch.java.math.BigInteger=O campo {0} deve ser um número válido.
diff --git a/grails-app/i18n/messages_ru.properties b/grails-app/i18n/messages_ru.properties
new file mode 100644
index 0000000..53a4bdc
--- /dev/null
+++ b/grails-app/i18n/messages_ru.properties
@@ -0,0 +1,31 @@
+default.doesnt.match.message=Значение [{2}] поля [{0}] класса [{1}] не соответствует образцу [{3}]
+default.invalid.url.message=Значение [{2}] поля [{0}] класса [{1}] не является допустимым URL-адресом
+default.invalid.creditCard.message=Значение [{2}] поля [{0}] класса [{1}] не является допустимым номером кредитной карты
+default.invalid.email.message=Значение [{2}] поля [{0}] класса [{1}] не является допустимым e-mail адресом
+default.invalid.range.message=Значение [{2}] поля [{0}] класса [{1}] не попадает в допустимый интервал от [{3}] до [{4}]
+default.invalid.size.message=Размер поля [{0}] класса [{1}] (значение: [{2}]) не попадает в допустимый интервал от [{3}] до [{4}]
+default.invalid.max.message=Значение [{2}] поля [{0}] класса [{1}] больше чем максимально допустимое значение [{3}]
+default.invalid.min.message=Значение [{2}] поля [{0}] класса [{1}] меньше чем минимально допустимое значение [{3}]
+default.invalid.max.size.message=Размер поля [{0}] класса [{1}] (значение: [{2}]) больше чем максимально допустимый размер [{3}]
+default.invalid.min.size.message=Размер поля [{0}] класса [{1}] (значение: [{2}]) меньше чем минимально допустимый размер [{3}]
+default.invalid.validator.message=Значение [{2}] поля [{0}] класса [{1}] не допустимо
+default.not.inlist.message=Значение [{2}] поля [{0}] класса [{1}] не попадает в список допустимых значений [{3}]
+default.blank.message=Поле [{0}] класса [{1}] не может быть пустым
+default.not.equal.message=Значение [{2}] поля [{0}] класса [{1}] не может быть равно [{3}]
+default.null.message=Поле [{0}] класса [{1}] не может иметь значение null
+default.not.unique.message=Значение [{2}] поля [{0}] класса [{1}] должно быть уникальным
+
+default.paginate.prev=Предыдушая страница
+default.paginate.next=Следующая страница
+
+# Ошибки при присвоении данных. Для точной настройки для полей классов используйте
+# формат "typeMismatch.$className.$propertyName" (например, typeMismatch.Book.author)
+typeMismatch.java.net.URL=Значение поля {0} не является допустимым URL
+typeMismatch.java.net.URI=Значение поля {0} не является допустимым URI
+typeMismatch.java.util.Date=Значение поля {0} не является допустимой датой
+typeMismatch.java.lang.Double=Значение поля {0} не является допустимым числом
+typeMismatch.java.lang.Integer=Значение поля {0} не является допустимым числом
+typeMismatch.java.lang.Long=Значение поля {0} не является допустимым числом
+typeMismatch.java.lang.Short=Значение поля {0} не является допустимым числом
+typeMismatch.java.math.BigDecimal=Значение поля {0} не является допустимым числом
+typeMismatch.java.math.BigInteger=Значение поля {0} не является допустимым числом
diff --git a/grails-app/i18n/messages_sv.properties b/grails-app/i18n/messages_sv.properties
new file mode 100644
index 0000000..61899d7
--- /dev/null
+++ b/grails-app/i18n/messages_sv.properties
@@ -0,0 +1,55 @@
+default.doesnt.match.message=Attributet [{0}] för klassen [{1}] med värde [{2}] matchar inte mot uttrycket [{3}]
+default.invalid.url.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte en giltig URL
+default.invalid.creditCard.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte ett giltigt kreditkortsnummer
+default.invalid.email.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte en giltig e-postadress
+default.invalid.range.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte inom intervallet [{3}] till [{4}]
+default.invalid.size.message=Attributet [{0}] för klassen [{1}] med värde [{2}] har en storlek som inte är inom [{3}] till [{4}]
+default.invalid.max.message=Attributet [{0}] för klassen [{1}] med värde [{2}] överskrider maxvärdet [{3}]
+default.invalid.min.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är mindre än minimivärdet [{3}]
+default.invalid.max.size.message=Attributet [{0}] för klassen [{1}] med värde [{2}] överskrider maxstorleken [{3}]
+default.invalid.min.size.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är mindre än minimistorleken [{3}]
+default.invalid.validator.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte giltigt enligt anpassad regel
+default.not.inlist.message=Attributet [{0}] för klassen [{1}] med värde [{2}] är inte giltigt, måste vara ett av [{3}]
+default.blank.message=Attributet [{0}] för klassen [{1}] får inte vara tomt
+default.not.equal.message=Attributet [{0}] för klassen [{1}] med värde [{2}] får inte vara lika med [{3}]
+default.null.message=Attributet [{0}] för klassen [{1}] får inte vara tomt
+default.not.unique.message=Attributet [{0}] för klassen [{1}] med värde [{2}] måste vara unikt
+
+default.paginate.prev=Föregående
+default.paginate.next=Nästa
+default.boolean.true=Sant
+default.boolean.false=Falskt
+default.date.format=yyyy-MM-dd HH:mm:ss z
+default.number.format=0
+
+default.created.message={0} {1} skapades
+default.updated.message={0} {1} uppdaterades
+default.deleted.message={0} {1} borttagen
+default.not.deleted.message={0} {1} kunde inte tas bort
+default.not.found.message={0} med id {1} kunde inte hittas
+default.optimistic.locking.failure=En annan användare har uppdaterat det här {0} objektet medan du redigerade det
+
+default.home.label=Hem
+default.list.label= {0} - Lista
+default.add.label=Lägg till {0}
+default.new.label=Skapa {0}
+default.create.label=Skapa {0}
+default.show.label=Visa {0}
+default.edit.label=Ändra {0}
+
+default.button.create.label=Skapa
+default.button.edit.label=Ändra
+default.button.update.label=Uppdatera
+default.button.delete.label=Ta bort
+default.button.delete.confirm.message=Är du säker?
+
+# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
+typeMismatch.java.net.URL=Värdet för {0} måste vara en giltig URL
+typeMismatch.java.net.URI=Värdet för {0} måste vara en giltig URI
+typeMismatch.java.util.Date=Värdet {0} måste vara ett giltigt datum
+typeMismatch.java.lang.Double=Värdet {0} måste vara ett giltigt nummer
+typeMismatch.java.lang.Integer=Värdet {0} måste vara ett giltigt heltal
+typeMismatch.java.lang.Long=Värdet {0} måste vara ett giltigt heltal
+typeMismatch.java.lang.Short=Värdet {0} måste vara ett giltigt heltal
+typeMismatch.java.math.BigDecimal=Värdet {0} måste vara ett giltigt nummer
+typeMismatch.java.math.BigInteger=Värdet {0} måste vara ett giltigt heltal
\ No newline at end of file
diff --git a/grails-app/i18n/messages_th.properties b/grails-app/i18n/messages_th.properties
new file mode 100644
index 0000000..fd0dbb6
--- /dev/null
+++ b/grails-app/i18n/messages_th.properties
@@ -0,0 +1,55 @@
+default.doesnt.match.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ถูกต้องตามรูปแบบที่กำหนดไว้ใน [{3}]
+default.invalid.url.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ถูกต้องตามรูปแบบ URL
+default.invalid.creditCard.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ถูกต้องตามรูปแบบหมายเลขบัตรเครดิต
+default.invalid.email.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ถูกต้องตามรูปแบบอีเมล์
+default.invalid.range.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ได้มีค่าที่ถูกต้องในช่วงจาก [{3}] ถึง [{4}]
+default.invalid.size.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ได้มีขนาดที่ถูกต้องในช่วงจาก [{3}] ถึง [{4}]
+default.invalid.max.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] มีค่าเกิดกว่าค่ามากสุด [{3}]
+default.invalid.min.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] มีค่าน้อยกว่าค่าต่ำสุด [{3}]
+default.invalid.max.size.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] มีขนาดเกินกว่าขนาดมากสุดของ [{3}]
+default.invalid.min.size.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] มีขนาดต่ำกว่าขนาดต่ำสุดของ [{3}]
+default.invalid.validator.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ผ่านการทวนสอบค่าที่ตั้งขึ้น
+default.not.inlist.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่ได้อยู่ในรายการต่อไปนี้ [{3}]
+default.blank.message=คุณสมบัติ [{0}] ของคลาส [{1}] ไม่สามารถเป็นค่าว่างได้
+default.not.equal.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] ไม่สามารถเท่ากับ [{3}] ได้
+default.null.message=คุณสมบัติ [{0}] ของคลาส [{1}] ไม่สามารถเป็น null ได้
+default.not.unique.message=คุณสมบัติ [{0}] ของคลาส [{1}] ซึ่งมีค่าเป็น [{2}] จะต้องไม่ซ้ำ (unique)
+
+default.paginate.prev=ก่อนหน้า
+default.paginate.next=ถัดไป
+default.boolean.true=จริง
+default.boolean.false=เท็จ
+default.date.format=dd-MM-yyyy HH:mm:ss z
+default.number.format=0
+
+default.created.message=สร้าง {0} {1} เรียบร้อยแล้ว
+default.updated.message=ปรับปรุง {0} {1} เรียบร้อยแล้ว
+default.deleted.message=ลบ {0} {1} เรียบร้อยแล้ว
+default.not.deleted.message=ไม่สามารถลบ {0} {1}
+default.not.found.message=ไม่พบ {0} ด้วย id {1} นี้
+default.optimistic.locking.failure=มีผู้ใช้ท่านอื่นปรับปรุง {0} ขณะที่คุณกำลังแก้ไขข้อมูลอยู่
+
+default.home.label=หน้าแรก
+default.list.label=รายการ {0}
+default.add.label=เพิ่ม {0}
+default.new.label=สร้าง {0} ใหม่
+default.create.label=สร้าง {0}
+default.show.label=แสดง {0}
+default.edit.label=แก้ไข {0}
+
+default.button.create.label=สร้าง
+default.button.edit.label=แก้ไข
+default.button.update.label=ปรับปรุง
+default.button.delete.label=ลบ
+default.button.delete.confirm.message=คุณแน่ใจหรือไม่ ?
+
+# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
+typeMismatch.java.net.URL=คุณสมบัติ '{0}' จะต้องเป็นค่า URL ที่ถูกต้อง
+typeMismatch.java.net.URI=คุณสมบัติ '{0}' จะต้องเป็นค่า URI ที่ถูกต้อง
+typeMismatch.java.util.Date=คุณสมบัติ '{0}' จะต้องมีค่าเป็นวันที่
+typeMismatch.java.lang.Double=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท Double
+typeMismatch.java.lang.Integer=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท Integer
+typeMismatch.java.lang.Long=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท Long
+typeMismatch.java.lang.Short=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท Short
+typeMismatch.java.math.BigDecimal=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท BigDecimal
+typeMismatch.java.math.BigInteger=คุณสมบัติ '{0}' จะต้องมีค่าเป็นจำนวนประเภท BigInteger
diff --git a/grails-app/i18n/messages_zh_CN.properties b/grails-app/i18n/messages_zh_CN.properties
new file mode 100644
index 0000000..b89bc93
--- /dev/null
+++ b/grails-app/i18n/messages_zh_CN.properties
@@ -0,0 +1,18 @@
+default.blank.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u4E0D\u80FD\u4E3A\u7A7A
+default.doesnt.match.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0E\u5B9A\u4E49\u7684\u6A21\u5F0F [{3}]\u4E0D\u5339\u914D
+default.invalid.creditCard.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u4FE1\u7528\u5361\u53F7
+default.invalid.email.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u4E2A\u5408\u6CD5\u7684\u7535\u5B50\u90AE\u4EF6\u5730\u5740
+default.invalid.max.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5927\u503C [{3}]\u8FD8\u5927
+default.invalid.max.size.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u7684\u5927\u5C0F\u6BD4\u6700\u5927\u503C [{3}]\u8FD8\u5927
+default.invalid.min.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5C0F\u503C [{3}]\u8FD8\u5C0F
+default.invalid.min.size.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u7684\u5927\u5C0F\u6BD4\u6700\u5C0F\u503C [{3}]\u8FD8\u5C0F
+default.invalid.range.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u5728\u5408\u6CD5\u7684\u8303\u56F4\u5185( [{3}] \uFF5E [{4}] )
+default.invalid.size.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u7684\u5927\u5C0F\u4E0D\u5728\u5408\u6CD5\u7684\u8303\u56F4\u5185( [{3}] \uFF5E [{4}] )
+default.invalid.url.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u4E2A\u5408\u6CD5\u7684URL
+default.invalid.validator.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u672A\u80FD\u901A\u8FC7\u81EA\u5B9A\u4E49\u7684\u9A8C\u8BC1
+default.not.equal.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0E[{3}]\u4E0D\u76F8\u7B49
+default.not.inlist.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u5728\u5217\u8868\u7684\u53D6\u503C\u8303\u56F4\u5185
+default.not.unique.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u5FC5\u987B\u662F\u552F\u4E00\u7684
+default.null.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u4E0D\u80FD\u4E3Anull
+default.paginate.next=\u4E0B\u9875
+default.paginate.prev=\u4E0A\u9875
diff --git a/grails-app/views/error.gsp b/grails-app/views/error.gsp
new file mode 100644
index 0000000..95e11ed
--- /dev/null
+++ b/grails-app/views/error.gsp
@@ -0,0 +1,18 @@
+
+
+
Tag Libraries: ${grailsApplication.tagLibClasses.size()}
+
+
Installed Plugins
+
+
+
${plugin.name} - ${plugin.version}
+
+
+
+
+
Welcome to Grails
+
Congratulations, you have successfully started your first Grails application! At the moment
+ this is the default page, feel free to modify it to either redirect to a controller or display whatever
+ content you may choose. Below is a list of controllers that are currently deployed in this application,
+ click on each to execute its default action:
+
+
diff --git a/test/cucumber/CucumberGebSupport.gdsl b/test/cucumber/CucumberGebSupport.gdsl
new file mode 100644
index 0000000..d5ad9fd
--- /dev/null
+++ b/test/cucumber/CucumberGebSupport.gdsl
@@ -0,0 +1,25 @@
+/**
+ * Enables code completion for Geb inside Cucumber step implementations.
+ */
+def forwardedMethods = ["go", "to", "via", "at",
+ "waitFor",
+ "withAlert", "withNoAlert", "withConfirm", "withNoConfirm",
+ "download", "downloadStream", "downloadText", "downloadBytes", "downloadContent",
+ "report", "reportGroup", "cleanReportGroupDir"]
+
+def scriptContext = context(filetypes: ['.groovy'], pathRegexp: ".*/test/cucumber/.*", scope: closureScope())
+contributor(scriptContext) {
+ property name: 'browser', type: 'geb.Browser'
+
+ def methods = findClass('geb.Browser').getMethods()
+
+ methods.findAll { it.name in forwardedMethods }.each { def browserMethod ->
+
+ def params = [:]
+ for (def param : browserMethod.getParameterList().getParameters()) {
+ params.put(param.name.toLowerCase(), param.type.canonicalText)
+ }
+
+ method name: browserMethod.name, type: browserMethod.returnType.canonicalText, params: params
+ }
+}
\ No newline at end of file
diff --git a/test/cucumber/steps/.gitkeep b/test/cucumber/steps/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/test/cucumber/support/env.groovy b/test/cucumber/support/env.groovy
new file mode 100644
index 0000000..d850bb9
--- /dev/null
+++ b/test/cucumber/support/env.groovy
@@ -0,0 +1,21 @@
+package support
+
+import geb.Browser
+import geb.binding.BindingUpdater
+import org.codehaus.groovy.grails.test.support.GrailsTestRequestEnvironmentInterceptor
+
+this.metaClass.mixin(cucumber.api.groovy.Hooks)
+
+Before() {
+ bindingUpdater = new BindingUpdater(binding, new Browser())
+ bindingUpdater.initialize()
+
+ scenarioInterceptor = new GrailsTestRequestEnvironmentInterceptor(appCtx)
+ scenarioInterceptor.init()
+}
+
+After() {
+ scenarioInterceptor.destroy()
+
+ bindingUpdater.remove()
+}
\ No newline at end of file
diff --git a/test/functional/GebConfig.groovy b/test/functional/GebConfig.groovy
new file mode 100644
index 0000000..7c25cf3
--- /dev/null
+++ b/test/functional/GebConfig.groovy
@@ -0,0 +1,21 @@
+import org.openqa.selenium.chrome.ChromeDriver
+import org.openqa.selenium.firefox.FirefoxDriver
+
+// Favor não modificar esse arquivo.
+environments {
+ chrome {
+ if (!System.getProperty("webdriver.chrome.driver")) {
+ def osPath = System.getProperty("os.name").toLowerCase().split(" ").first()
+
+ def webDriver = new File("chromedrivers", osPath).listFiles({ File dir, String name -> !dir.hidden } as FilenameFilter).first()
+
+ System.setProperty("webdriver.chrome.driver", webDriver.getAbsolutePath())
+ }
+
+ driver = { new ChromeDriver() }
+ }
+
+ firefox {
+ driver = { new FirefoxDriver() }
+ }
+}
\ No newline at end of file
diff --git a/test/functional/pages/.gitkeep b/test/functional/pages/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/test/functional/steps/InternationalizationHelper.groovy b/test/functional/steps/InternationalizationHelper.groovy
new file mode 100644
index 0000000..015e5cd
--- /dev/null
+++ b/test/functional/steps/InternationalizationHelper.groovy
@@ -0,0 +1,16 @@
+package steps
+
+import grails.util.Holders
+import org.springframework.context.i18n.LocaleContextHolder
+
+@Singleton
+public class InternationalizationHelper {
+ def messageSource = Holders.grailsApplication.mainContext.getBean('messageSource');
+
+ public String getMessage(String key, Object[] args = null)
+ {
+ String message = messageSource.getMessage(key, args, LocaleContextHolder.getLocale());
+
+ return message
+ }
+}
\ No newline at end of file
diff --git a/web-app/WEB-INF/applicationContext.xml b/web-app/WEB-INF/applicationContext.xml
new file mode 100644
index 0000000..130e70d
--- /dev/null
+++ b/web-app/WEB-INF/applicationContext.xml
@@ -0,0 +1,31 @@
+
+
+
+
+ Grails application factory bean
+
+
+
+
+ A bean that manages Grails plugins
+
+
+
+
+
+
+
+
+
+
+
+
+
+ utf-8
+
+
+
+
+
\ No newline at end of file
diff --git a/web-app/WEB-INF/sitemesh.xml b/web-app/WEB-INF/sitemesh.xml
new file mode 100644
index 0000000..72399ce
--- /dev/null
+++ b/web-app/WEB-INF/sitemesh.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web-app/WEB-INF/tld/c.tld b/web-app/WEB-INF/tld/c.tld
new file mode 100644
index 0000000..5e18236
--- /dev/null
+++ b/web-app/WEB-INF/tld/c.tld
@@ -0,0 +1,572 @@
+
+
+
+
+ JSTL 1.2 core library
+ JSTL core
+ 1.2
+ c
+ http://java.sun.com/jsp/jstl/core
+
+
+
+ Provides core validation features for JSTL tags.
+
+
+ org.apache.taglibs.standard.tlv.JstlCoreTLV
+
+
+
+
+
+ Catches any Throwable that occurs in its body and optionally
+ exposes it.
+
+ catch
+ org.apache.taglibs.standard.tag.common.core.CatchTag
+ JSP
+
+
+Name of the exported scoped variable for the
+exception thrown from a nested action. The type of the
+scoped variable is the type of the exception thrown.
+
+ var
+ false
+ false
+
+
+
+
+
+ Simple conditional tag that establishes a context for
+ mutually exclusive conditional operations, marked by
+ <when> and <otherwise>
+
+ choose
+ org.apache.taglibs.standard.tag.common.core.ChooseTag
+ JSP
+
+
+
+
+ Simple conditional tag, which evalutes its body if the
+ supplied condition is true and optionally exposes a Boolean
+ scripting variable representing the evaluation of this condition
+
+ if
+ org.apache.taglibs.standard.tag.rt.core.IfTag
+ JSP
+
+
+The test condition that determines whether or
+not the body content should be processed.
+
+ test
+ true
+ true
+ boolean
+
+
+
+Name of the exported scoped variable for the
+resulting value of the test condition. The type
+of the scoped variable is Boolean.
+
+ var
+ false
+ false
+
+
+
+Scope for var.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Retrieves an absolute or relative URL and exposes its contents
+ to either the page, a String in 'var', or a Reader in 'varReader'.
+
+ import
+ org.apache.taglibs.standard.tag.rt.core.ImportTag
+ org.apache.taglibs.standard.tei.ImportTEI
+ JSP
+
+
+The URL of the resource to import.
+
+ url
+ true
+ true
+
+
+
+Name of the exported scoped variable for the
+resource's content. The type of the scoped
+variable is String.
+
+ var
+ false
+ false
+
+
+
+Scope for var.
+
+ scope
+ false
+ false
+
+
+
+Name of the exported scoped variable for the
+resource's content. The type of the scoped
+variable is Reader.
+
+ varReader
+ false
+ false
+
+
+
+Name of the context when accessing a relative
+URL resource that belongs to a foreign
+context.
+
+ context
+ false
+ true
+
+
+
+Character encoding of the content at the input
+resource.
+
+ charEncoding
+ false
+ true
+
+
+
+
+
+ The basic iteration tag, accepting many different
+ collection types and supporting subsetting and other
+ functionality
+
+ forEach
+ org.apache.taglibs.standard.tag.rt.core.ForEachTag
+ org.apache.taglibs.standard.tei.ForEachTEI
+ JSP
+
+
+Collection of items to iterate over.
+
+ items
+ false
+ true
+ java.lang.Object
+
+ java.lang.Object
+
+
+
+
+If items specified:
+Iteration begins at the item located at the
+specified index. First item of the collection has
+index 0.
+If items not specified:
+Iteration begins with index set at the value
+specified.
+
+ begin
+ false
+ true
+ int
+
+
+
+If items specified:
+Iteration ends at the item located at the
+specified index (inclusive).
+If items not specified:
+Iteration ends when index reaches the value
+specified.
+
+ end
+ false
+ true
+ int
+
+
+
+Iteration will only process every step items of
+the collection, starting with the first one.
+
+ step
+ false
+ true
+ int
+
+
+
+Name of the exported scoped variable for the
+current item of the iteration. This scoped
+variable has nested visibility. Its type depends
+on the object of the underlying collection.
+
+ var
+ false
+ false
+
+
+
+Name of the exported scoped variable for the
+status of the iteration. Object exported is of type
+javax.servlet.jsp.jstl.core.LoopTagStatus. This scoped variable has nested
+visibility.
+
+ varStatus
+ false
+ false
+
+
+
+
+
+ Iterates over tokens, separated by the supplied delimeters
+
+ forTokens
+ org.apache.taglibs.standard.tag.rt.core.ForTokensTag
+ JSP
+
+
+String of tokens to iterate over.
+
+ items
+ true
+ true
+ java.lang.String
+
+ java.lang.String
+
+
+
+
+The set of delimiters (the characters that
+separate the tokens in the string).
+
+ delims
+ true
+ true
+ java.lang.String
+
+
+
+Iteration begins at the token located at the
+specified index. First token has index 0.
+
+ begin
+ false
+ true
+ int
+
+
+
+Iteration ends at the token located at the
+specified index (inclusive).
+
+ end
+ false
+ true
+ int
+
+
+
+Iteration will only process every step tokens
+of the string, starting with the first one.
+
+ step
+ false
+ true
+ int
+
+
+
+Name of the exported scoped variable for the
+current item of the iteration. This scoped
+variable has nested visibility.
+
+ var
+ false
+ false
+
+
+
+Name of the exported scoped variable for the
+status of the iteration. Object exported is of
+type
+javax.servlet.jsp.jstl.core.LoopTag
+Status. This scoped variable has nested
+visibility.
+
+ varStatus
+ false
+ false
+
+
+
+
+
+ Like <%= ... >, but for expressions.
+
+ out
+ org.apache.taglibs.standard.tag.rt.core.OutTag
+ JSP
+
+
+Expression to be evaluated.
+
+ value
+ true
+ true
+
+
+
+Default value if the resulting value is null.
+
+ default
+ false
+ true
+
+
+
+Determines whether characters <,>,&,'," in the
+resulting string should be converted to their
+corresponding character entity codes. Default value is
+true.
+
+ escapeXml
+ false
+ true
+
+
+
+
+
+
+ Subtag of <choose> that follows <when> tags
+ and runs only if all of the prior conditions evaluated to
+ 'false'
+
+ otherwise
+ org.apache.taglibs.standard.tag.common.core.OtherwiseTag
+ JSP
+
+
+
+
+ Adds a parameter to a containing 'import' tag's URL.
+
+ param
+ org.apache.taglibs.standard.tag.rt.core.ParamTag
+ JSP
+
+
+Name of the query string parameter.
+
+ name
+ true
+ true
+
+
+
+Value of the parameter.
+
+ value
+ false
+ true
+
+
+
+
+
+ Redirects to a new URL.
+
+ redirect
+ org.apache.taglibs.standard.tag.rt.core.RedirectTag
+ JSP
+
+
+The URL of the resource to redirect to.
+
+ url
+ false
+ true
+
+
+
+Name of the context when redirecting to a relative URL
+resource that belongs to a foreign context.
+
+ context
+ false
+ true
+
+
+
+
+
+ Removes a scoped variable (from a particular scope, if specified).
+
+ remove
+ org.apache.taglibs.standard.tag.common.core.RemoveTag
+ empty
+
+
+Name of the scoped variable to be removed.
+
+ var
+ true
+ false
+
+
+
+Scope for var.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Sets the result of an expression evaluation in a 'scope'
+
+ set
+ org.apache.taglibs.standard.tag.rt.core.SetTag
+ JSP
+
+
+Name of the exported scoped variable to hold the value
+specified in the action. The type of the scoped variable is
+whatever type the value expression evaluates to.
+
+ var
+ false
+ false
+
+
+
+Expression to be evaluated.
+
+ value
+ false
+ true
+
+ java.lang.Object
+
+
+
+
+Target object whose property will be set. Must evaluate to
+a JavaBeans object with setter property property, or to a
+java.util.Map object.
+
+ target
+ false
+ true
+
+
+
+Name of the property to be set in the target object.
+
+ property
+ false
+ true
+
+
+
+Scope for var.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Creates a URL with optional query parameters.
+
+ url
+ org.apache.taglibs.standard.tag.rt.core.UrlTag
+ JSP
+
+
+Name of the exported scoped variable for the
+processed url. The type of the scoped variable is
+String.
+
+ var
+ false
+ false
+
+
+
+Scope for var.
+
+ scope
+ false
+ false
+
+
+
+URL to be processed.
+
+ value
+ false
+ true
+
+
+
+Name of the context when specifying a relative URL
+resource that belongs to a foreign context.
+
+ context
+ false
+ true
+
+
+
+
+
+ Subtag of <choose> that includes its body if its
+ condition evalutes to 'true'
+
+ when
+ org.apache.taglibs.standard.tag.rt.core.WhenTag
+ JSP
+
+
+The test condition that determines whether or not the
+body content should be processed.
+
+ test
+ true
+ true
+ boolean
+
+
+
+
diff --git a/web-app/WEB-INF/tld/fmt.tld b/web-app/WEB-INF/tld/fmt.tld
new file mode 100644
index 0000000..2ae4776
--- /dev/null
+++ b/web-app/WEB-INF/tld/fmt.tld
@@ -0,0 +1,671 @@
+
+
+
+
+ JSTL 1.2 i18n-capable formatting library
+ JSTL fmt
+ 1.2
+ fmt
+ http://java.sun.com/jsp/jstl/fmt
+
+
+
+ Provides core validation features for JSTL tags.
+
+
+ org.apache.taglibs.standard.tlv.JstlFmtTLV
+
+
+
+
+
+ Sets the request character encoding
+
+ requestEncoding
+ org.apache.taglibs.standard.tag.rt.fmt.RequestEncodingTag
+ empty
+
+
+Name of character encoding to be applied when
+decoding request parameters.
+
+ value
+ false
+ true
+
+
+
+
+
+ Stores the given locale in the locale configuration variable
+
+ setLocale
+ org.apache.taglibs.standard.tag.rt.fmt.SetLocaleTag
+ empty
+
+
+A String value is interpreted as the
+printable representation of a locale, which
+must contain a two-letter (lower-case)
+language code (as defined by ISO-639),
+and may contain a two-letter (upper-case)
+country code (as defined by ISO-3166).
+Language and country codes must be
+separated by hyphen (-) or underscore
+(_).
+
+ value
+ true
+ true
+
+
+
+Vendor- or browser-specific variant.
+See the java.util.Locale javadocs for
+more information on variants.
+
+ variant
+ false
+ true
+
+
+
+Scope of the locale configuration variable.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Specifies the time zone for any time formatting or parsing actions
+ nested in its body
+
+ timeZone
+ org.apache.taglibs.standard.tag.rt.fmt.TimeZoneTag
+ JSP
+
+
+The time zone. A String value is interpreted as
+a time zone ID. This may be one of the time zone
+IDs supported by the Java platform (such as
+"America/Los_Angeles") or a custom time zone
+ID (such as "GMT-8"). See
+java.util.TimeZone for more information on
+supported time zone formats.
+
+ value
+ true
+ true
+
+
+
+
+
+ Stores the given time zone in the time zone configuration variable
+
+ setTimeZone
+ org.apache.taglibs.standard.tag.rt.fmt.SetTimeZoneTag
+ empty
+
+
+The time zone. A String value is interpreted as
+a time zone ID. This may be one of the time zone
+IDs supported by the Java platform (such as
+"America/Los_Angeles") or a custom time zone
+ID (such as "GMT-8"). See java.util.TimeZone for
+more information on supported time zone
+formats.
+
+ value
+ true
+ true
+
+
+
+Name of the exported scoped variable which
+stores the time zone of type
+java.util.TimeZone.
+
+ var
+ false
+ false
+
+
+
+Scope of var or the time zone configuration
+variable.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Loads a resource bundle to be used by its tag body
+
+ bundle
+ org.apache.taglibs.standard.tag.rt.fmt.BundleTag
+ JSP
+
+
+Resource bundle base name. This is the bundle's
+fully-qualified resource name, which has the same
+form as a fully-qualified class name, that is, it uses
+"." as the package component separator and does not
+have any file type (such as ".class" or ".properties")
+suffix.
+
+ basename
+ true
+ true
+
+
+
+Prefix to be prepended to the value of the message
+key of any nested <fmt:message> action.
+
+ prefix
+ false
+ true
+
+
+
+
+
+ Loads a resource bundle and stores it in the named scoped variable or
+ the bundle configuration variable
+
+ setBundle
+ org.apache.taglibs.standard.tag.rt.fmt.SetBundleTag
+ empty
+
+
+Resource bundle base name. This is the bundle's
+fully-qualified resource name, which has the same
+form as a fully-qualified class name, that is, it uses
+"." as the package component separator and does not
+have any file type (such as ".class" or ".properties")
+suffix.
+
+ basename
+ true
+ true
+
+
+
+Name of the exported scoped variable which stores
+the i18n localization context of type
+javax.servlet.jsp.jstl.fmt.LocalizationC
+ontext.
+
+ var
+ false
+ false
+
+
+
+Scope of var or the localization context
+configuration variable.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Maps key to localized message and performs parametric replacement
+
+ message
+ org.apache.taglibs.standard.tag.rt.fmt.MessageTag
+ JSP
+
+
+Message key to be looked up.
+
+ key
+ false
+ true
+
+
+
+Localization context in whose resource
+bundle the message key is looked up.
+
+ bundle
+ false
+ true
+
+
+
+Name of the exported scoped variable
+which stores the localized message.
+
+ var
+ false
+ false
+
+
+
+Scope of var.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Supplies an argument for parametric replacement to a containing
+ <message> tag
+
+ param
+ org.apache.taglibs.standard.tag.rt.fmt.ParamTag
+ JSP
+
+
+Argument used for parametric replacement.
+
+ value
+ false
+ true
+
+
+
+
+
+ Formats a numeric value as a number, currency, or percentage
+
+ formatNumber
+ org.apache.taglibs.standard.tag.rt.fmt.FormatNumberTag
+ JSP
+
+
+Numeric value to be formatted.
+
+ value
+ false
+ true
+
+
+
+Specifies whether the value is to be
+formatted as number, currency, or
+percentage.
+
+ type
+ false
+ true
+
+
+
+Custom formatting pattern.
+
+ pattern
+ false
+ true
+
+
+
+ISO 4217 currency code. Applied only
+when formatting currencies (i.e. if type is
+equal to "currency"); ignored otherwise.
+
+ currencyCode
+ false
+ true
+
+
+
+Currency symbol. Applied only when
+formatting currencies (i.e. if type is equal
+to "currency"); ignored otherwise.
+
+ currencySymbol
+ false
+ true
+
+
+
+Specifies whether the formatted output
+will contain any grouping separators.
+
+ groupingUsed
+ false
+ true
+
+
+
+Maximum number of digits in the integer
+portion of the formatted output.
+
+ maxIntegerDigits
+ false
+ true
+
+
+
+Minimum number of digits in the integer
+portion of the formatted output.
+
+ minIntegerDigits
+ false
+ true
+
+
+
+Maximum number of digits in the
+fractional portion of the formatted output.
+
+ maxFractionDigits
+ false
+ true
+
+
+
+Minimum number of digits in the
+fractional portion of the formatted output.
+
+ minFractionDigits
+ false
+ true
+
+
+
+Name of the exported scoped variable
+which stores the formatted result as a
+String.
+
+ var
+ false
+ false
+
+
+
+Scope of var.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Parses the string representation of a number, currency, or percentage
+
+ parseNumber
+ org.apache.taglibs.standard.tag.rt.fmt.ParseNumberTag
+ JSP
+
+
+String to be parsed.
+
+ value
+ false
+ true
+
+
+
+Specifies whether the string in the value
+attribute should be parsed as a number,
+currency, or percentage.
+
+ type
+ false
+ true
+
+
+
+Custom formatting pattern that determines
+how the string in the value attribute is to be
+parsed.
+
+ pattern
+ false
+ true
+
+
+
+Locale whose default formatting pattern (for
+numbers, currencies, or percentages,
+respectively) is to be used during the parse
+operation, or to which the pattern specified
+via the pattern attribute (if present) is
+applied.
+
+ parseLocale
+ false
+ true
+
+
+
+Specifies whether just the integer portion of
+the given value should be parsed.
+
+ integerOnly
+ false
+ true
+
+
+
+Name of the exported scoped variable which
+stores the parsed result (of type
+java.lang.Number).
+
+ var
+ false
+ false
+
+
+
+Scope of var.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Formats a date and/or time using the supplied styles and pattern
+
+ formatDate
+ org.apache.taglibs.standard.tag.rt.fmt.FormatDateTag
+ empty
+
+
+Date and/or time to be formatted.
+
+ value
+ true
+ true
+
+
+
+Specifies whether the time, the date, or both
+the time and date components of the given
+date are to be formatted.
+
+ type
+ false
+ true
+
+
+
+Predefined formatting style for dates. Follows
+the semantics defined in class
+java.text.DateFormat. Applied only
+when formatting a date or both a date and
+time (i.e. if type is missing or is equal to
+"date" or "both"); ignored otherwise.
+
+ dateStyle
+ false
+ true
+
+
+
+Predefined formatting style for times. Follows
+the semantics defined in class
+java.text.DateFormat. Applied only
+when formatting a time or both a date and
+time (i.e. if type is equal to "time" or "both");
+ignored otherwise.
+
+ timeStyle
+ false
+ true
+
+
+
+Custom formatting style for dates and times.
+
+ pattern
+ false
+ true
+
+
+
+Time zone in which to represent the formatted
+time.
+
+ timeZone
+ false
+ true
+
+
+
+Name of the exported scoped variable which
+stores the formatted result as a String.
+
+ var
+ false
+ false
+
+
+
+Scope of var.
+
+ scope
+ false
+ false
+
+
+
+
+
+ Parses the string representation of a date and/or time
+
+ parseDate
+ org.apache.taglibs.standard.tag.rt.fmt.ParseDateTag
+ JSP
+
+
+Date string to be parsed.
+
+ value
+ false
+ true
+
+
+
+Specifies whether the date string in the
+value attribute is supposed to contain a
+time, a date, or both.
+
+ type
+ false
+ true
+
+
+
+Predefined formatting style for days
+which determines how the date
+component of the date string is to be
+parsed. Applied only when formatting a
+date or both a date and time (i.e. if type
+is missing or is equal to "date" or "both");
+ignored otherwise.
+
+ dateStyle
+ false
+ true
+
+
+
+Predefined formatting styles for times
+which determines how the time
+component in the date string is to be
+parsed. Applied only when formatting a
+time or both a date and time (i.e. if type
+is equal to "time" or "both"); ignored
+otherwise.
+
+ timeStyle
+ false
+ true
+
+
+
+Custom formatting pattern which
+determines how the date string is to be
+parsed.
+
+ pattern
+ false
+ true
+
+
+
+Time zone in which to interpret any time
+information in the date string.
+
+ timeZone
+ false
+ true
+
+
+
+Locale whose predefined formatting styles
+for dates and times are to be used during
+the parse operation, or to which the
+pattern specified via the pattern
+attribute (if present) is applied.
+
+ parseLocale
+ false
+ true
+
+
+
+Name of the exported scoped variable in
+which the parsing result (of type
+java.util.Date) is stored.
+
+ var
+ false
+ false
+
+
+
+Scope of var.
+
+ scope
+ false
+ false
+
+
+
+
diff --git a/web-app/WEB-INF/tld/grails.tld b/web-app/WEB-INF/tld/grails.tld
new file mode 100644
index 0000000..9bd036b
--- /dev/null
+++ b/web-app/WEB-INF/tld/grails.tld
@@ -0,0 +1,550 @@
+
+
+ The Grails custom tag library
+ 0.2
+ grails
+ http://grails.codehaus.org/tags
+
+
+ link
+ org.codehaus.groovy.grails.web.taglib.jsp.JspLinkTag
+ JSP
+
+ action
+ false
+ true
+
+
+ controller
+ false
+ true
+
+
+ id
+ false
+ true
+
+
+ url
+ false
+ true
+
+
+ params
+ false
+ true
+
+ true
+
+
+ form
+ org.codehaus.groovy.grails.web.taglib.jsp.JspFormTag
+ JSP
+
+ action
+ false
+ true
+
+
+ controller
+ false
+ true
+
+
+ id
+ false
+ true
+
+
+ url
+ false
+ true
+
+
+ method
+ true
+ true
+
+ true
+
+
+ select
+ org.codehaus.groovy.grails.web.taglib.jsp.JspSelectTag
+ JSP
+
+ name
+ true
+ true
+
+
+ value
+ false
+ true
+
+
+ optionKey
+ false
+ true
+
+
+ optionValue
+ false
+ true
+
+ true
+
+
+ datePicker
+ org.codehaus.groovy.grails.web.taglib.jsp.JspDatePickerTag
+ empty
+
+ name
+ true
+ true
+
+
+ value
+ false
+ true
+
+
+ precision
+ false
+ true
+
+ false
+
+
+ currencySelect
+ org.codehaus.groovy.grails.web.taglib.jsp.JspCurrencySelectTag
+ empty
+
+ name
+ true
+ true
+
+
+ value
+ false
+ true
+
+ true
+
+
+ localeSelect
+ org.codehaus.groovy.grails.web.taglib.jsp.JspLocaleSelectTag
+ empty
+
+ name
+ true
+ true
+
+
+ value
+ false
+ true
+
+ true
+
+
+ timeZoneSelect
+ org.codehaus.groovy.grails.web.taglib.jsp.JspTimeZoneSelectTag
+ empty
+
+ name
+ true
+ true
+
+
+ value
+ false
+ true
+
+ true
+
+
+ checkBox
+ org.codehaus.groovy.grails.web.taglib.jsp.JspCheckboxTag
+ empty
+
+ name
+ true
+ true
+
+
+ value
+ true
+ true
+
+ true
+
+
+ hasErrors
+ org.codehaus.groovy.grails.web.taglib.jsp.JspHasErrorsTag
+ JSP
+
+ model
+ false
+ true
+
+
+ bean
+ false
+ true
+
+
+ field
+ false
+ true
+
+ false
+
+
+ eachError
+ org.codehaus.groovy.grails.web.taglib.jsp.JspEachErrorTag
+ JSP
+
+ model
+ false
+ true
+
+
+ bean
+ false
+ true
+
+
+ field
+ false
+ true
+
+ false
+
+
+ renderErrors
+ org.codehaus.groovy.grails.web.taglib.jsp.JspEachErrorTag
+ JSP
+
+ model
+ false
+ true
+
+
+ bean
+ false
+ true
+
+
+ field
+ false
+ true
+
+
+ as
+ true
+ true
+
+ false
+
+
+ message
+ org.codehaus.groovy.grails.web.taglib.jsp.JspMessageTag
+ JSP
+
+ code
+ false
+ true
+
+
+ error
+ false
+ true
+
+
+ default
+ false
+ true
+
+ false
+
+
+ remoteFunction
+ org.codehaus.groovy.grails.web.taglib.jsp.JspRemoteFunctionTag
+ empty
+
+ before
+ false
+ true
+
+
+ after
+ false
+ true
+
+
+ action
+ false
+ true
+
+
+ controller
+ false
+ true
+
+
+ id
+ false
+ true
+
+
+ url
+ false
+ true
+
+
+ params
+ false
+ true
+
+
+ asynchronous
+ false
+ true
+
+
+ method
+ false
+ true
+
+
+ update
+ false
+ true
+
+
+ onSuccess
+ false
+ true
+
+
+ onFailure
+ false
+ true
+
+
+ onComplete
+ false
+ true
+
+
+ onLoading
+ false
+ true
+
+
+ onLoaded
+ false
+ true
+
+
+ onInteractive
+ false
+ true
+
+ true
+
+
+ remoteLink
+ org.codehaus.groovy.grails.web.taglib.jsp.JspRemoteLinkTag
+ JSP
+
+ before
+ false
+ true
+
+
+ after
+ false
+ true
+
+
+ action
+ false
+ true
+
+
+ controller
+ false
+ true
+
+
+ id
+ false
+ true
+
+
+ url
+ false
+ true
+
+
+ params
+ false
+ true
+
+
+ asynchronous
+ false
+ true
+
+
+ method
+ false
+ true
+
+
+ update
+ false
+ true
+
+
+ onSuccess
+ false
+ true
+
+
+ onFailure
+ false
+ true
+
+
+ onComplete
+ false
+ true
+
+
+ onLoading
+ false
+ true
+
+
+ onLoaded
+ false
+ true
+
+
+ onInteractive
+ false
+ true
+
+ true
+
+
+ formRemote
+ org.codehaus.groovy.grails.web.taglib.jsp.JspFormRemoteTag
+ JSP
+
+ before
+ false
+ true
+
+
+ after
+ false
+ true
+
+
+ action
+ false
+ true
+
+
+ controller
+ false
+ true
+
+
+ id
+ false
+ true
+
+
+ url
+ false
+ true
+
+
+ params
+ false
+ true
+
+
+ asynchronous
+ false
+ true
+
+
+ method
+ false
+ true
+
+
+ update
+ false
+ true
+
+
+ onSuccess
+ false
+ true
+
+
+ onFailure
+ false
+ true
+
+
+ onComplete
+ false
+ true
+
+
+ onLoading
+ false
+ true
+
+
+ onLoaded
+ false
+ true
+
+
+ onInteractive
+ false
+ true
+
+ true
+
+
+ invokeTag
+ org.codehaus.groovy.grails.web.taglib.jsp.JspInvokeGrailsTagLibTag
+ JSP
+
+ it
+ java.lang.Object
+ true
+ NESTED
+
+
+ tagName
+ true
+ true
+
+ true
+
+
+
diff --git a/web-app/WEB-INF/tld/spring-form.tld b/web-app/WEB-INF/tld/spring-form.tld
new file mode 100644
index 0000000..1520a68
--- /dev/null
+++ b/web-app/WEB-INF/tld/spring-form.tld
@@ -0,0 +1,2411 @@
+
+
+
+ Spring Framework JSP Form Tag Library
+ 3.0
+ form
+ http://www.springframework.org/tags/form
+
+
+ Renders an HTML 'form' tag and exposes a binding path to inner tags for binding.
+ form
+ org.springframework.web.servlet.tags.form.FormTag
+ JSP
+
+ HTML Standard Attribute
+ id
+ false
+ true
+
+
+ HTML Standard Attribute - added for backwards compatibility cases
+ name
+ false
+ true
+
+
+ Enable/disable HTML escaping of rendered values.
+ htmlEscape
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute
+ cssClass
+ false
+ true
+
+
+ Equivalent to "style" - HTML Optional Attribute
+ cssStyle
+ false
+ true
+
+
+ HTML Standard Attribute
+ lang
+ false
+ true
+
+
+ HTML Standard Attribute
+ title
+ false
+ true
+
+
+ HTML Standard Attribute
+ dir
+ false
+ true
+
+
+ HTML Event Attribute
+ onclick
+ false
+ true
+
+
+ HTML Event Attribute
+ ondblclick
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousedown
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseup
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseover
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousemove
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseout
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeypress
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeyup
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeydown
+ false
+ true
+
+
+ Name of the model attribute under which the form object is exposed.
+ Defaults to 'command'.
+ modelAttribute
+ false
+ true
+
+
+ Name of the model attribute under which the form object is exposed.
+ Defaults to 'command'.
+ commandName
+ false
+ true
+
+
+ HTML Required Attribute
+ action
+ false
+ true
+
+
+ HTML Optional Attribute
+ method
+ false
+ true
+
+
+ HTML Optional Attribute
+ target
+ false
+ true
+
+
+ HTML Optional Attribute
+ enctype
+ false
+ true
+
+
+ Specifies the list of character encodings for input data that is accepted by the server processing this form. The value is a space- and/or comma-delimited list of charset values. The client must interpret this list as an exclusive-or list, i.e., the server is able to accept any single character encoding per entity received.
+ acceptCharset
+ false
+ true
+
+
+ HTML Event Attribute
+ onsubmit
+ false
+ true
+
+
+ HTML Event Attribute
+ onreset
+ false
+ true
+
+
+ Common Optional Attribute
+ autocomplete
+ false
+ true
+
+
+ The parameter name used for HTTP methods other then GET and POST. Default is '_method'
+ methodParam
+ false
+ true
+
+ true
+
+
+
+ Renders an HTML 'input' tag with type 'text' using the bound value.
+ input
+ org.springframework.web.servlet.tags.form.InputTag
+ empty
+
+ Path to property for data binding
+ path
+ true
+ true
+
+
+ HTML Standard Attribute
+ id
+ false
+ true
+
+
+ Enable/disable HTML escaping of rendered values.
+ htmlEscape
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute
+ cssClass
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors.
+ cssErrorClass
+ false
+ true
+
+
+ Equivalent to "style" - HTML Optional Attribute
+ cssStyle
+ false
+ true
+
+
+ HTML Standard Attribute
+ lang
+ false
+ true
+
+
+ HTML Standard Attribute
+ title
+ false
+ true
+
+
+ HTML Standard Attribute
+ dir
+ false
+ true
+
+
+ HTML Standard Attribute
+ tabindex
+ false
+ true
+
+
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+ disabled
+ false
+ true
+
+
+ HTML Event Attribute
+ onclick
+ false
+ true
+
+
+ HTML Event Attribute
+ ondblclick
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousedown
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseup
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseover
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousemove
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseout
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeypress
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeyup
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeydown
+ false
+ true
+
+
+ HTML Event Attribute
+ onfocus
+ false
+ true
+
+
+ HTML Event Attribute
+ onblur
+ false
+ true
+
+
+ HTML Event Attribute
+ onchange
+ false
+ true
+
+
+ HTML Standard Attribute
+ accesskey
+ false
+ true
+
+
+ HTML Optional Attribute
+ size
+ false
+ true
+
+
+ HTML Optional Attribute
+ maxlength
+ false
+ true
+
+
+ HTML Optional Attribute
+ alt
+ false
+ true
+
+
+ HTML Event Attribute
+ onselect
+ false
+ true
+
+
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will make the HTML element readonly.
+ readonly
+ false
+ true
+
+
+ Common Optional Attribute
+ autocomplete
+ false
+ true
+
+ true
+
+
+
+ Renders an HTML 'input' tag with type 'password' using the bound value.
+ password
+ org.springframework.web.servlet.tags.form.PasswordInputTag
+ empty
+
+ Path to property for data binding
+ path
+ true
+ true
+
+
+ HTML Standard Attribute
+ id
+ false
+ true
+
+
+ Enable/disable HTML escaping of rendered values.
+ htmlEscape
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute
+ cssClass
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors.
+ cssErrorClass
+ false
+ true
+
+
+ Equivalent to "style" - HTML Optional Attribute
+ cssStyle
+ false
+ true
+
+
+ HTML Standard Attribute
+ lang
+ false
+ true
+
+
+ HTML Standard Attribute
+ title
+ false
+ true
+
+
+ HTML Standard Attribute
+ dir
+ false
+ true
+
+
+ HTML Standard Attribute
+ tabindex
+ false
+ true
+
+
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+ disabled
+ false
+ true
+
+
+ HTML Event Attribute
+ onclick
+ false
+ true
+
+
+ HTML Event Attribute
+ ondblclick
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousedown
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseup
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseover
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousemove
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseout
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeypress
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeyup
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeydown
+ false
+ true
+
+
+ HTML Event Attribute
+ onfocus
+ false
+ true
+
+
+ HTML Event Attribute
+ onblur
+ false
+ true
+
+
+ HTML Event Attribute
+ onchange
+ false
+ true
+
+
+ HTML Standard Attribute
+ accesskey
+ false
+ true
+
+
+ HTML Optional Attribute
+ size
+ false
+ true
+
+
+ HTML Optional Attribute
+ maxlength
+ false
+ true
+
+
+ HTML Optional Attribute
+ alt
+ false
+ true
+
+
+ HTML Event Attribute
+ onselect
+ false
+ true
+
+
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will make the HTML element readonly.
+ readonly
+ false
+ true
+
+
+ Common Optional Attribute
+ autocomplete
+ false
+ true
+
+
+ Is the password value to be shown? Defaults to false.
+ showPassword
+ false
+ true
+
+ true
+
+
+
+ Renders an HTML 'input' tag with type 'hidden' using the bound value.
+ hidden
+ org.springframework.web.servlet.tags.form.HiddenInputTag
+ empty
+
+ Path to property for data binding
+ path
+ true
+ true
+
+
+ HTML Standard Attribute
+ id
+ false
+ true
+
+
+ Enable/disable HTML escaping of rendered values.
+ htmlEscape
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute
+ cssClass
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors.
+ cssErrorClass
+ false
+ true
+
+
+ Equivalent to "style" - HTML Optional Attribute
+ cssStyle
+ false
+ true
+
+
+ HTML Standard Attribute
+ lang
+ false
+ true
+
+
+ HTML Standard Attribute
+ title
+ false
+ true
+
+
+ HTML Standard Attribute
+ dir
+ false
+ true
+
+
+ HTML Standard Attribute
+ tabindex
+ false
+ true
+
+
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+ disabled
+ false
+ true
+
+
+ HTML Event Attribute
+ onclick
+ false
+ true
+
+
+ HTML Event Attribute
+ ondblclick
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousedown
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseup
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseover
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousemove
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseout
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeypress
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeyup
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeydown
+ false
+ true
+
+ true
+
+
+
+ Renders an HTML 'select' element. Supports databinding to the selected option.
+ select
+ org.springframework.web.servlet.tags.form.SelectTag
+ JSP
+
+ Path to property for data binding
+ path
+ true
+ true
+
+
+ HTML Standard Attribute
+ id
+ false
+ true
+
+
+ Enable/disable HTML escaping of rendered values.
+ htmlEscape
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute
+ cssClass
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors.
+ cssErrorClass
+ false
+ true
+
+
+ Equivalent to "style" - HTML Optional Attribute
+ cssStyle
+ false
+ true
+
+
+ HTML Standard Attribute
+ lang
+ false
+ true
+
+
+ HTML Standard Attribute
+ title
+ false
+ true
+
+
+ HTML Standard Attribute
+ dir
+ false
+ true
+
+
+ HTML Standard Attribute
+ tabindex
+ false
+ true
+
+
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+ disabled
+ false
+ true
+
+
+ HTML Event Attribute
+ onclick
+ false
+ true
+
+
+ HTML Event Attribute
+ ondblclick
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousedown
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseup
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseover
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousemove
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseout
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeypress
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeyup
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeydown
+ false
+ true
+
+
+ HTML Event Attribute
+ onfocus
+ false
+ true
+
+
+ HTML Event Attribute
+ onblur
+ false
+ true
+
+
+ HTML Event Attribute
+ onchange
+ false
+ true
+
+
+ HTML Standard Attribute
+ accesskey
+ false
+ true
+
+
+ The Collection, Map or array of objects used to generate the inner 'option' tags
+ items
+ false
+ true
+
+
+ Name of the property mapped to 'value' attribute of the 'option' tag
+ itemValue
+ false
+ true
+
+
+ Name of the property mapped to the inner text of the 'option' tag
+ itemLabel
+ false
+ true
+
+
+ HTML Optional Attribute
+ size
+ false
+ true
+
+
+ HTML Optional Attribute
+ multiple
+ false
+ true
+
+ true
+
+
+
+ Renders a single HTML 'option'. Sets 'selected' as appropriate based on bound value.
+ option
+ org.springframework.web.servlet.tags.form.OptionTag
+ JSP
+
+ The actual value bound to the 'value' attribute
+ value
+ java.lang.Object
+
+
+ The String representation of thr value bound to the 'value' attribute, taking into consideration
+ any PropertyEditor associated with the enclosing 'select' tag.
+ displayValue
+ java.lang.String
+
+
+ HTML Standard Attribute
+ id
+ false
+ true
+
+
+ HTML Optional Attribute
+ value
+ true
+ true
+
+
+ HTML Optional Attribute
+ label
+ false
+ true
+
+
+ Enable/disable HTML escaping of rendered values.
+ htmlEscape
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute
+ cssClass
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors.
+ cssErrorClass
+ false
+ true
+
+
+ Equivalent to "style" - HTML Optional Attribute
+ cssStyle
+ false
+ true
+
+
+ HTML Standard Attribute
+ lang
+ false
+ true
+
+
+ HTML Standard Attribute
+ title
+ false
+ true
+
+
+ HTML Standard Attribute
+ dir
+ false
+ true
+
+
+ HTML Standard Attribute
+ tabindex
+ false
+ true
+
+
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+ disabled
+ false
+ true
+
+
+ HTML Event Attribute
+ onclick
+ false
+ true
+
+
+ HTML Event Attribute
+ ondblclick
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousedown
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseup
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseover
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousemove
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseout
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeypress
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeyup
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeydown
+ false
+ true
+
+ true
+
+
+
+ Renders a list of HTML 'option' tags. Sets 'selected' as appropriate based on bound value.
+ options
+ org.springframework.web.servlet.tags.form.OptionsTag
+ empty
+
+ HTML Standard Attribute
+ id
+ false
+ true
+
+
+ The Collection, Map or array of objects used to generate the inner 'option' tags. This attribute is required unless the containing select's property for data binding is an Enum, in which case the enum's values are used.
+ items
+ false
+ true
+
+
+ Name of the property mapped to 'value' attribute of the 'option' tag
+ itemValue
+ false
+ true
+
+
+ Name of the property mapped to the inner text of the 'option' tag
+ itemLabel
+ false
+ true
+
+
+ Enable/disable HTML escaping of rendered values.
+ htmlEscape
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute
+ cssClass
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors.
+ cssErrorClass
+ false
+ true
+
+
+ Equivalent to "style" - HTML Optional Attribute
+ cssStyle
+ false
+ true
+
+
+ HTML Standard Attribute
+ lang
+ false
+ true
+
+
+ HTML Standard Attribute
+ title
+ false
+ true
+
+
+ HTML Standard Attribute
+ dir
+ false
+ true
+
+
+ HTML Standard Attribute
+ tabindex
+ false
+ true
+
+
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+ disabled
+ false
+ true
+
+
+ HTML Event Attribute
+ onclick
+ false
+ true
+
+
+ HTML Event Attribute
+ ondblclick
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousedown
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseup
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseover
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousemove
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseout
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeypress
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeyup
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeydown
+ false
+ true
+
+ true
+
+
+
+ Renders an HTML 'input' tag with type 'radio'.
+ radiobutton
+ org.springframework.web.servlet.tags.form.RadioButtonTag
+ empty
+
+ Path to property for data binding
+ path
+ true
+ true
+
+
+ HTML Standard Attribute
+ id
+ false
+ true
+
+
+ Enable/disable HTML escaping of rendered values.
+ htmlEscape
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute
+ cssClass
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors.
+ cssErrorClass
+ false
+ true
+
+
+ Equivalent to "style" - HTML Optional Attribute
+ cssStyle
+ false
+ true
+
+
+ HTML Standard Attribute
+ lang
+ false
+ true
+
+
+ HTML Standard Attribute
+ title
+ false
+ true
+
+
+ HTML Standard Attribute
+ dir
+ false
+ true
+
+
+ HTML Standard Attribute
+ tabindex
+ false
+ true
+
+
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+ disabled
+ false
+ true
+
+
+ HTML Event Attribute
+ onclick
+ false
+ true
+
+
+ HTML Event Attribute
+ ondblclick
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousedown
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseup
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseover
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousemove
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseout
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeypress
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeyup
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeydown
+ false
+ true
+
+
+ HTML Event Attribute
+ onfocus
+ false
+ true
+
+
+ HTML Event Attribute
+ onblur
+ false
+ true
+
+
+ HTML Event Attribute
+ onchange
+ false
+ true
+
+
+ HTML Standard Attribute
+ accesskey
+ false
+ true
+
+
+ HTML Optional Attribute
+ value
+ false
+ true
+
+
+ Value to be displayed as part of the tag
+ label
+ false
+ true
+
+ true
+
+
+
+ Renders multiple HTML 'input' tags with type 'radio'.
+ radiobuttons
+ org.springframework.web.servlet.tags.form.RadioButtonsTag
+ empty
+
+ Path to property for data binding
+ path
+ true
+ true
+
+
+ HTML Standard Attribute
+ id
+ false
+ true
+
+
+ Enable/disable HTML escaping of rendered values.
+ htmlEscape
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute
+ cssClass
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors.
+ cssErrorClass
+ false
+ true
+
+
+ Equivalent to "style" - HTML Optional Attribute
+ cssStyle
+ false
+ true
+
+
+ HTML Standard Attribute
+ lang
+ false
+ true
+
+
+ HTML Standard Attribute
+ title
+ false
+ true
+
+
+ HTML Standard Attribute
+ dir
+ false
+ true
+
+
+ HTML Standard Attribute
+ tabindex
+ false
+ true
+
+
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+ disabled
+ false
+ true
+
+
+ HTML Event Attribute
+ onclick
+ false
+ true
+
+
+ HTML Event Attribute
+ ondblclick
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousedown
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseup
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseover
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousemove
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseout
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeypress
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeyup
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeydown
+ false
+ true
+
+
+ HTML Event Attribute
+ onfocus
+ false
+ true
+
+
+ HTML Event Attribute
+ onblur
+ false
+ true
+
+
+ HTML Event Attribute
+ onchange
+ false
+ true
+
+
+ HTML Standard Attribute
+ accesskey
+ false
+ true
+
+
+ The Collection, Map or array of objects used to generate the 'input' tags with type 'radio'. This attribute is required unless the property for data binding is an Enum, in which case the enum's values are used.
+ items
+ false
+ true
+
+
+ Name of the property mapped to 'value' attribute of the 'input' tags with type 'radio'
+ itemValue
+ false
+ true
+
+
+ Value to be displayed as part of the 'input' tags with type 'radio'
+ itemLabel
+ false
+ true
+
+
+ Delimiter to use between each 'input' tag with type 'radio'. There is no delimiter by default.
+ delimiter
+ false
+ true
+
+
+ Specifies the HTML element that is used to enclose each 'input' tag with type 'radio'. Defaults to 'span'.
+ element
+ false
+ true
+
+ true
+
+
+
+ Renders an HTML 'input' tag with type 'checkbox'.
+ checkbox
+ org.springframework.web.servlet.tags.form.CheckboxTag
+ empty
+
+ Path to property for data binding
+ path
+ true
+ true
+
+
+ HTML Standard Attribute
+ id
+ false
+ true
+
+
+ Enable/disable HTML escaping of rendered values.
+ htmlEscape
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute
+ cssClass
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors.
+ cssErrorClass
+ false
+ true
+
+
+ Equivalent to "style" - HTML Optional Attribute
+ cssStyle
+ false
+ true
+
+
+ HTML Standard Attribute
+ lang
+ false
+ true
+
+
+ HTML Standard Attribute
+ title
+ false
+ true
+
+
+ HTML Standard Attribute
+ dir
+ false
+ true
+
+
+ HTML Standard Attribute
+ tabindex
+ false
+ true
+
+
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+ disabled
+ false
+ true
+
+
+ HTML Event Attribute
+ onclick
+ false
+ true
+
+
+ HTML Event Attribute
+ ondblclick
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousedown
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseup
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseover
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousemove
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseout
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeypress
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeyup
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeydown
+ false
+ true
+
+
+ HTML Event Attribute
+ onfocus
+ false
+ true
+
+
+ HTML Event Attribute
+ onblur
+ false
+ true
+
+
+ HTML Event Attribute
+ onchange
+ false
+ true
+
+
+ HTML Standard Attribute
+ accesskey
+ false
+ true
+
+
+ HTML Optional Attribute
+ value
+ false
+ true
+
+
+ Value to be displayed as part of the tag
+ label
+ false
+ true
+
+ true
+
+
+
+ Renders multiple HTML 'input' tags with type 'checkbox'.
+ checkboxes
+ org.springframework.web.servlet.tags.form.CheckboxesTag
+ empty
+
+ Path to property for data binding
+ path
+ true
+ true
+
+
+ HTML Standard Attribute
+ id
+ false
+ true
+
+
+ Enable/disable HTML escaping of rendered values.
+ htmlEscape
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute
+ cssClass
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors.
+ cssErrorClass
+ false
+ true
+
+
+ Equivalent to "style" - HTML Optional Attribute
+ cssStyle
+ false
+ true
+
+
+ HTML Standard Attribute
+ lang
+ false
+ true
+
+
+ HTML Standard Attribute
+ title
+ false
+ true
+
+
+ HTML Standard Attribute
+ dir
+ false
+ true
+
+
+ HTML Standard Attribute
+ tabindex
+ false
+ true
+
+
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+ disabled
+ false
+ true
+
+
+ HTML Event Attribute
+ onclick
+ false
+ true
+
+
+ HTML Event Attribute
+ ondblclick
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousedown
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseup
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseover
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousemove
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseout
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeypress
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeyup
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeydown
+ false
+ true
+
+
+ HTML Event Attribute
+ onfocus
+ false
+ true
+
+
+ HTML Event Attribute
+ onblur
+ false
+ true
+
+
+ HTML Event Attribute
+ onchange
+ false
+ true
+
+
+ HTML Standard Attribute
+ accesskey
+ false
+ true
+
+
+ The Collection, Map or array of objects used to generate the 'input' tags with type 'checkbox'
+ items
+ true
+ true
+
+
+ Name of the property mapped to 'value' attribute of the 'input' tags with type 'checkbox'
+ itemValue
+ false
+ true
+
+
+ Value to be displayed as part of the 'input' tags with type 'checkbox'
+ itemLabel
+ false
+ true
+
+
+ Delimiter to use between each 'input' tag with type 'checkbox'. There is no delimiter by default.
+ delimiter
+ false
+ true
+
+
+ Specifies the HTML element that is used to enclose each 'input' tag with type 'checkbox'. Defaults to 'span'.
+ element
+ false
+ true
+
+ true
+
+
+
+ Renders an HTML 'textarea'.
+ textarea
+ org.springframework.web.servlet.tags.form.TextareaTag
+ empty
+
+ Path to property for data binding
+ path
+ true
+ true
+
+
+ HTML Standard Attribute
+ id
+ false
+ true
+
+
+ Enable/disable HTML escaping of rendered values.
+ htmlEscape
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute
+ cssClass
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute. Used when the bound field has errors.
+ cssErrorClass
+ false
+ true
+
+
+ Equivalent to "style" - HTML Optional Attribute
+ cssStyle
+ false
+ true
+
+
+ HTML Standard Attribute
+ lang
+ false
+ true
+
+
+ HTML Standard Attribute
+ title
+ false
+ true
+
+
+ HTML Standard Attribute
+ dir
+ false
+ true
+
+
+ HTML Standard Attribute
+ tabindex
+ false
+ true
+
+
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+ disabled
+ false
+ true
+
+
+ HTML Event Attribute
+ onclick
+ false
+ true
+
+
+ HTML Event Attribute
+ ondblclick
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousedown
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseup
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseover
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousemove
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseout
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeypress
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeyup
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeydown
+ false
+ true
+
+
+ HTML Event Attribute
+ onfocus
+ false
+ true
+
+
+ HTML Event Attribute
+ onblur
+ false
+ true
+
+
+ HTML Event Attribute
+ onchange
+ false
+ true
+
+
+ HTML Standard Attribute
+ accesskey
+ false
+ true
+
+
+ HTML Required Attribute
+ rows
+ false
+ true
+
+
+ HTML Required Attribute
+ cols
+ false
+ true
+
+
+ HTML Event Attribute
+ onselect
+ false
+ true
+
+
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will make the HTML element readonly.
+ readonly
+ false
+ true
+
+ true
+
+
+
+ Renders field errors in an HTML 'span' tag.
+ errors
+ org.springframework.web.servlet.tags.form.ErrorsTag
+ JSP
+
+ messages
+ java.util.List
+
+
+ Path to errors object for data binding
+ path
+ false
+ true
+
+
+ HTML Standard Attribute
+ id
+ false
+ true
+
+
+ Enable/disable HTML escaping of rendered values.
+ htmlEscape
+ false
+ true
+
+
+ Delimiter for displaying multiple error messages. Defaults to the br tag.
+ delimiter
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute
+ cssClass
+ false
+ true
+
+
+ Equivalent to "style" - HTML Optional Attribute
+ cssStyle
+ false
+ true
+
+
+ HTML Standard Attribute
+ lang
+ false
+ true
+
+
+ HTML Standard Attribute
+ title
+ false
+ true
+
+
+ HTML Standard Attribute
+ dir
+ false
+ true
+
+
+ HTML Standard Attribute
+ tabindex
+ false
+ true
+
+
+ HTML Event Attribute
+ onclick
+ false
+ true
+
+
+ HTML Event Attribute
+ ondblclick
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousedown
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseup
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseover
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousemove
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseout
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeypress
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeyup
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeydown
+ false
+ true
+
+
+ Specifies the HTML element that is used to render the enclosing errors.
+ element
+ false
+ true
+
+ true
+
+
+
+ Renders a form field label in an HTML 'label' tag.
+ label
+ org.springframework.web.servlet.tags.form.LabelTag
+ JSP
+
+ Path to property for data binding
+ path
+ true
+ true
+
+
+ HTML Standard Attribute
+ id
+ false
+ true
+
+
+ Enable/disable HTML escaping of rendered values.
+ htmlEscape
+ false
+ true
+
+
+ HTML Standard Attribute
+ for
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute.
+ cssClass
+ false
+ true
+
+
+ Equivalent to "class" - HTML Optional Attribute. Used only when errors are present.
+ cssErrorClass
+ false
+ true
+
+
+ Equivalent to "style" - HTML Optional Attribute
+ cssStyle
+ false
+ true
+
+
+ HTML Standard Attribute
+ lang
+ false
+ true
+
+
+ HTML Standard Attribute
+ title
+ false
+ true
+
+
+ HTML Standard Attribute
+ dir
+ false
+ true
+
+
+ HTML Standard Attribute
+ tabindex
+ false
+ true
+
+
+ HTML Event Attribute
+ onclick
+ false
+ true
+
+
+ HTML Event Attribute
+ ondblclick
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousedown
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseup
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseover
+ false
+ true
+
+
+ HTML Event Attribute
+ onmousemove
+ false
+ true
+
+
+ HTML Event Attribute
+ onmouseout
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeypress
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeyup
+ false
+ true
+
+
+ HTML Event Attribute
+ onkeydown
+ false
+ true
+
+ true
+
+
+
+ Renders an HTML 'button' tag.
+ button
+ org.springframework.web.servlet.tags.form.ButtonTag
+ JSP
+
+ HTML Standard Attribute
+ id
+ false
+ true
+
+
+ The name attribute for the HTML button tag
+ name
+ false
+ true
+
+
+ The value attribute for the HTML button tag
+ value
+ false
+ true
+
+
+ HTML Optional Attribute. Setting the value of this attribute to 'true' (without the quotes) will disable the HTML element.
+ disabled
+ false
+ true
+
+ true
+
+
+
diff --git a/web-app/WEB-INF/tld/spring.tld b/web-app/WEB-INF/tld/spring.tld
new file mode 100644
index 0000000..a0a8c6f
--- /dev/null
+++ b/web-app/WEB-INF/tld/spring.tld
@@ -0,0 +1,457 @@
+
+
+
+ Spring Framework JSP Tag Library
+ 3.0
+ spring
+ http://www.springframework.org/tags
+
+
+
+ Sets default HTML escape value for the current page.
+ Overrides a "defaultHtmlEscape" context-param in web.xml, if any.
+
+ htmlEscape
+ org.springframework.web.servlet.tags.HtmlEscapeTag
+ JSP
+
+ Set the default value for HTML escaping, to be put
+ into the current PageContext.
+ defaultHtmlEscape
+ true
+ true
+
+
+
+
+
+ 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).
+
+ escapeBody
+ org.springframework.web.servlet.tags.EscapeBodyTag
+ JSP
+
+ Set HTML escaping for this tag, as boolean value. Overrides the
+ default HTML escaping setting for the current page.
+ htmlEscape
+ false
+ true
+
+
+ Set JavaScript escaping for this tag, as boolean value.
+ Default is false.
+ javaScriptEscape
+ false
+ true
+
+
+
+
+
+ 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).
+
+ message
+ org.springframework.web.servlet.tags.MessageTag
+ JSP
+
+ 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.
+ message
+ false
+ true
+
+
+ The code (key) to use when looking up the message.
+ If code is not provided, the text attribute will be used.
+ code
+ false
+ true
+
+
+ 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).
+ arguments
+ false
+ true
+
+
+ The separator character to be used for splitting the
+ arguments string value; defaults to a 'comma' (',').
+ argumentSeparator
+ false
+ true
+
+
+ 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.
+ text
+ false
+ true
+
+
+ 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).
+ var
+ false
+ true
+
+
+ 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.
+ scope
+ false
+ true
+
+
+ Set HTML escaping for this tag, as boolean value.
+ Overrides the default HTML escaping setting for the current page.
+ htmlEscape
+ false
+ true
+
+
+ Set JavaScript escaping for this tag, as boolean value. Default is false.
+ javaScriptEscape
+ false
+ true
+
+
+
+
+
+ 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).
+
+ theme
+ org.springframework.web.servlet.tags.ThemeTag
+ JSP
+
+ A MessageSourceResolvable argument (direct or through JSP EL).
+ message
+ false
+ true
+
+
+ The code (key) to use when looking up the message.
+ If code is not provided, the text attribute will be used.
+ code
+ false
+ true
+
+
+ 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).
+ arguments
+ false
+ true
+
+
+ The separator character to be used for splitting the
+ arguments string value; defaults to a 'comma' (',').
+ argumentSeparator
+ false
+ true
+
+
+ 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.
+ text
+ false
+ true
+
+
+ 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).
+ var
+ false
+ true
+
+
+ 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.
+ scope
+ false
+ true
+
+
+ Set HTML escaping for this tag, as boolean value.
+ Overrides the default HTML escaping setting for the current page.
+ htmlEscape
+ false
+ true
+
+
+ Set JavaScript escaping for this tag, as boolean value. Default is false.
+ javaScriptEscape
+ false
+ true
+
+
+
+
+
+ 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).
+
+ hasBindErrors
+ org.springframework.web.servlet.tags.BindErrorsTag
+ JSP
+
+ errors
+ org.springframework.validation.Errors
+
+
+ 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.
+ name
+ true
+ true
+
+
+ Set HTML escaping for this tag, as boolean value.
+ Overrides the default HTML escaping setting for the current page.
+ htmlEscape
+ false
+ true
+
+
+
+
+
+ Sets a nested path to be used by the bind tag's path.
+
+ nestedPath
+ org.springframework.web.servlet.tags.NestedPathTag
+ JSP
+
+ nestedPath
+ java.lang.String
+
+
+ Set the path that this tag should apply. E.g. 'customer'
+ to allow bind paths like 'address.street' rather than
+ 'customer.address.street'.
+ path
+ true
+ true
+
+
+
+
+
+ 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).
+
+ bind
+ org.springframework.web.servlet.tags.BindTag
+ JSP
+
+ status
+ org.springframework.web.servlet.support.BindStatus
+
+
+ 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
+ path
+ true
+ true
+
+
+ Set whether to ignore a nested path, if any. Default is to not ignore.
+ ignoreNestedPath
+ false
+ true
+
+
+ Set HTML escaping for this tag, as boolean value. Overrides
+ the default HTML escaping setting for the current page.
+ htmlEscape
+ false
+ true
+
+
+
+
+
+ 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).
+
+ transform
+ org.springframework.web.servlet.tags.TransformTag
+ JSP
+
+ 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.
+ value
+ true
+ true
+
+
+ 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).
+ var
+ false
+ true
+
+
+ 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.
+ scope
+ false
+ true
+
+
+ Set HTML escaping for this tag, as boolean value. Overrides
+ the default HTML escaping setting for the current page.
+ htmlEscape
+ false
+ true
+
+
+
+
+ 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.
+ url
+ org.springframework.web.servlet.tags.UrlTag
+ JSP
+
+ 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.
+ value
+ true
+ true
+
+
+ Specifies a remote application context path. The default is the
+ current application context path.
+ context
+ false
+ true
+
+
+ The name of the variable to export the URL value to.
+ var
+ false
+ true
+
+
+ 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.
+ scope
+ false
+ true
+
+
+ Set HTML escaping for this tag, as a boolean value. Overrides the
+ default HTML escaping setting for the current page.
+ htmlEscape
+ false
+ true
+
+
+ Set JavaScript escaping for this tag, as a boolean value.
+ Default is false.
+ javaScriptEscape
+ false
+ true
+
+
+
+
+ Parameter tag based on the JSTL c:param tag. The sole purpose is to
+ support params inside the spring:url tag.
+ param
+ org.springframework.web.servlet.tags.ParamTag
+ JSP
+
+ The name of the parameter.
+ name
+ true
+ true
+
+
+ The value of the parameter.
+ value
+ false
+ true
+
+
+
+
+ Evaluates a Spring expression (SpEL) and either prints the result or assigns it to a variable.
+ eval
+ org.springframework.web.servlet.tags.EvalTag
+ JSP
+
+ The expression to evaluate.
+ expression
+ true
+ true
+
+
+ The name of the variable to export the evaluation result to.
+ var
+ false
+ true
+
+
+ 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.
+ scope
+ false
+ true
+
+
+ Set HTML escaping for this tag, as a boolean value. Overrides the
+ default HTML escaping setting for the current page.
+ htmlEscape
+ false
+ true
+
+
+ Set JavaScript escaping for this tag, as a boolean value. Default is false.
+ javaScriptEscape
+ false
+ true
+
+
+
+