Modified: websites/production/tapestry/content/release-notes-53.html ============================================================================== --- websites/production/tapestry/content/release-notes-53.html (original) +++ websites/production/tapestry/content/release-notes-53.html Sat Sep 7 07:12:24 2024 @@ -144,11 +144,11 @@ <!-- /// Content Start --> <div id="content"> <div id="ConfluenceContent"><p>This is the consolidated list of changes between Tapestry versions 5.2 and 5.3. To upgrade from 5.2 to 5.3, most users who are not using deprecated features will be able to just update the Maven dependency in their POM file (or <a href="release-notes-53.html">download</a> the new JAR file) and the new version will just work. However, please read carefully below before upgrading, and also review the <a href="how-to-upgrade.html">How to Upgrade</a> instructions.</p><p><strong>Contents</strong></p><p><style type="text/css">/*<![CDATA[*/ -div.rbtoc1723453935610 {padding: 0px;} -div.rbtoc1723453935610 ul {margin-left: 0px;} -div.rbtoc1723453935610 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1725693131231 {padding: 0px;} +div.rbtoc1725693131231 ul {margin-left: 0px;} +div.rbtoc1725693131231 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1723453935610"> +/*]]>*/</style></p><div class="toc-macro rbtoc1725693131231"> <ul class="toc-indentation"><li><a href="#ReleaseNotes5.3-BreakingChanges">Breaking Changes</a></li><li><a href="#ReleaseNotes5.3-NewFeatures">New Features</a></li><li><a href="#ReleaseNotes5.3-Sub-tasksCompleted">Sub-tasks Completed</a></li><li><a href="#ReleaseNotes5.3-BugsFixed">Bugs Fixed</a></li><li><a href="#ReleaseNotes5.3-ImprovementsMade">Improvements Made</a></li><li><a href="#ReleaseNotes5.3-NewFeaturesImplemented">New Features Implemented</a></li><li><a href="#ReleaseNotes5.3-TasksCompleted">Tasks Completed</a></li></ul> </div><h2 id="ReleaseNotes5.3-BreakingChanges">Breaking Changes</h2><p>Tapestry now depends on Servlet API version <strong>2.5</strong> (prior releases worked with 2.4).</p><p>Tapestry no longer supports the ability to inject the component id into a String field. This was rarely (if ever) used functionality that caused unwanted conflicts elsewhere. When a component needs to know its component id, it may inject the <a class="external-link" href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/ComponentResources.html">ComponentResources</a> object, and invoke <code>getCompleteId()</code>.</p><p>Tapestry templates without a <!DOCTYPE> are treated a bit differently in Tapestry 5.3; they are treated as if they have the HTML5 doctype (<code><!DOCTYPE html></code>). See further notes about <a href="component-templates.html">component templates</a>.</p><p>Many classes and interfaces that were deprecated in prior releases of Tapestry have been removed in Tapestry 5.3. See <a class="external-link" href="https://issues.apache.org/jira/browse/TAP5-1432">the full list</a>. As always, you should use your IDE to find and replace all deprecated items <em>before</em> you upgrade. The following are the most significant of these:</p><ul><li>@IncludeJavaScriptLibrary and @IncludeStylesheet annotations (replaced by @<a class="external-link" href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/annotations/Import.html">Import</a>)</li><li>@ApplicationState annotation (replaced with @<a class="external-link" href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/annotations/SessionState.html">SessionState</a>)</li><li>"validateForm" event triggered by Form component (replaced with "validate" event)</li><li>Code and constants related to page pooling</li></ul><p>In addition, some of the abstract base classes used with the tapestry-func library have changed into interfaces; you will want to recompile, but may also need to adjust your code, depending on your compiler settings and use of the standard Java @Override annotation.</p><p>Because of the upgrade to Prototype 1.7, existing JavaScript that uses <code>value.toJSON()</code> may break; replace with <code>Object.toJSON(value)</code>.</p><p>Some number of interfaces and APIs in Tapestry 5.3 will be removed in Tapestry 5.4 or later. These include:</p><ul><li>The <a class="external-link" href="http://tapestry.apache.org/5.2/apidocs/org/apache/tapestry5/RenderSupport.html">RenderSupport</a> environmental (replaced with the <a class="external-link" href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/javascript/JavaScriptSupport.html">JavaScriptSupport</a> environmental)</li><li>The <a class="external-link" href="http://tapestry.apache.org/5.2/apidocs/org/apache/tapestry5/ajax/MultiZoneUpdate.html">MultiZoneUpdate</a> object, replaced with <a class="external-link" href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/ajax/AjaxR esponseRenderer.html">AjaxResponseRenderer</a></li><li>ClassFactory service and ClassFab interface (replaced with the <a class="external-link" href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/ioc/services/PlasticProxyFactory.html">PlasticProxyFactory</a> service and <a class="external-link" href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/plastic/PlasticClass.html">PlasticClass</a> interface)</li><li>The "suppress redirects" functionality, which allows component event requests to respond directly with HTML, as in Tapestry 4.</li></ul><h2 id="ReleaseNotes5.3-NewFeatures">New Features</h2><h3 id="ReleaseNotes5.3-Underscore.js">Underscore.js</h3><p>Tapestry now bundles <a class="external-link" href="http://underscorejs.org/" rel="nofollow">Underscore.js</a>, a useful library for expressive functional programming in the browser. It is used in <em>no conflict mode</em>, made available as the <code>T5._</code> object.</p><h3 id="ReleaseNotes5.3-UserAlerts ">User Alerts</h3><p>Tapestry now has a central mechanism for handling user alerts; this includes the AlertManager service and the Alerts component. Just add an Alerts component to your application's standard layout component and Tapestry takes care of the rest. Alerts can be added during both traditional and Ajax requests, and may be transient (displayed for a few seconds), normal, or sticky (persist until the user expressly dismisses them). Alerts support three severities: info, warn(ing) and error; the look and feel can be customized by overriding Tapestry's default CSS rules.</p><h3 id="ReleaseNotes5.3-Renderingcomments">Rendering comments</h3><p>It is now possible to have Tapestry emit rendering comments; these are comments (such as <code><!--BEGIN Index:loop (context:Index.tml, line 15)--></code>) that can assist you in debugging markup output on the client-side. This is enabled for all requests using the configuration symbol <code>tapestry.component-render-tracing-enabl ed</code>, and can be added to any request by adding the query parameter <code>t:component-trace=true</code> to the URL. This will significantly increase the size of the rendered markup, but can be very helpful with complex layouts to determine which component was responsible for which portion of the rendered page.</p><h3 id="ReleaseNotes5.3-Adaptableservicecontributions">Adaptable service contributions</h3><p>When making contributions to a service, you are no longer restricted to contributing a value that is assignable to the type associated with the configuration; objects of any type may be contributed, and the TypeCoercer service is used to coerce the value to the configuration's type.</p><h3 id="ReleaseNotes5.3-Componentdebuggingimprovements">Component debugging improvements</h3><p>Because of how Tapestry instruments your pages and components, using a debugger has been difficult with Tapestry page and component classes; any mutable field shows its default value in the debugger, regardless of what has been written to the field or read out of it. In Tapestry 5.3, when in <em>development mode</em>, Tapestry now shadows values read from or written to such fields into the fields themselves (this has also been fixed in the 5.2.5 maintenance release). This shadowing does not occur in production, to avoid potential memory leaks.</p><h3 id="ReleaseNotes5.3-Reloadingdisabledinproduction">Reloading disabled in production</h3><p>Tapestry no longer checks for changes to Tapestry component class files, templates, or message catalogs in production mode. It is assumed that Tapestry applications are packaged as WAR files in production, and that changing the WAR file causes the servlet container to redeploy the entire application. This change is to improve throughput and reduce memory consumption in production applications.</p><h3 id="ReleaseNotes5.3-String-to-Enumcoercions">String-to-Enum coercions</h3><p>The TypeCoercer service now automatically generates String-to-Enum c oercions without requiring a specific contribution. This coercion is case insensitive. A contribution is still allowed, and will take priority over the default coercion, but is only necessary to support "aliases" for enum values outside those defined by the enum type itself.</p><h3 id="ReleaseNotes5.3-JavaScriptandCSSminimization">JavaScript and CSS minimization</h3><p>A new optional library, tapestry-yuicompressor, has been added. This library adds support for compressing JavaScript libraries and CSS files using <a class="external-link" href="http://developer.yahoo.com/yui/compressor/" rel="nofollow">the YUICompressor library</a>.</p><h3 id="ReleaseNotes5.3-ComponentClassTransformWorkerService">ComponentClassTransformWorker Service</h3><p>The type of this service has changed from <a class="external-link" href="http://tapestry.apache.org/5.2/apidocs/org/apache/tapestry5/services/ComponentClassTransformWorker.html">ComponentClassTransformWorker</a> to <a class="external-link" href="h ttp://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/transform/ComponentClassTransformWorker2.html">ComponentClassTransformWorker2</a>. Contributions of type ComponentClassTransformWorker will automatically be coerced to the new ComponentClassTransformWorker2 interface. However, if you use the @Contribute annotation to mark the method that makes contributions, you will need to update the annotation to indicate the new service interface. If you followed the naming convention, and named your method <code>contributeComponentClassTransformWorker()</code>, you don't need to change anything.</p><h3 id="ReleaseNotes5.3-AjaxResponseRenderer">AjaxResponseRenderer</h3><p>The <a class="external-link" href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/ajax/AjaxResponseRenderer.html">AjaxResponseRenderer</a> service makes it easier to customize the partial page response generated when updating a <a class="external-link" href="http://tapestry.apache.org/5.3/ apidocs/org/apache/tapestry5/corelib/components/Zone.html">Zone</a> component, replacing the <a class="external-link" href="http://tapestry.apache.org/5.2/apidocs/org/apache/tapestry5/ajax/MultiZoneUpdate.html">MultiZoneUpdate</a> object as an event handler method return value.</p><h3 id="ReleaseNotes5.3-TapestryJavaDoc">Tapestry JavaDoc</h3><p>Tapestry now includes a new library, tapestry-javadoc, that replaces the old Maven-based component report. Simply by placing a <code>@tapestrydoc</code> annotation into your component's JavaDoc, Tapestry will generate complete documentation as part of JavaDoc ... no more switching back and forth between JavaDoc and the Maven-generated component report, and no more reliance on Maven for component documentation.</p><h3 id="ReleaseNotes5.3-Skinning/ThemingSupport">Skinning / Theming Support</h3><p>Tapestry now adds the ability to skin and/or theme your pages and components. Its an extension of how Tapestry manages pages per locale, but adds new application-defined <em>axes</em> along with rules to find the resources. See <a class="external-link" href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/pageload/ComponentResourceSelector.html">ComponentResourceSelector</a> and <a class="external-link" href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/pageload/ComponentRequestSelectorAnalyzer.html">ComponentRequestSelectorAnalyzer</a>.</p><p>There's also a new <a class="external-link" href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/corelib/components/Dynamic.html">Dynamic</a> component, which uses an external template, not a Tapestry template, which can be selected at runtime.</p><h3 id="ReleaseNotes5.3-TreeComponent">Tree Component</h3><p>Tapestry finally has a proper <a class="external-link" href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/corelib/components/Tree.html">Tree</a> component for navigating hierarchical data. It's efficient and Ajax-en abled, and fully customizable.</p><h3 id="ReleaseNotes5.3-FormCancelledEvent">Form Cancelled Event</h3><p>Form components now recognize when the client-side form was cancelled. A new "cancelled" event is triggered early in the submission process, which allows the page to bypass all property updates and input validations, when desired.</p><h3 id="ReleaseNotes5.3-ImplicitOrderedConfigurationConstraints">Implicit OrderedConfiguration Constraints</h3><p>When using <a class="external-link" href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/ioc/OrderedConfiguration.html">OrderedConfiguration.add()</a> with no constraints, Tapestry will now implicitly order the added element after the previously added element, within the same method. In prior releases, such elements were added with no constraints. This makes it easier to contribute a group of related items with an implicit ordering.</p><h3 id="ReleaseNotes5.3-NewComponentClassValidations">New Component Class Validations</h3> <p>Tapestry includes new validations of component classes to help cut down on many common errors; Tapestry now checks that component ids referenced by an event handler method (the <code>From</code><em>component id</em> part of the method name) actually matches a component defined in the template ... this quickly identifies typos in method names. This check can be disabled with a configuration symbol, as existing 5.2 apps may have such errors and still operate (that is, they may have <em>dead</em> event handler methods that will never be invoked).</p><h3 id="ReleaseNotes5.3-ApplicationFolder">Application Folder</h3><p>Tapestry can now be configured to execute inside a folder, which can be useful when running Tapestry inside a web application that contains other servlets or filters, as a way to prevent conflicts.</p><h3 id="ReleaseNotes5.3-ImprovedQuickstartArchetype">Improved Quickstart Archetype</h3><p>The Maven quickstart archetype has been brought up to date, and now demonstrates several new bits of common useful functionality. It also generates support for <a class="external-link" href="http://gradle.org/" rel="nofollow">Gradle</a> as the build tool.</p><h3 id="ReleaseNotes5.3-WhitelistedPages">Whitelisted Pages</h3><p>The new @<a class="external-link" href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/annotations/WhitelistAccessOnly.html">WhitelistAccessOnly</a> annotation marks a page as accessible only from white-listed clients; the rules for the whitelist are <a class="external-link" href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/services/security/ClientWhitelist.html">extensible</a>. The default rule is that only access from localhost is on the white-list. Use this annotation on pages that may expose sensitive data, such as built-in application dashboards and the like.</p><h3 id="ReleaseNotes5.3-PageCatalog">Page Catalog</h3><p>Tapestry applications now include a built-in "PageCatalog" page, which lists all the loaded pages of the application, with details about construction time and number of components. The page requires whitelist access (see above comment), and some functionality is only available in development mode. PageCatalog can be used to load all pages of your application, which is useful to quickly spot problems in your pages ... especially useful when upgrading from a prior release of Tapestry.</p><h3 id="ReleaseNotes5.3-Client-SideJavaScriptLogging">Client-Side JavaScript Logging</h3><p>The integrated Blackbird client-side console has been removed. In its place are the floating console messages combined with logging to the Firebug or WebKit console. Tapestry no longer captures JavaScript initialization exceptions, so that they may be properly reported to the native console. These changes should make debugging client-side JavaScript much easier.</p><p>In addition, Tapestry will now display a pop-up window containing the full exception report for a server-side error that occurs during an Ajax request, which makes debugging server-side problems that occur as part of an Ajax request <em>significantly</em> easier. Note that this logic is tied to performing a <a class="external-link" href="http://tapestry.apache.org/5.3/apidocs/org/apache/tapestry5/corelib/components/Zone.html">Zone</a> update.</p><h2 id="ReleaseNotes5.3-Sub-tasksCompleted">Sub-tasks Completed</h2><p>  </p><h2 id="ReleaseNotes5.3-BugsFixed">Bugs Fixed</h2><p>  </p><h2 id="ReleaseNotes5.3-ImprovementsMade">Improvements Made</h2><p>  </p><h2 id="ReleaseNotes5.3-NewFeaturesImplemented">New Features Implemented</h2><p>  </p><h2 id="ReleaseNotes5.3-TasksCompleted">Tasks Completed</h2><p>  </p></div> </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 Sat Sep 7 07:12:24 2024 @@ -144,11 +144,11 @@ <!-- /// Content Start --> <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.rbtoc1723453938328 {padding: 0px;} -div.rbtoc1723453938328 ul {margin-left: 0px;} -div.rbtoc1723453938328 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1725693132200 {padding: 0px;} +div.rbtoc1725693132200 ul {margin-left: 0px;} +div.rbtoc1725693132200 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1723453938328"> +/*]]>*/</style></p><div class="toc-macro rbtoc1725693132200"> <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> 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 Sat Sep 7 07:12:24 2024 @@ -144,11 +144,11 @@ <!-- /// Content Start --> <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.rbtoc1723453932108 {padding: 0px;} -div.rbtoc1723453932108 ul {margin-left: 0px;} -div.rbtoc1723453932108 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1725693129376 {padding: 0px;} +div.rbtoc1725693129376 ul {margin-left: 0px;} +div.rbtoc1725693129376 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1723453932108"> +/*]]>*/</style></p><div class="toc-macro rbtoc1725693129376"> <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><code class="language-java">public static void contributeIgnoredPathsFilter(Configuration<String> configuration) Modified: websites/production/tapestry/content/security-faq.html ============================================================================== --- websites/production/tapestry/content/security-faq.html (original) +++ websites/production/tapestry/content/security-faq.html Sat Sep 7 07:12:24 2024 @@ -144,11 +144,11 @@ <!-- /// Content Start --> <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.rbtoc1723453936599 {padding: 0px;} -div.rbtoc1723453936599 ul {margin-left: 0px;} -div.rbtoc1723453936599 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1725693133072 {padding: 0px;} +div.rbtoc1725693133072 ul {margin-left: 0px;} +div.rbtoc1725693133072 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1723453936599"> +/*]]>*/</style></p><div class="toc-macro rbtoc1725693133072"> <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><div class="aui-label" style="float:right" title="Related Articles"> Modified: websites/production/tapestry/content/session-storage.html ============================================================================== --- websites/production/tapestry/content/session-storage.html (original) +++ websites/production/tapestry/content/session-storage.html Sat Sep 7 07:12:24 2024 @@ -190,11 +190,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="na vmenu" 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.rbtoc1723453919081 {padding: 0px;} -div.rbtoc1723453919081 ul {margin-left: 0px;} -div.rbtoc1723453919081 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1725693114600 {padding: 0px;} +div.rbtoc1725693114600 ul {margin-left: 0px;} +div.rbtoc1725693114600 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style><div class="toc-macro rbtoc1723453919081"> +/*]]>*/</style><div class="toc-macro rbtoc1725693114600"> <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> 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 Sat Sep 7 07:12:24 2024 @@ -144,11 +144,11 @@ <!-- /// Content Start --> <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.rbtoc1723453920090 {padding: 0px;} -div.rbtoc1723453920090 ul {margin-left: 0px;} -div.rbtoc1723453920090 li {margin-left: 0px;padding-left: 0px;} +div.rbtoc1725693115582 {padding: 0px;} +div.rbtoc1725693115582 ul {margin-left: 0px;} +div.rbtoc1725693115582 li {margin-left: 0px;padding-left: 0px;} -/*]]>*/</style></p><div class="toc-macro rbtoc1723453920090"> +/*]]>*/</style></p><div class="toc-macro rbtoc1725693115582"> <ul class="toc-indentation"><li><a href="#TemplatingandMarkupFAQ-WhydoIgetaSAXParseExceptionwhenIuseanHTMLentity,suchas 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><code class="language-xml"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"