Modified: websites/production/tapestry/content/release-notes-54.html
==============================================================================
--- websites/production/tapestry/content/release-notes-54.html (original)
+++ websites/production/tapestry/content/release-notes-54.html Mon Aug 26
21:20:28 2019
@@ -77,7 +77,30 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><p>This is the consolidated list
of changes between Tapestry versions 5.3 and 5.4. To upgrade to 5.4, most users
who are not using deprecated features will be able to just update the
dependency version in their Maven POM file or Gradle build script (or <a
href="download.html">download</a> the new JAR files) and the new version will
just work, although the introduction of Bootstrap CSS will require some styling
adjustments for most applications not already using Bootstrap. Please read
carefully below before upgrading, and also review the <a
href="how-to-upgrade.html">How to Upgrade</a> instructions.</p><h2
id="ReleaseNotes5.4-IncompatibleAPIs">Incompatible APIs</h2><h3
id="ReleaseNotes5.4-JavaScriptSupport">JavaScriptSupport</h3><p>Some existing
methods of JavaScriptSupport were changed from returning void, to returning the
JavaScriptSupport instance, to allow for chaining of calls. This interface is
consumed by end-user code, but no
t generally implemented by end-user code.</p><h2
id="ReleaseNotes5.4-BreakingFeatures">Breaking Features</h2><h3
id="ReleaseNotes5.4-ClassFactoryRemoved">ClassFactory Removed</h3><p>Tapestry's
use of the <a class="external-link"
href="http://www.csg.is.titech.ac.jp/~chiba/javassist/"
rel="nofollow">Javassist</a> bytecode library has been completely removed,
along with many related services, such as <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/ioc/services/ClassFactory.html">ClassFactory</a>,
that were deprecated in 5.3. Use <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/PlasticProxyFactory.html">PlasticProxyFactory</a>
instead. Most users will not be affected by this unless they relied on
Tapestry's dependency on Javassist.</p><h3
id="ReleaseNotes5.4-ClientBehaviorSupportFunctionalityRemoved">ClientBehaviorSupport
Functionality Removed</h3><p>This service collected details a
bout zone usage, including the client-side behavior associated with
<code>FormFragment</code>s. This interface is only kept for binary
compatibility in Tapestry 5.4; the implementation no longer does anything but
throw exceptions and will be removed in 5.5 or later.</p><h3
id="ReleaseNotes5.4-FormInjectorRemoved">FormInjector Removed</h3><p>The
FormInjector component was removed; it was intended for use only inside the
AjaxFormLoop component (which was rewritten in 5.4 and no longer uses
FormInjector). FormInjector was not widely used elsewhere, if it was used at
all.</p><h3
id="ReleaseNotes5.4-MarkupWriterFactoryAPIChanged">MarkupWriterFactory API
Changed</h3><p>The <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/MarkupWriterFactory.html">MarkupWriterFactory</a>
interface has 3 new methods, added to support the HTML5 rules for element
endings. If you have any classes that <em>implement</em> MarkupWriterFactory
(which is rare)
, they'll need to be modified to implement the new methods. As noted in the <a
class="external-link"
href="http://tapestry.apache.org/5.4/apidocs/org/apache/tapestry5/services/ClientBehaviorSupport.html">Javadocs</a>,
use JavaScriptSupport directly instead.</p><h3
id="ReleaseNotes5.4-InjectedScriptsatBottom">Injected Scripts at
Bottom</h3><p>In prior versions of Tapestry, JavaScript libraries injected into
the page (via the @<a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Import.html">Import</a>
annotation, or via <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/javascript/JavaScriptSupport.html">JavaScriptSupport</a>),
were injected into the <head> element of the HTML page, either at the
end of the element, or before any existing <script> element.</p><p>With
this release, the Tapestry integrates with <a class="external-link"
href="http://requirejs.org/"
rel="nofollow">RequireJS</a> to dynamically load libraries. This may affect a
small number of JavaScript libraries, such as <a class="external-link"
href="http://www.google.com/analytics/" rel="nofollow">Google Analytics</a>
that need to be placed at the top of the page; in those cases, the library
should be added to the template of your application's main layout component,
instead of relying on @Import and JavaScriptSupport.</p><h3
id="ReleaseNotes5.4-NoRedirectOnFormValidationErrors">No Redirect On Form
Validation Errors</h3><p>In prior releases of Tapestry, when a client-side form
was submitted and there were server-side validation errors, Tapestry would
perform a redirect-after-post to re-render the page; this meant that the <a
class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ValidationTracker.html">ValidationTracker</a>
object that stores validation errors would, itself, need to persist to the new
render request, causing a server-sid
e session to be created. Starting in 5.4, the default behavior for server-side
validation exceptions is to re-render the page content immediately, within the
same request; this obviates the need to use a persistent field to store the
tracker.</p><h2 id="ReleaseNotes5.4-NewFeatures">New Features</h2><h3
id="ReleaseNotes5.4-Componentfieldvisibility">Component field
visibility</h3><p>In prior versions of Tapestry, all instance fields of
components had to be visibility private; starting with versions 5.3.2 and 5.4,
this has been relaxed. Component fields may be protected, or package private
(that is, no visibility modifier). Fields that are final, or annotated with @<a
class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Retain.html">Retain</a>
may even be public. In any case, this makes it easier for pages to work with
other pages in the same package, and for subclasses to more easily access the
fields (including parameter fields, or
injections) provided by base classes. This feature should be used with care,
as it can lead to designs that are more difficult to maintain.</p><h3
id="ReleaseNotes5.4-JavaScriptModules">JavaScript Modules</h3><p>Prior releases
of Tapestry primarily organized client-side logic in terms of JavaScript
libraries. These libraries can be declaratively imported into the page (either
during a full-page render, or during an Ajax partial page update). In addition,
libraries can be combined together into <em>stacks</em>, which (in a production
application) are combined into a single virtual asset.</p><p>The library
approach is <a href="javascript-rewrite-in-54.html">fundamentally limited in a
number of ways</a>, including namespace pollution and dealing with dependencies
between libraries. Tapestry 5.4 introduces a parallel mechanism, based on <a
class="external-link" href="http://requirejs.org" rel="nofollow">RequireJS</a>
and the <a class="external-link" href="https://github.com/amdjs/amd
js-api/wiki/AMD" rel="nofollow">Asynchronous Module Definition</a> as a way to
speed up initial page load and organize client-side JavaScript in a more
expressive and maintainable way.</p><h3
id="ReleaseNotes5.4-Client-sideAPIforinvokingserver-sideevents">Client-side API
for invoking server-side events</h3><p>Tapestry 5.4.2 adds an API which makes
it easy for server-side events to be invoked from JavaScript. In the
server-side, you first need to annotate the event handler methods you want
exposed with the new <code>@PublishEvent</code> annotation. Then, in JS,
all you need to do is to call the <code>t5/core/ajax</code> function
with the server-side event name/type in the <code>url</code> parameter
and with an <code>options</code> parameter containing
an <code>element</code> property, be it null or specifying an DOM element
to be used as the starting point for finding the event information. More
details in the <a href="ajax-and-zones.html">Ajax and
Zones page</a>.</p><h2> Sub-task
+ <div id="ConfluenceContent"><p>
+</p><div class="atb-scrollbar-macro">
+ <div class="prev">
+ <a href="release-notes-538.html" rel="prev">
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-left">Previous</span>
+ <span class="title">Release Notes 5.3.8</span>
+ </a>
+
+ </div>
+ <div class="parent">
+ <a href="release-notes.html" rel="parent">
+ <span class="aui-icon
aui-icon-small atb-icon-arrow-up">Up</span>
+ <span class="title">Release
Notes</span>
+ </a>
+
+ </div>
+ <div class="next">
+ <a href="release-notes-541.html" rel="next">
+ <span class="title">Release Notes 5.4.1</span>
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-right">Next</span>
+ </a>
+
+ </div>
+</div>This is the consolidated list of changes between Tapestry versions 5.3
and 5.4. To upgrade to 5.4, most users who are not using deprecated features
will be able to just update the dependency version in their Maven POM file or
Gradle build script (or <a href="download.html">download</a> the new JAR
files) and the new version will just work, although the introduction of
Bootstrap CSS will require some styling adjustments for most applications not
already using Bootstrap. Please read carefully below before upgrading, and also
review the <a href="how-to-upgrade.html">How to Upgrade</a>
instructions.<h2 id="ReleaseNotes5.4-IncompatibleAPIs">Incompatible
APIs</h2><h3
id="ReleaseNotes5.4-JavaScriptSupport">JavaScriptSupport</h3><p>Some existing
methods of JavaScriptSupport were changed from returning void, to returning the
JavaScriptSupport instance, to allow for chaining of calls. This interface is
consumed by end-user code, but not generally implemented by end-user code.</p>
<h2 id="ReleaseNotes5.4-BreakingFeatures">Breaking Features</h2><h3
id="ReleaseNotes5.4-ClassFactoryRemoved">ClassFactory Removed</h3><p>Tapestry's
use of the <a class="external-link"
href="http://www.csg.is.titech.ac.jp/~chiba/javassist/"
rel="nofollow">Javassist</a> bytecode library has been completely removed,
along with many related services, such as <a class="external-link"
href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/ioc/services/ClassFactory.html">ClassFactory</a>,
that were deprecated in 5.3. Use <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/services/PlasticProxyFactory.html">PlasticProxyFactory</a>
instead. Most users will not be affected by this unless they relied on
Tapestry's dependency on Javassist.</p><h3
id="ReleaseNotes5.4-ClientBehaviorSupportFunctionalityRemoved">ClientBehaviorSupport
Functionality Removed</h3><p>This service collected details about zone usage,
including the client-side be
havior associated with <code>FormFragment</code>s. This interface is only kept
for binary compatibility in Tapestry 5.4; the implementation no longer does
anything but throw exceptions and will be removed in 5.5 or later.</p><h3
id="ReleaseNotes5.4-FormInjectorRemoved">FormInjector Removed</h3><p>The
FormInjector component was removed; it was intended for use only inside the
AjaxFormLoop component (which was rewritten in 5.4 and no longer uses
FormInjector). FormInjector was not widely used elsewhere, if it was used at
all.</p><h3
id="ReleaseNotes5.4-MarkupWriterFactoryAPIChanged">MarkupWriterFactory API
Changed</h3><p>The <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/MarkupWriterFactory.html">MarkupWriterFactory</a>
interface has 3 new methods, added to support the HTML5 rules for element
endings. If you have any classes that <em>implement</em> MarkupWriterFactory
(which is rare), they'll need to be modified to implement th
e new methods. As noted in the <a class="external-link"
href="http://tapestry.apache.org/5.4/apidocs/org/apache/tapestry5/services/ClientBehaviorSupport.html">Javadocs</a>,
use JavaScriptSupport directly instead.</p><h3
id="ReleaseNotes5.4-InjectedScriptsatBottom">Injected Scripts at
Bottom</h3><p>In prior versions of Tapestry, JavaScript libraries injected into
the page (via the @<a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Import.html">Import</a>
annotation, or via <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/javascript/JavaScriptSupport.html">JavaScriptSupport</a>),
were injected into the <head> element of the HTML page, either at the
end of the element, or before any existing <script> element.</p><p>With
this release, the Tapestry integrates with <a class="external-link"
href="http://requirejs.org/" rel="nofollow">RequireJS</a> to dynamically l
oad libraries. This may affect a small number of JavaScript libraries, such as
<a class="external-link" href="http://www.google.com/analytics/"
rel="nofollow">Google Analytics</a> that need to be placed at the top of the
page; in those cases, the library should be added to the template of your
application's main layout component, instead of relying on @Import and
JavaScriptSupport.</p><h3
id="ReleaseNotes5.4-NoRedirectOnFormValidationErrors">No Redirect On Form
Validation Errors</h3><p>In prior releases of Tapestry, when a client-side form
was submitted and there were server-side validation errors, Tapestry would
perform a redirect-after-post to re-render the page; this meant that the <a
class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ValidationTracker.html">ValidationTracker</a>
object that stores validation errors would, itself, need to persist to the new
render request, causing a server-side session to be created. Starting in 5.4,
the
default behavior for server-side validation exceptions is to re-render the
page content immediately, within the same request; this obviates the need to
use a persistent field to store the tracker.</p><h2
id="ReleaseNotes5.4-NewFeatures">New Features</h2><h3
id="ReleaseNotes5.4-Componentfieldvisibility">Component field
visibility</h3><p>In prior versions of Tapestry, all instance fields of
components had to be visibility private; starting with versions 5.3.2 and 5.4,
this has been relaxed. Component fields may be protected, or package private
(that is, no visibility modifier). Fields that are final, or annotated with @<a
class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/Retain.html">Retain</a>
may even be public. In any case, this makes it easier for pages to work with
other pages in the same package, and for subclasses to more easily access the
fields (including parameter fields, or injections) provided by base classes.
This fe
ature should be used with care, as it can lead to designs that are more
difficult to maintain.</p><h3 id="ReleaseNotes5.4-JavaScriptModules">JavaScript
Modules</h3><p>Prior releases of Tapestry primarily organized client-side logic
in terms of JavaScript libraries. These libraries can be declaratively imported
into the page (either during a full-page render, or during an Ajax partial page
update). In addition, libraries can be combined together into <em>stacks</em>,
which (in a production application) are combined into a single virtual
asset.</p><p>The library approach is <a
href="javascript-rewrite-in-54.html">fundamentally limited in a number of
ways</a>, including namespace pollution and dealing with dependencies between
libraries. Tapestry 5.4 introduces a parallel mechanism, based on <a
class="external-link" href="http://requirejs.org" rel="nofollow">RequireJS</a>
and the <a class="external-link"
href="https://github.com/amdjs/amdjs-api/wiki/AMD" rel="nofollow">Asynchronous
Module Definition</a> as a way to speed up initial page load and organize
client-side JavaScript in a more expressive and maintainable way.</p><h3
id="ReleaseNotes5.4-Client-sideAPIforinvokingserver-sideevents">Client-side API
for invoking server-side events</h3><p>Tapestry 5.4.2 adds an API which makes
it easy for server-side events to be invoked from JavaScript. In the
server-side, you first need to annotate the event handler methods you want
exposed with the new <code>@PublishEvent</code> annotation. Then, in JS,
all you need to do is to call the <code>t5/core/ajax</code> function
with the server-side event name/type in the <code>url</code> parameter
and with an <code>options</code> parameter containing
an <code>element</code> property, be it null or specifying an DOM element
to be used as the starting point for finding the event information. More
details in the <a href="ajax-and-zones.html">Ajax and Zones
page</a>.</p><h2> Sub-task
</h2>
<ul><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-2445">TAP5-2445</a>] -
Reduce usage of PerthreadMap in AbstractConditional
</li><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-2446">TAP5-2446</a>] -
Use ObjectCreator instead of PerThreadValue when appropriate
@@ -599,14 +622,47 @@
</li><li>[<a
href="https://issues.apache.org/jira/browse/TAP5-2353">TAP5-2353</a>] -
It should be possible to unregister DOM event listeners
</li></ul>
-</div>
+
+<div class="atb-scrollbar-macro">
+ <div class="prev">
+ <a href="release-notes-538.html" rel="prev">
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-left">Previous</span>
+ <span class="title">Release Notes 5.3.8</span>
+ </a>
+
+ </div>
+ <div class="parent">
+ <a href="release-notes.html" rel="parent">
+ <span class="aui-icon
aui-icon-small atb-icon-arrow-up">Up</span>
+ <span class="title">Release
Notes</span>
+ </a>
+
+ </div>
+ <div class="next">
+ <a href="release-notes-541.html" rel="next">
+ <span class="title">Release Notes 5.4.1</span>
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-right">Next</span>
+ </a>
+
+ </div>
+</div></div>
</div>
<div class="clearer"></div>
<div id="footer">
<div id="footer"><p>Apache Tapestry, Tapestry, Apache, the Apache
feather logo, and the Apache Tapestry project logo are trademarks of The Apache
Software Foundation.<br clear="none">
-</p><p></p><div class="aui-message aui-message-error"><p
class="title"><strong>Error rendering macro 'html'</strong></p><p>Your
Confluence administrator has disallowed the use of Javascript in the HTML
macro. This setting can be changed using HTML for Confluence Configuration.
Please see your administrator for details.</p></div><p></p></div>
+</p><p><script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-400821-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript';
ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
+ })();
+</script></p><p></p></div>
</div>
<div id="comments_thread"></div>
Modified: websites/production/tapestry/content/release-upgrade-faq.html
==============================================================================
--- websites/production/tapestry/content/release-upgrade-faq.html (original)
+++ websites/production/tapestry/content/release-upgrade-faq.html Mon Aug 26
21:20:28 2019
@@ -77,21 +77,69 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><h1
id="ReleaseUpgradeFAQ-ReleaseUpgrade">Release Upgrade</h1><p>Main Article: <a
href="release-upgrade-faq.html">Release Upgrade FAQ</a></p><h2
id="ReleaseUpgradeFAQ-Contents">Contents</h2><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1566728412688 {padding: 0px;}
-div.rbtoc1566728412688 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1566728412688 li {margin-left: 0px;padding-left: 0px;}
+ <div id="ConfluenceContent"><p>
+</p><div class="atb-scrollbar-macro">
+ <div class="prev">
+ <a href="maven-support-faq.html" rel="prev">
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-left">Previous</span>
+ <span class="title">Maven Support FAQ</span>
+ </a>
-/*]]>*/</style></p><div class="toc-macro rbtoc1566728412688">
+ </div>
+ <div class="parent">
+ <a href="frequently-asked-questions.html" rel="parent">
+ <span class="aui-icon
aui-icon-small atb-icon-arrow-up">Up</span>
+ <span class="title">Frequently Asked
Questions</span>
+ </a>
+
+ </div>
+ <div class="next">
+
+ </div>
+</div><h1 id="ReleaseUpgradeFAQ-ReleaseUpgrade">Release Upgrade</h1><p>Main
Article: <a href="release-upgrade-faq.html">Release Upgrade FAQ</a></p><h2
id="ReleaseUpgradeFAQ-Contents">Contents</h2><p><style
type="text/css">/*<![CDATA[*/
+div.rbtoc1566854395964 {padding: 0px;}
+div.rbtoc1566854395964 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1566854395964 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1566854395964">
<ul class="toc-indentation"><li><a
href="#ReleaseUpgradeFAQ-WhydoIgetanexceptionaboutorg.apache.tapestry5.internal.services.RequestPathOptimizerafterupgradingto5.2?">Why
do I get an exception about
org.apache.tapestry5.internal.services.RequestPathOptimizer after upgrading to
5.2?</a></li></ul>
-</div><h2
id="ReleaseUpgradeFAQ-WhydoIgetanexceptionaboutorg.apache.tapestry5.internal.services.RequestPathOptimizerafterupgradingto5.2?">Why
do I get an exception about
org.apache.tapestry5.internal.services.RequestPathOptimizer after upgrading to
5.2?</h2><p>Although Tapestry works very hard to keep backwards compatibility
between releases for <em>public</em> APIs, all <em>internal</em> APIs are
subject to change. This error is commonly due to the use of the ChenilleKit
library, which makes use of some internal APIs. You must also upgrade your
ChenilleKit dependency when moving from Tapestry 5.1 to 5.2 or later. See the
<a class="external-link"
href="http://tapestry.markmail.org/thread/3cj2wuvl4idnpmjr"
rel="nofollow">complete discussion of this from the Tapestry user mailing
list</a>.</p></div>
+</div><h2
id="ReleaseUpgradeFAQ-WhydoIgetanexceptionaboutorg.apache.tapestry5.internal.services.RequestPathOptimizerafterupgradingto5.2?">Why
do I get an exception about
org.apache.tapestry5.internal.services.RequestPathOptimizer after upgrading to
5.2?</h2><p>Although Tapestry works very hard to keep backwards compatibility
between releases for <em>public</em> APIs, all <em>internal</em> APIs are
subject to change. This error is commonly due to the use of the ChenilleKit
library, which makes use of some internal APIs. You must also upgrade your
ChenilleKit dependency when moving from Tapestry 5.1 to 5.2 or later. See the
<a class="external-link"
href="http://tapestry.markmail.org/thread/3cj2wuvl4idnpmjr"
rel="nofollow">complete discussion of this from the Tapestry user mailing
list</a>.
+</p><div class="atb-scrollbar-macro">
+ <div class="prev">
+ <a href="maven-support-faq.html" rel="prev">
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-left">Previous</span>
+ <span class="title">Maven Support FAQ</span>
+ </a>
+
+ </div>
+ <div class="parent">
+ <a href="frequently-asked-questions.html" rel="parent">
+ <span class="aui-icon
aui-icon-small atb-icon-arrow-up">Up</span>
+ <span class="title">Frequently Asked
Questions</span>
+ </a>
+
+ </div>
+ <div class="next">
+
+ </div>
+</div></div>
</div>
<div class="clearer"></div>
<div id="footer">
<div id="footer"><p>Apache Tapestry, Tapestry, Apache, the Apache
feather logo, and the Apache Tapestry project logo are trademarks of The Apache
Software Foundation.<br clear="none">
-</p><p></p><div class="aui-message aui-message-error"><p
class="title"><strong>Error rendering macro 'html'</strong></p><p>Your
Confluence administrator has disallowed the use of Javascript in the HTML
macro. This setting can be changed using HTML for Confluence Configuration.
Please see your administrator for details.</p></div><p></p></div>
+</p><p><script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-400821-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript';
ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
+ })();
+</script></p><p></p></div>
</div>
<div id="comments_thread"></div>
Modified: websites/production/tapestry/content/request-processing-faq.html
==============================================================================
--- websites/production/tapestry/content/request-processing-faq.html (original)
+++ websites/production/tapestry/content/request-processing-faq.html Mon Aug 26
21:20:28 2019
@@ -77,12 +77,35 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><h1
id="RequestProcessingFAQ-RequestProcessing">Request Processing</h1><h2
id="RequestProcessingFAQ-Contents">Contents</h2><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1566728408227 {padding: 0px;}
-div.rbtoc1566728408227 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1566728408227 li {margin-left: 0px;padding-left: 0px;}
+ <div id="ConfluenceContent"><p>
+</p><div class="atb-scrollbar-macro">
+ <div class="prev">
+ <a href="integration-with-existing-applications.html" rel="prev">
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-left">Previous</span>
+ <span class="title">Integration with existing
applications</span>
+ </a>
-/*]]>*/</style></p><div class="toc-macro rbtoc1566728408227">
+ </div>
+ <div class="parent">
+ <a href="frequently-asked-questions.html" rel="parent">
+ <span class="aui-icon
aui-icon-small atb-icon-arrow-up">Up</span>
+ <span class="title">Frequently Asked
Questions</span>
+ </a>
+
+ </div>
+ <div class="next">
+ <a href="limitations.html" rel="next">
+ <span class="title">Limitations</span>
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-right">Next</span>
+ </a>
+
+ </div>
+</div><h1 id="RequestProcessingFAQ-RequestProcessing">Request
Processing</h1><h2 id="RequestProcessingFAQ-Contents">Contents</h2><p><style
type="text/css">/*<![CDATA[*/
+div.rbtoc1566854393777 {padding: 0px;}
+div.rbtoc1566854393777 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1566854393777 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1566854393777">
<ul class="toc-indentation"><li><a
href="#RequestProcessingFAQ-HowdoIgetTapestrytonothandlearequest?">How do I get
Tapestry to not handle a request?</a></li></ul>
</div><h2 id="RequestProcessingFAQ-HowdoIgetTapestrytonothandlearequest?">How
do I get Tapestry to <strong>not</strong> handle a request?</h2><p>Often, when
<a href="integration-with-existing-applications.html">integrating with outside
libraries, or working with legacy code</a>, you will want Tapestry to ignore a
request and let the normal servlet or other processing handle the
request.</p><p>The easy way to do this is to contribute a regular expression to
the <a href="configuration.html">IgnoredPathsFilter service</a>, whose job is
to exclude some requests.</p><div class="code panel pdl" style="border-width:
1px;"><div class="codeContent panelContent pdl">
<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java;
gutter: false; theme: Default" data-theme="Default">public static void
contributeIgnoredPathsFilter(Configuration<String> configuration)
@@ -90,14 +113,47 @@ div.rbtoc1566728408227 li {margin-left:
configuration.add("/dwr/.*");
}
</pre>
-</div></div><p>Alternately, you may contribute a <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/HttpServletRequestFilter.html">HttpServletRequestFilter</a>
to the <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/HttpServletRequestHandler.html">HttpServletRequestHandler</a>
pipeline. A filter that simply returns false from its <code>service()</code>
method will cause Tapestry to hand off the request to the servlet container for
normal handling. You would use this approach when a simple regular expression
is not sufficient to identify which requests should be
ignored.</p><p>Alternately, you can configure the Tapestry application to
execute inside a folder to avoid conflicts. See the notes on the <a
href="configuration.html">configuration page</a>.</p></div>
+</div></div><p>Alternately, you may contribute a <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/HttpServletRequestFilter.html">HttpServletRequestFilter</a>
to the <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/HttpServletRequestHandler.html">HttpServletRequestHandler</a>
pipeline. A filter that simply returns false from its <code>service()</code>
method will cause Tapestry to hand off the request to the servlet container for
normal handling. You would use this approach when a simple regular expression
is not sufficient to identify which requests should be
ignored.</p><p>Alternately, you can configure the Tapestry application to
execute inside a folder to avoid conflicts. See the notes on the <a
href="configuration.html">configuration page</a>.
+</p><div class="atb-scrollbar-macro">
+ <div class="prev">
+ <a href="integration-with-existing-applications.html" rel="prev">
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-left">Previous</span>
+ <span class="title">Integration with existing
applications</span>
+ </a>
+
+ </div>
+ <div class="parent">
+ <a href="frequently-asked-questions.html" rel="parent">
+ <span class="aui-icon
aui-icon-small atb-icon-arrow-up">Up</span>
+ <span class="title">Frequently Asked
Questions</span>
+ </a>
+
+ </div>
+ <div class="next">
+ <a href="limitations.html" rel="next">
+ <span class="title">Limitations</span>
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-right">Next</span>
+ </a>
+
+ </div>
+</div></div>
</div>
<div class="clearer"></div>
<div id="footer">
<div id="footer"><p>Apache Tapestry, Tapestry, Apache, the Apache
feather logo, and the Apache Tapestry project logo are trademarks of The Apache
Software Foundation.<br clear="none">
-</p><p></p><div class="aui-message aui-message-error"><p
class="title"><strong>Error rendering macro 'html'</strong></p><p>Your
Confluence administrator has disallowed the use of Javascript in the HTML
macro. This setting can be changed using HTML for Confluence Configuration.
Please see your administrator for details.</p></div><p></p></div>
+</p><p><script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-400821-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript';
ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
+ })();
+</script></p><p></p></div>
</div>
<div id="comments_thread"></div>
Modified: websites/production/tapestry/content/security-faq.html
==============================================================================
--- websites/production/tapestry/content/security-faq.html (original)
+++ websites/production/tapestry/content/security-faq.html Mon Aug 26 21:20:28
2019
@@ -77,12 +77,35 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><h1
id="SecurityFAQ-Security">Security</h1><p>Main Article: <a
href="security.html">Security</a></p><h2
id="SecurityFAQ-Contents">Contents</h2><p><style type="text/css">/*<![CDATA[*/
-div.rbtoc1566728410409 {padding: 0px;}
-div.rbtoc1566728410409 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1566728410409 li {margin-left: 0px;padding-left: 0px;}
+ <div id="ConfluenceContent"><p>
+</p><div class="atb-scrollbar-macro">
+ <div class="prev">
+ <a href="tapestry-inversion-of-control-faq.html" rel="prev">
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-left">Previous</span>
+ <span class="title">Tapestry Inversion of
Control FAQ</span>
+ </a>
-/*]]>*/</style></p><div class="toc-macro rbtoc1566728410409">
+ </div>
+ <div class="parent">
+ <a href="frequently-asked-questions.html" rel="parent">
+ <span class="aui-icon
aui-icon-small atb-icon-arrow-up">Up</span>
+ <span class="title">Frequently Asked
Questions</span>
+ </a>
+
+ </div>
+ <div class="next">
+ <a href="integration-with-existing-applications.html" rel="next">
+ <span class="title">Integration with existing
applications</span>
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-right">Next</span>
+ </a>
+
+ </div>
+</div><h1 id="SecurityFAQ-Security">Security</h1><p>Main Article: <a
href="security.html">Security</a></p><h2
id="SecurityFAQ-Contents">Contents</h2><p><style type="text/css">/*<![CDATA[*/
+div.rbtoc1566854397154 {padding: 0px;}
+div.rbtoc1566854397154 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1566854397154 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1566854397154">
<ul class="toc-indentation"><li><a
href="#SecurityFAQ-Thebuilt-inDashboardpagearevisibleinmyproductionapplicationandIdon'twantthemtobe,whatcanIdo?">The
built-in Dashboard page are visible in my production application and I don't
want them to be, what can I do?</a></li></ul>
</div><p> </p><div class="aui-label" style="float:right" title="Related
Articles">
@@ -135,14 +158,47 @@ div.rbtoc1566728410409 li {margin-left:
if (productionMode) { configuration.override("LocalhostOnly", null); }
}
</pre>
-</div></div><p></p></div>
+</div></div><p>
+</p><div class="atb-scrollbar-macro">
+ <div class="prev">
+ <a href="tapestry-inversion-of-control-faq.html" rel="prev">
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-left">Previous</span>
+ <span class="title">Tapestry Inversion of
Control FAQ</span>
+ </a>
+
+ </div>
+ <div class="parent">
+ <a href="frequently-asked-questions.html" rel="parent">
+ <span class="aui-icon
aui-icon-small atb-icon-arrow-up">Up</span>
+ <span class="title">Frequently Asked
Questions</span>
+ </a>
+
+ </div>
+ <div class="next">
+ <a href="integration-with-existing-applications.html" rel="next">
+ <span class="title">Integration with existing
applications</span>
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-right">Next</span>
+ </a>
+
+ </div>
+</div></div>
</div>
<div class="clearer"></div>
<div id="footer">
<div id="footer"><p>Apache Tapestry, Tapestry, Apache, the Apache
feather logo, and the Apache Tapestry project logo are trademarks of The Apache
Software Foundation.<br clear="none">
-</p><p></p><div class="aui-message aui-message-error"><p
class="title"><strong>Error rendering macro 'html'</strong></p><p>Your
Confluence administrator has disallowed the use of Javascript in the HTML
macro. This setting can be changed using HTML for Confluence Configuration.
Please see your administrator for details.</p></div><p></p></div>
+</p><p><script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-400821-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript';
ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
+ })();
+</script></p><p></p></div>
</div>
<div id="comments_thread"></div>
Modified: websites/production/tapestry/content/security.html
==============================================================================
--- websites/production/tapestry/content/security.html (original)
+++ websites/production/tapestry/content/security.html Mon Aug 26 21:20:28 2019
@@ -154,7 +154,17 @@
<div id="footer">
<div id="footer"><p>Apache Tapestry, Tapestry, Apache, the Apache
feather logo, and the Apache Tapestry project logo are trademarks of The Apache
Software Foundation.<br clear="none">
-</p><p></p><div class="aui-message aui-message-error"><p
class="title"><strong>Error rendering macro 'html'</strong></p><p>Your
Confluence administrator has disallowed the use of Javascript in the HTML
macro. This setting can be changed using HTML for Confluence Configuration.
Please see your administrator for details.</p></div><p></p></div>
+</p><p><script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-400821-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript';
ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
+ })();
+</script></p><p></p></div>
</div>
<div id="comments_thread"></div>
Modified: websites/production/tapestry/content/session-storage.html
==============================================================================
--- websites/production/tapestry/content/session-storage.html (original)
+++ websites/production/tapestry/content/session-storage.html Mon Aug 26
21:20:28 2019
@@ -124,11 +124,11 @@
<p>Ordinary <a href="persistent-page-data.html">page-persistent
fields</a></p><p>won't work for this, since persistent fields are available
only to a specific page, not shared across multiple pages.</p><p>Tapestry
provides two mechanisms for storing such data: Session State Objects and
Session Attributes. When deciding between the two, it's best to use Session
State Objects for complex objects, and Session Attributes for simple
types.</p><h2 id="SessionStorage-SessionStateObjects">Session State
Objects</h2><p>With a Session State Object (SSO), the value is automatically
stored outside the page; with the default storage strategy, it is stored in the
session. Such a value is global to all pages <em>for the same user</em>, but is
stored separately for different users.</p><p>A field holding an SSO is marked
with the @<a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/SessionState.html">SessionState</a>
annotation.</p><div class="
navmenu" style="float:right; background:white; margin:3px; padding:3px">
<div class="panel" style="border-width: 1px;"><div class="panelHeader"
style="border-bottom-width: 1px;"><b>Contents</b></div><div
class="panelContent">
<style type="text/css">/*<![CDATA[*/
-div.rbtoc1566728387504 {padding: 0px;}
-div.rbtoc1566728387504 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1566728387504 li {margin-left: 0px;padding-left: 0px;}
+div.rbtoc1566854374530 {padding: 0px;}
+div.rbtoc1566854374530 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1566854374530 li {margin-left: 0px;padding-left: 0px;}
-/*]]>*/</style><div class="toc-macro rbtoc1566728387504">
+/*]]>*/</style><div class="toc-macro rbtoc1566854374530">
<ul class="toc-indentation"><li>Related Articles</li></ul>
<ul><li><a href="#SessionStorage-SessionStateObjects">Session State
Objects</a>
<ul class="toc-indentation"><li><a
href="#SessionStorage-Pitfalls">Pitfalls</a></li><li><a
href="#SessionStorage-CheckforCreation">Check for Creation</a></li><li><a
href="#SessionStorage-PersistenceStrategies">Persistence
Strategies</a></li><li><a href="#SessionStorage-ConfiguringSSOs">Configuring
SSOs</a></li></ul>
@@ -229,7 +229,17 @@ public class MyPage {
<div id="footer">
<div id="footer"><p>Apache Tapestry, Tapestry, Apache, the Apache
feather logo, and the Apache Tapestry project logo are trademarks of The Apache
Software Foundation.<br clear="none">
-</p><p></p><div class="aui-message aui-message-error"><p
class="title"><strong>Error rendering macro 'html'</strong></p><p>Your
Confluence administrator has disallowed the use of Javascript in the HTML
macro. This setting can be changed using HTML for Confluence Configuration.
Please see your administrator for details.</p></div><p></p></div>
+</p><p><script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-400821-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript';
ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
+ })();
+</script></p><p></p></div>
</div>
<div id="comments_thread"></div>
Modified: websites/production/tapestry/content/specific-errors-faq.html
==============================================================================
--- websites/production/tapestry/content/specific-errors-faq.html (original)
+++ websites/production/tapestry/content/specific-errors-faq.html Mon Aug 26
21:20:28 2019
@@ -77,12 +77,35 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><h1
id="SpecificErrorsFAQ-SpecificErrors">Specific Errors</h1><h2
id="SpecificErrorsFAQ-Contents">Contents</h2><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1566728390515 {padding: 0px;}
-div.rbtoc1566728390515 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1566728390515 li {margin-left: 0px;padding-left: 0px;}
+ <div id="ConfluenceContent"><p>
+</p><div class="atb-scrollbar-macro">
+ <div class="prev">
+ <a href="limitations.html" rel="prev">
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-left">Previous</span>
+ <span class="title">Limitations</span>
+ </a>
-/*]]>*/</style></p><div class="toc-macro rbtoc1566728390515">
+ </div>
+ <div class="parent">
+ <a href="frequently-asked-questions.html" rel="parent">
+ <span class="aui-icon
aui-icon-small atb-icon-arrow-up">Up</span>
+ <span class="title">Frequently Asked
Questions</span>
+ </a>
+
+ </div>
+ <div class="next">
+ <a href="hibernate-support-faq.html" rel="next">
+ <span class="title">Hibernate Support FAQ</span>
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-right">Next</span>
+ </a>
+
+ </div>
+</div><h1 id="SpecificErrorsFAQ-SpecificErrors">Specific Errors</h1><h2
id="SpecificErrorsFAQ-Contents">Contents</h2><p><style
type="text/css">/*<![CDATA[*/
+div.rbtoc1566854377089 {padding: 0px;}
+div.rbtoc1566854377089 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1566854377089 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1566854377089">
<ul class="toc-indentation"><li><a
href="#SpecificErrorsFAQ-WhydoIgettheexception"Noserviceimplementstheinterfaceorg.apache.tapestry5.internal.InternalComponentResources"whentryingtousetheBeanEditFormcomponent?">Why
do I get the exception "No service implements the interface
org.apache.tapestry5.internal.InternalComponentResources" when trying to use
the BeanEditForm component?</a></li><li><a
href="#SpecificErrorsFAQ-Igetanerrorabout"Pagedidnotgenerateanymarkupwhenrendered."butIhaveatemplate,whathappened?">I
get an error about "Page did not generate any markup when rendered." but I
have a template, what happened?</a></li><li><a
href="#SpecificErrorsFAQ-MyapplicationfailswiththeerrorPermGen,howdoIfixthis?">My
application fails with the error PermGen, how do I fix this?</a></li><li><a
href="#SpecificErrorsFAQ-WhydoIsometimesgetajava.lang.NoSuchMethodErrorexceptionafterreloadingmypage?">Why
do I sometimes get a java.lang.NoSuchMethodError exception after reloadi
ng my page?</a></li><li><a
href="#SpecificErrorsFAQ-Whydomylogscontain"java.lang.RuntimeException:FormsrequirethattherequestmethodbePOSTandthatthet:formdataqueryparameterhavevalues"?">Why
do my logs contain "java.lang.RuntimeException: Forms require that the request
method be POST and that the t:formdata query parameter have
values"?</a></li></ul>
</div><div class="aui-label" style="float:right" title="Related Articles">
@@ -111,7 +134,7 @@ div.rbtoc1566728390515 li {margin-left:
<span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="specific-errors-faq.html">Specific Errors
FAQ</a>
+ <a href="error-page-recipe.html">Error Page Recipe</a>
</div>
@@ -120,7 +143,7 @@ div.rbtoc1566728390515 li {margin-left:
<span class="icon aui-icon content-type-page"
title="Page">Page:</span> </div>
<div class="details">
- <a href="error-page-recipe.html">Error Page Recipe</a>
+ <a href="specific-errors-faq.html">Specific Errors
FAQ</a>
</div>
@@ -164,14 +187,47 @@ div.rbtoc1566728390515 li {margin-left:
}
};
}</pre>
-</div></div><p><em>Thanks to <a class="external-link"
href="http://mail-archives.apache.org/mod_mbox/tapestry-users/201110.mbox/%[email protected]%3E">Lenny
Primak</a> for the above code. A slightly less fragile approach is <a
class="external-link"
href="https://mail-archives.apache.org/mod_mbox/tapestry-users/201509.mbox/%3ccae26fnjevncyv52kms-kpsewwnaln9pg6lg60xzkxuhs0ut...@mail.gmail.com%3E">described
here</a>. When <a class="external-link"
href="https://issues.apache.org/jira/browse/TAP5-1733">TAP5-1733</a> is fixed a
much less fragile solution may be
possible.</em></p><p>  </p><p> </p></div>
+</div></div><p><em>Thanks to <a class="external-link"
href="http://mail-archives.apache.org/mod_mbox/tapestry-users/201110.mbox/%[email protected]%3E">Lenny
Primak</a> for the above code. A slightly less fragile approach is <a
class="external-link"
href="https://mail-archives.apache.org/mod_mbox/tapestry-users/201509.mbox/%3ccae26fnjevncyv52kms-kpsewwnaln9pg6lg60xzkxuhs0ut...@mail.gmail.com%3E">described
here</a>. When <a class="external-link"
href="https://issues.apache.org/jira/browse/TAP5-1733">TAP5-1733</a> is fixed a
much less fragile solution may be possible.</em></p><p> 
+</p><div class="atb-scrollbar-macro">
+ <div class="prev">
+ <a href="limitations.html" rel="prev">
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-left">Previous</span>
+ <span class="title">Limitations</span>
+ </a>
+
+ </div>
+ <div class="parent">
+ <a href="frequently-asked-questions.html" rel="parent">
+ <span class="aui-icon
aui-icon-small atb-icon-arrow-up">Up</span>
+ <span class="title">Frequently Asked
Questions</span>
+ </a>
+
+ </div>
+ <div class="next">
+ <a href="hibernate-support-faq.html" rel="next">
+ <span class="title">Hibernate Support FAQ</span>
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-right">Next</span>
+ </a>
+
+ </div>
+</div> <p> </p></div>
</div>
<div class="clearer"></div>
<div id="footer">
<div id="footer"><p>Apache Tapestry, Tapestry, Apache, the Apache
feather logo, and the Apache Tapestry project logo are trademarks of The Apache
Software Foundation.<br clear="none">
-</p><p></p><div class="aui-message aui-message-error"><p
class="title"><strong>Error rendering macro 'html'</strong></p><p>Your
Confluence administrator has disallowed the use of Javascript in the HTML
macro. This setting can be changed using HTML for Confluence Configuration.
Please see your administrator for details.</p></div><p></p></div>
+</p><p><script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-400821-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript';
ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
+ })();
+</script></p><p></p></div>
</div>
<div id="comments_thread"></div>
Modified:
websites/production/tapestry/content/tapestry-inversion-of-control-faq.html
==============================================================================
--- websites/production/tapestry/content/tapestry-inversion-of-control-faq.html
(original)
+++ websites/production/tapestry/content/tapestry-inversion-of-control-faq.html
Mon Aug 26 21:20:28 2019
@@ -77,12 +77,35 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><h1
id="TapestryInversionofControlFAQ-TapestryInversionofControlContainer">Tapestry
Inversion of Control Container</h1><p>Main article: <a
href="tapestry-inversion-of-control-faq.html">Tapestry IoC</a></p><h2
id="TapestryInversionofControlFAQ-Contents">Contents</h2><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1566728393663 {padding: 0px;}
-div.rbtoc1566728393663 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1566728393663 li {margin-left: 0px;padding-left: 0px;}
+ <div id="ConfluenceContent"><p>
+</p><div class="atb-scrollbar-macro">
+ <div class="prev">
+ <a href="injection-faq.html" rel="prev">
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-left">Previous</span>
+ <span class="title">Injection FAQ</span>
+ </a>
-/*]]>*/</style></p><div class="toc-macro rbtoc1566728393663">
+ </div>
+ <div class="parent">
+ <a href="frequently-asked-questions.html" rel="parent">
+ <span class="aui-icon
aui-icon-small atb-icon-arrow-up">Up</span>
+ <span class="title">Frequently Asked
Questions</span>
+ </a>
+
+ </div>
+ <div class="next">
+ <a href="security-faq.html" rel="next">
+ <span class="title">Security FAQ</span>
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-right">Next</span>
+ </a>
+
+ </div>
+</div><h1
id="TapestryInversionofControlFAQ-TapestryInversionofControlContainer">Tapestry
Inversion of Control Container</h1><p>Main article: <a
href="tapestry-inversion-of-control-faq.html">Tapestry IoC</a></p><h2
id="TapestryInversionofControlFAQ-Contents">Contents</h2><p><style
type="text/css">/*<![CDATA[*/
+div.rbtoc1566854380079 {padding: 0px;}
+div.rbtoc1566854380079 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1566854380079 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1566854380079">
<ul class="toc-indentation"><li><a
href="#TapestryInversionofControlFAQ-WhydoIneedtodefineaninterfaceformyservices?Whycan'tIjustusetheclassitself?">Why
do I need to define an interface for my services? Why can't I just use the
class itself?</a></li><li><a
href="#TapestryInversionofControlFAQ-Myservicestartsathread;howdoIknowwhentheapplicationisshuttingdown,tostopthatthread?">My
service starts a thread; how do I know when the application is shutting down,
to stop that thread?</a></li><li><a
href="#TapestryInversionofControlFAQ-HowdoImakemyservicestartupwiththerestoftheapplication,ratherthanlazily?">How
do I make my service startup with the rest of the application, rather than
lazily?</a></li></ul>
</div><p> </p><div class="aui-label" style="float:right" title="Related
Articles">
@@ -166,14 +189,47 @@ div.rbtoc1566728393663 li {margin-left:
}
}
</pre>
-</div></div><p>After Tapestry invokes the constructor of the service
implementation, and after it performs any field injections, it invokes post
injection methods. The methods must be public and return void. Parameters to a
post injection method represent further injections ... in the above example,
the RegistryShutdownHub is injected into the PostInjection method, since it is
only used inside that one method.</p><div class="confluence-information-macro
confluence-information-macro-warning"><span class="aui-icon aui-icon-small
aui-iconfont-error confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>It is <strong>not</strong>
recommended that MyServiceImpl take RegistryShutdownHub as a constructor
parameter and register itself as a listener inside the constructor. Doing so is
an example of <a class="external-link"
href="http://www.ibm.com/developerworks/java/library/j-jtp0618.html"
rel="nofollow">unsafe publishing</a>, an unlikely but potential
thread safety issue.</p></div></div><p>This same technique will work for any
kind of resource that must be cleaned up or destroyed when the registry shuts
down.</p><div class="confluence-information-macro
confluence-information-macro-note"><span class="aui-icon aui-icon-small
aui-iconfont-warning confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>Be careful not to invoke methods
on any service proxy objects as they will also be shutting down with the
Registry. A RegistryShutdownListener should not be reliant on anything outside
of itself.</p></div></div><h3
id="TapestryInversionofControlFAQ-HowdoImakemyservicestartupwiththerestoftheapplication,ratherthanlazily?">How
do I make my service startup with the rest of the application, rather than
lazily?</h3><p>Tapestry services are designed to be <em>lazy</em>; they are
only fully realized when needed: when the first method on the service interface
is invoked.</p><p>Sometimes a service does extra w
ork that is desirable at application startup: examples may be registering
message handlers with a JMS implementation, or setting up indexing. Since the
service's constructor (or <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/PostInjection.html">@PostInjection</a>
methods) are not invoked until the service is realized.</p><p>The solution is
the <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/EagerLoad.html">@EagerLoad</a>
annotation; service implementation classes marked with this annotation are
loaded when the Registry is first startup, rather than lazily.</p></div>
+</div></div><p>After Tapestry invokes the constructor of the service
implementation, and after it performs any field injections, it invokes post
injection methods. The methods must be public and return void. Parameters to a
post injection method represent further injections ... in the above example,
the RegistryShutdownHub is injected into the PostInjection method, since it is
only used inside that one method.</p><div class="confluence-information-macro
confluence-information-macro-warning"><span class="aui-icon aui-icon-small
aui-iconfont-error confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>It is <strong>not</strong>
recommended that MyServiceImpl take RegistryShutdownHub as a constructor
parameter and register itself as a listener inside the constructor. Doing so is
an example of <a class="external-link"
href="http://www.ibm.com/developerworks/java/library/j-jtp0618.html"
rel="nofollow">unsafe publishing</a>, an unlikely but potential
thread safety issue.</p></div></div><p>This same technique will work for any
kind of resource that must be cleaned up or destroyed when the registry shuts
down.</p><div class="confluence-information-macro
confluence-information-macro-note"><span class="aui-icon aui-icon-small
aui-iconfont-warning confluence-information-macro-icon"></span><div
class="confluence-information-macro-body"><p>Be careful not to invoke methods
on any service proxy objects as they will also be shutting down with the
Registry. A RegistryShutdownListener should not be reliant on anything outside
of itself.</p></div></div><h3
id="TapestryInversionofControlFAQ-HowdoImakemyservicestartupwiththerestoftheapplication,ratherthanlazily?">How
do I make my service startup with the rest of the application, rather than
lazily?</h3><p>Tapestry services are designed to be <em>lazy</em>; they are
only fully realized when needed: when the first method on the service interface
is invoked.</p><p>Sometimes a service does extra w
ork that is desirable at application startup: examples may be registering
message handlers with a JMS implementation, or setting up indexing. Since the
service's constructor (or <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/PostInjection.html">@PostInjection</a>
methods) are not invoked until the service is realized.</p><p>The solution is
the <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ioc/annotations/EagerLoad.html">@EagerLoad</a>
annotation; service implementation classes marked with this annotation are
loaded when the Registry is first startup, rather than lazily.
+</p><div class="atb-scrollbar-macro">
+ <div class="prev">
+ <a href="injection-faq.html" rel="prev">
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-left">Previous</span>
+ <span class="title">Injection FAQ</span>
+ </a>
+
+ </div>
+ <div class="parent">
+ <a href="frequently-asked-questions.html" rel="parent">
+ <span class="aui-icon
aui-icon-small atb-icon-arrow-up">Up</span>
+ <span class="title">Frequently Asked
Questions</span>
+ </a>
+
+ </div>
+ <div class="next">
+ <a href="security-faq.html" rel="next">
+ <span class="title">Security FAQ</span>
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-right">Next</span>
+ </a>
+
+ </div>
+</div></div>
</div>
<div class="clearer"></div>
<div id="footer">
<div id="footer"><p>Apache Tapestry, Tapestry, Apache, the Apache
feather logo, and the Apache Tapestry project logo are trademarks of The Apache
Software Foundation.<br clear="none">
-</p><p></p><div class="aui-message aui-message-error"><p
class="title"><strong>Error rendering macro 'html'</strong></p><p>Your
Confluence administrator has disallowed the use of Javascript in the HTML
macro. This setting can be changed using HTML for Confluence Configuration.
Please see your administrator for details.</p></div><p></p></div>
+</p><p><script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-400821-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript';
ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
+ })();
+</script></p><p></p></div>
</div>
<div id="comments_thread"></div>
Modified: websites/production/tapestry/content/templating-and-markup-faq.html
==============================================================================
--- websites/production/tapestry/content/templating-and-markup-faq.html
(original)
+++ websites/production/tapestry/content/templating-and-markup-faq.html Mon Aug
26 21:20:28 2019
@@ -77,12 +77,35 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><h1
id="TemplatingandMarkupFAQ-TemplatingandMarkup">Templating and
Markup</h1><p>Main Article: <a href="component-templates.html">Component
Templates</a></p><h2
id="TemplatingandMarkupFAQ-Contents">Contents</h2><p><style
type="text/css">/*<![CDATA[*/
-div.rbtoc1566728394208 {padding: 0px;}
-div.rbtoc1566728394208 ul {list-style: disc;margin-left: 0px;}
-div.rbtoc1566728394208 li {margin-left: 0px;padding-left: 0px;}
+ <div id="ConfluenceContent"><p>
+</p><div class="atb-scrollbar-macro">
+ <div class="prev">
+ <a href="general-questions.html" rel="prev">
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-left">Previous</span>
+ <span class="title">General Questions</span>
+ </a>
-/*]]>*/</style></p><div class="toc-macro rbtoc1566728394208">
+ </div>
+ <div class="parent">
+ <a href="frequently-asked-questions.html" rel="parent">
+ <span class="aui-icon
aui-icon-small atb-icon-arrow-up">Up</span>
+ <span class="title">Frequently Asked
Questions</span>
+ </a>
+
+ </div>
+ <div class="next">
+ <a href="page-and-component-classes-faq.html" rel="next">
+ <span class="title">Page And Component Classes FAQ</span>
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-right">Next</span>
+ </a>
+
+ </div>
+</div><h1 id="TemplatingandMarkupFAQ-TemplatingandMarkup">Templating and
Markup</h1><p>Main Article: <a href="component-templates.html">Component
Templates</a></p><h2
id="TemplatingandMarkupFAQ-Contents">Contents</h2><p><style
type="text/css">/*<![CDATA[*/
+div.rbtoc1566854377693 {padding: 0px;}
+div.rbtoc1566854377693 ul {list-style: disc;margin-left: 0px;}
+div.rbtoc1566854377693 li {margin-left: 0px;padding-left: 0px;}
+
+/*]]>*/</style></p><div class="toc-macro rbtoc1566854377693">
<ul class="toc-indentation"><li><a
href="#TemplatingandMarkupFAQ-WhydoIgetaSAXParseExceptionwhenIuseanHTMLentity,suchas&nbsp;inmytemplate?">Why
do I get a SAXParseException when I use an HTML entity, such as &nbsp; in
my template?</a></li><li><a
href="#TemplatingandMarkupFAQ-Whydosomeimagesinmypageshowupasbrokenlinks?">Why
do some images in my page show up as broken links?</a></li><li><a
href="#TemplatingandMarkupFAQ-What'sthedifferencebetweenidandt:id?">What's the
difference between id and t:id?</a></li><li><a
href="#TemplatingandMarkupFAQ-WhydomyimagesandstylesheetsendupwithaweirdURLslike/assets/meta/zeea17aee26bc0cae/layout/layout.css?">Why
do my images and stylesheets end up with a weird URLs like
/assets/meta/zeea17aee26bc0cae/layout/layout.css?</a></li><li><a
href="#TemplatingandMarkupFAQ-HowdoIaddaCSSclasstoaTapestrycomponent?">How do I
add a CSS class to a Tapestry component?</a></li></ul>
</div><h2
id="TemplatingandMarkupFAQ-WhydoIgetaSAXParseExceptionwhenIuseanHTMLentity,suchas&nbsp;inmytemplate?">Why
do I get a SAXParseException when I use an HTML entity, such as
<code>&nbsp;</code> in my template?</h2><p>Tapestry uses a standard SAX
parser to read your templates. This means that your templates must be <em>well
formed</em>: open and close tags must balance, attribute values must be quoted,
and entities must be declared. The easiest way to accomplish this is to add a
DOCTYPE to your the top of your template:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: xml;
gutter: false; theme: Default" data-theme="Default"><!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
@@ -128,15 +151,47 @@ div.rbtoc1566728394208 li {margin-left:
return isUrgent() ? "urgent" : null;
}
</pre>
-</div></div><p>When an informal parameter is bound to null, then the attribute
is not written out at all.</p><p>You can verify which components support
informal parameters by checking the component reference, or looking for the @<a
class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/SupportsInformalParameters.html">SupportsInformalParameters</a>
annotation in the components' source
file. </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p></p><div
class="display-footnotes"
data-footnotestodisplay="${footnotesToDisplay}"></div>
-<p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p></div>
+</div></div><p>When an informal parameter is bound to null, then the attribute
is not written out at all.</p><p>You can verify which components support
informal parameters by checking the component reference, or looking for the @<a
class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/SupportsInformalParameters.html">SupportsInformalParameters</a>
annotation in the components' source file.
+</p><div class="atb-scrollbar-macro">
+ <div class="prev">
+ <a href="general-questions.html" rel="prev">
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-left">Previous</span>
+ <span class="title">General Questions</span>
+ </a>
+
+ </div>
+ <div class="parent">
+ <a href="frequently-asked-questions.html" rel="parent">
+ <span class="aui-icon
aui-icon-small atb-icon-arrow-up">Up</span>
+ <span class="title">Frequently Asked
Questions</span>
+ </a>
+
+ </div>
+ <div class="next">
+ <a href="page-and-component-classes-faq.html" rel="next">
+ <span class="title">Page And Component Classes FAQ</span>
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-right">Next</span>
+ </a>
+
+ </div>
+</div> <p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p></p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p></div>
</div>
<div class="clearer"></div>
<div id="footer">
<div id="footer"><p>Apache Tapestry, Tapestry, Apache, the Apache
feather logo, and the Apache Tapestry project logo are trademarks of The Apache
Software Foundation.<br clear="none">
-</p><p></p><div class="aui-message aui-message-error"><p
class="title"><strong>Error rendering macro 'html'</strong></p><p>Your
Confluence administrator has disallowed the use of Javascript in the HTML
macro. This setting can be changed using HTML for Confluence Configuration.
Please see your administrator for details.</p></div><p></p></div>
+</p><p><script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-400821-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript';
ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
+ })();
+</script></p><p></p></div>
</div>
<div id="comments_thread"></div>
Modified: websites/production/tapestry/content/uploading-files.html
==============================================================================
--- websites/production/tapestry/content/uploading-files.html (original)
+++ websites/production/tapestry/content/uploading-files.html Mon Aug 26
21:20:28 2019
@@ -125,7 +125,17 @@
<div id="footer">
<div id="footer"><p>Apache Tapestry, Tapestry, Apache, the Apache
feather logo, and the Apache Tapestry project logo are trademarks of The Apache
Software Foundation.<br clear="none">
-</p><p></p><div class="aui-message aui-message-error"><p
class="title"><strong>Error rendering macro 'html'</strong></p><p>Your
Confluence administrator has disallowed the use of Javascript in the HTML
macro. This setting can be changed using HTML for Confluence Configuration.
Please see your administrator for details.</p></div><p></p></div>
+</p><p><script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-400821-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript';
ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
+ })();
+</script></p><p></p></div>
</div>
<div id="comments_thread"></div>
Modified: websites/production/tapestry/content/using-select-with-a-list.html
==============================================================================
--- websites/production/tapestry/content/using-select-with-a-list.html
(original)
+++ websites/production/tapestry/content/using-select-with-a-list.html Mon Aug
26 21:20:28 2019
@@ -77,7 +77,30 @@
</div>
<div id="content">
- <div id="ConfluenceContent"><h1
id="UsingSelectWithaList-UsingSelectWithaList">Using Select With a
List</h1><p>The documentation for the <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Select.html">Select
Component</a> and the <a href="tapestry-tutorial.html">Tapestry Tutorial</a>
provide simplistic examples of populating a drop-down menu (as the (X)HTML
<em>Select</em> element) using comma-delimited strings and enums. However, most
real-world Tapestry applications need to populate such menus using values from
a database, commonly in the form of java.util.List objects. Doing so generally
requires a <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/SelectModel.html">SelectModel</a>
and a <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ValueEncoder.html">ValueEncoder</a>
bound to the Select component with its
"model" and "encoder" parameters:</p><div class="code panel pdl"
style="border-width: 1px;"><div class="codeContent panelContent pdl">
+ <div id="ConfluenceContent"><p>
+</p><div class="atb-scrollbar-macro">
+ <div class="prev">
+ <a href="meta-programming-page-content.html" rel="prev">
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-left">Previous</span>
+ <span class="title">Meta-Programming Page
Content</span>
+ </a>
+
+ </div>
+ <div class="parent">
+ <a href="cookbook.html" rel="parent">
+ <span class="aui-icon
aui-icon-small atb-icon-arrow-up">Up</span>
+ <span class="title">Cookbook</span>
+ </a>
+
+ </div>
+ <div class="next">
+ <a href="ioc-cookbook.html" rel="next">
+ <span class="title">IoC cookbook</span>
+ <span class="aui-icon aui-icon-small
atb-icon-arrow-right">Next</span>
+ </a>
+
+ </div>
+</div><h1 id="UsingSelectWithaList-UsingSelectWithaList">Using Select With a
List</h1><p>The documentation for the <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/corelib/components/Select.html">Select
Component</a> and the <a href="tapestry-tutorial.html">Tapestry Tutorial</a>
provide simplistic examples of populating a drop-down menu (as the (X)HTML
<em>Select</em> element) using comma-delimited strings and enums. However, most
real-world Tapestry applications need to populate such menus using values from
a database, commonly in the form of java.util.List objects. Doing so generally
requires a <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/SelectModel.html">SelectModel</a>
and a <a class="external-link"
href="http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/ValueEncoder.html">ValueEncoder</a>
bound to the Select component with its "model" and "encoder" parameters:</p><
div class="code panel pdl" style="border-width: 1px;"><div class="codeContent
panelContent pdl">
<pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java;
gutter: false; theme: Default" data-theme="Default"><t:select
t:id="colorMenu" value="selectedColor" model="ColorSelectModel"
encoder="colorEncoder" />
</pre>
</div></div><p>In the above example, ColorSelectModel must be of type
SelectModel, or anything that Tapestry knows how to <a
href="parameter-type-coercion.html">coerce</a> into a SelectModel, such as a
List or a Map or a "value=label,value=label,..." delimited string, or anything
Tapestry knows how to coerce into a List or Map, such as an Array or a
comma-delimited String.</p><h2
id="UsingSelectWithaList-SelectModel">SelectModel</h2><p></p><div
class="navmenu" style="float:right; background:#eee; margin:3px; padding:0 1em">
@@ -187,7 +210,17 @@ public String toString() {
<div id="footer">
<div id="footer"><p>Apache Tapestry, Tapestry, Apache, the Apache
feather logo, and the Apache Tapestry project logo are trademarks of The Apache
Software Foundation.<br clear="none">
-</p><p></p><div class="aui-message aui-message-error"><p
class="title"><strong>Error rendering macro 'html'</strong></p><p>Your
Confluence administrator has disallowed the use of Javascript in the HTML
macro. This setting can be changed using HTML for Confluence Configuration.
Please see your administrator for details.</p></div><p></p></div>
+</p><p><script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-400821-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript';
ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' :
'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga, s);
+ })();
+</script></p><p></p></div>
</div>
<div id="comments_thread"></div>