2.0.8 ===== - Fixed "Root element name cannot be null" exception when processing non-complete documents (fragments). - Modified Arguments constructor to public for testing purposes. - Modified TemplateRepository constructor to public for testing purposes. - Fixed "get{outputType}For(node)" methods in DOMUtils, which were outputting exceptions due to new restrictions at the DOM model. - Added new utility getHTML5/Xhtml/XmlDOMFor(Reader) methods for obtaining the DOM Document resulting from parsing (with an on-purpose created parser) a fragment of markup code, for testing purposes. - Fixed bad re-escaping of XML entities in entity attributes. The "&" was always being escaped, even when it was in fact the beginning of an already-escaped entity. Now this situation is detected and re-escaping avoided. 2.0.7 ===== - Fixed letter case in DOCTYPE clause not being respected. Upper-case was required, which was against the HTML5 spec (which specifies the DOCTYPE clause to be case-insensitive). - Fixed DOCTYPE clause being output by LEGACYHTML5 parser. Output included an unwanted PUBLIC clause with empty-string public and system ids. - Modified ResourcePool so that it allows to discard and re-create pooled instances by the specification of object factories during construction. - Fixed error raising when default SAX, DOM or HTML parser implementations did not implement the 'reset' operation (as in, for example, some old versions of xerces: 2.6.2 and older). Now Thymeleaf detects this, outputs a warning in the logs, avoids calling reset and forces the parser resource pool to re-create the parser each time, substituting the old parser objects. - Fixed correct positioning of URL fragments when parameters are present. Expressions like '@{base#frag(p1='par',p2='par)}' will now be rendered 'base?p1=par&p2=par#frag' instead of the previous incorrect form 'base#frag?p1=par&p2=par'. 2.0.6 ===== - Fixed "Message Resolver has not been initialized" error when more than one message resolver was configured for the same template engine. - Fixed ClassCastException executing #{...} expressions in XML and VALIDXML template modes, because of a wrong construction of parsable code fragments (NestableNode was expected where there was a Text). - Updated OGNL dependency to 3.0.5 and javassist dependency to 3.16.1-GA. - Created org.thymeleaf.util.ClassLoaderUtils with utility methods for obtaining a valid class loader to operate with, using priority order 1. Thread context class loader, 2. Current class class loader, 3. System class loader. - Substituted all Thread.currentThread().getContextClassLoader() calls with calls to ClassLoaderUtils in order to avoid NullPointerExceptions when the context or current class loaders are null. - Modified org.thymeleaf.standard.expression.OgnlExpressionEvaluator so that it applies a fix on OGNL's expression processor. This fix makes OGNL evaluate Strings as booleans in a way consistent with that of Thymeleaf ('false', 'off' and 'no' are considered "false" in Thymeleaf expressions, but OGNL evaluates them as "true"). This fix does not affect Spring EL, as it already evaluates those values in the same way as Thymeleaf. - Fixed null-safety in "isEmpty" methods in #arrays, #lists, #maps and #sets. - Fixed th:each so that a null iterable equals no-iteration instead of 1 iteration of a null object. This imitates the behaviour of JSTL's - Added logging of exceptions when resolving resources at UrlResourceResolver and FileResourceResolver. 2.0.5 ===== - Added template name, line number and column to SAXParseExceptions in AbstractNonValidatingSAXTemplateParser. - Fixed attribute escaping in builtin DOM parser. - Fixed XML-escaping of ' (apos) in element attributes. "'" is not a recognized HTML entity (only an XML one) and IE <= 8 does not recognize it. ' will be used for escaping ' instead. - Fixed unescaping of XML entities in element attributes, so that those specified with codes (&#XX;) are also correctly unescaped. - Added to link expressions (@{...}) the ability to create server-root-relative (instead of context-root-relative) URLs in order to link to different contexts in the same server. These URLs will be specified like @{~/path/to/something} - Fixed javascript/dart expression inlining in order to work inside JSON objects. 2.0.4 ===== - Fixed element attributes not being XML-unescaped at SAX parser. 2.0.3 ===== - Fixed selection target not being correctly processed when th:object and th:remove="tag" appeared at the same host tag. - Allow parameters in @{...} expressions to specify no value, and even no '=' sign. As per the HTTP specification, these parameters are valid and completely equivalent to specifying the empty string as value. - Fixed excessive size of parser pools being created at Google App Engine for the standard template mode handler set (availableProcessors is set to 1377 in that environment). - Fixed attribute values resulting from the execution of processors in the Standard Dialects not being correctly XML-escaped. 2.0.2 ===== - Fixed NullPointerException when getting message for class. - Worked around ArrayIndexOutOfBounds when executing #messages.* functions in OGNL (not SpringEL) due to bug in OGNL implementation. 2.0.1 ===== - Fixed exception at SAX parser when comments appear at document-root level. - Fixed template name at exception reports when including fragments (the top-level template name was appearing instead of the fragment's). - Fixed attribute management so that null-valued attributes are allowed and output as "". - Fixed Java6-specific code which disallowed Thymeleaf to compile and run correctly in Java 5. - Modified the "display if null" flag of th:value from false to true, in order to avoid problems with parts of the framework (esp. form-binding relative) that require a "value" attribute in