[jira] [Reopened] (TAP5-1409) datefield - cannot select same day in different month
[ https://issues.apache.org/jira/browse/TAP5-1409?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Robert Zeigler reopened TAP5-1409: -- Re-opened to address month popup issue. > datefield - cannot select same day in different month > - > > Key: TAP5-1409 > URL: https://issues.apache.org/jira/browse/TAP5-1409 > Project: Tapestry 5 > Issue Type: Bug >Affects Versions: 5.2.4 >Reporter: Paul Stanton >Assignee: Robert Zeigler > Fix For: 5.3 > > Attachments: datepicker.js > > > say your date format is m/d/ and the initial value is 1/1/2011 and you > want to change it to 2/1/2011.. that is not possible. changing month, the > selected 'day' is still selected and therefore not selectable. > use case: > initial date is 1/1/2011 > 1. open date picker > 2. change month to feb > 3. try to click on 1st of feb > - nothing happens. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira
[CONF] Apache Tapestry > Release Notes 5.3
Release Notes 5.3 Page edited by Howard M. Lewis Ship Comment: add note about application folders Changes (2) ... h3. New Component Class Validations Tapestry includes new validations of component classes to help cut down on many common errors; Tapestry now checks that component ids referencesd by an event handler method (the {{From}}_component id_ 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 _dead_ event handler methods that will never be invoked). h3. Application Folder Tapestry can now be configured to execute inside a folder, which can be useful when running Tapestry inside a web application that contains other servlet or filters, as a way to prevent conflicts. h2. Removed Functionality ... Full Content Release Notes 5.2 Release Notes This is the consolidated list of changes between Tapestry versions 5.2 and 5.3. To upgrade from 5.1 to 5.2, most users will be able to just update the Maven dependency in their POM file (or download the new JAR file) and the new version will just work. However, please read carefully below before upgrading. Contents Breaking Changes New Features Removed Functionality Release Notes: Tapestry 5.3.0 Sub-task Bug Improvement New Feature Task Test Breaking Changes Some number of interfaces and APIs in Tapestry 5.3 will be removed in Tapestry 5.4 or later. These include: The "suppress redirects" functionality, which allows component event requests to respond directly with HTML, as in Tapestry 4 The RenderSupport environmental (replaced with the _javascript_Support environmental) ClassFactory service and ClassFab interface (replaced with the PlasticProxyFactory service and PlasticClass interface) Many classes and interfaces marked as deprecated in prior releases of Tapestry have been removed. Because of the upgrade to Prototype 1.7, existing _javascript_ that uses value.toJSON() may break; replace with Object.toJSON(value). New Features User Alerts 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. Rendering comments It is now possible to have Tapestry emit rendering comments; these are comments (such as ) that can assist you in debugging markup output on the client-side. This is enabled for all requests using the configuration symbol tapestry.component-render-tracing-enabled, and can be added to any request by adding the query parameter t:component-trace=true 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. Adaptable service contributions 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. Component debugging improvements Because of how Tapestry instruments your pages and components, it has been difficult to debug Tapestry applications; 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 development mode, 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 does not occur in production, to avoid potential memory leaks. Reloading disabled in production 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. String-to-Enum coercions The T
[CONF] Apache Tapestry > Limitations
Limitations Page edited by Howard M. Lewis Ship Comment: add note that multiple t5 apps in one war not supported Changes (1) ... {scrollbar} h3. How do I run multiple Tapestry applications in the same web application? This is not supported; there's only one place to identify the application root package, so even configuring multiple filters into multiple folders will not work. Support for multiple Tapestry applications in the same web application was a specific non-goal in Tapestry 5 (it needlessly complicated Tapestry 4). Given how loosely connected Tapestry 5 pages are from each other, there doesn't seem to be an advantage to doing so ... and certainly, in terms of memory utilization, there is a significant down side, were it event possible. {display-footnotes} Full Content Request Processing FAQ Frequently Asked Questions Specific Errors FAQ Limitations How do I add new components to an existing page dynamically? The short answer here is: you don't. The long answer here is you don't have to, to get the behavior you desire. One of Tapestry basic values is high scalability: this is expressed in a number of ways, reflecting scalability concerns within a single server, and within a cluster of servers. Although you code Tapestry pages and components as if they were ordinary POJOs 1 , as deployed by Tapestry they are closer to a traditional servlet: a single instance of each page services requests from multiple threads. Behind the scenes, Tapestry transforms you code, rewriting it on the fly. What this means is that any incoming request must be handled by a single page instance. Therefore, Tapestry enforces the concept of static structure, dynamic behavior. Tapestry provides quite a number of ways to vary what content is rendered, well beyond simple conditionals and loops. It is possible to "drag in" components from other pages when rendering a page (other FAQs will expand on this concept). The point is, that although a Tapestry page's structure is very rigid, the order in which the components of the page render does not have to be top to bottom. Why doesn't my service implementation reload when I change it? Main article: Service Implementation Reloading Live service reloading has some limitations: The service must define a service interface. The service implementation must be on the file system (not inside a JAR). The implementation must be instantiated by Tapestry, not inside code (even code inside a module class). The service must use the default scope (reloading of perthread scopes is not supported). Consider the following example module: public static void bind(ServiceBinder binder) { binder.bind(ArchiveService.class, ArchiveServiceImpl.class); } public static JobQueue buildJobQueue(MessageService messageService, Mapconfiguration) { JobQueueImpl service = new JobQueueImpl(configuration); messageService.addQueueListener(service); return service; } ArchiveService is reloadable, because Tapestry instantiates ArchiveServiceImpl itself. On the other hand, Tapestry invokes buildJobQueue() and it is your code inside the method that instantiates JobQueueImpl, so the JobQueue service will not be reloadable. Finally, only classes whose class files are stored directly on the file system, and not packaged inside JARs, are ever reloadable ... generally, only the services of the application being built (and not services from libraries) will be stored on the file system. This reflects the intent of reloading: as an agile development tool, but not something to be used in deployment. Request Processing FAQ Frequently Asked Questions Specific Errors FAQ How do I run multiple Tapestry applications in the same web application? This is not supported; there's only one place to identify the application root package, so even configuring multiple filters into multiple folders will not work. Support for multiple Tapestry applications in the same web application was a specific non-goal in Tapestry 5 (it needlessly complicated Tapestry 4). Given how loosely connected Tapestry 5 pages are from each other, there doesn't seem to be an advantage to doing so ... and certainly, in terms of memory utilization, there is a significant down side, were it event possible. Footnotes Reference Notes 1 Plain Old Java Object. Tapestry does not require you to extend any base classes or implement any special interfaces. Change Notification Preferences View Online | View Changes
[CONF] Apache Tapestry > Request Processing FAQ
Request Processing FAQ Page edited by Howard M. Lewis Ship Comment: add link to application folder config Changes (1) ... Alternately, you may contribute a [HttpServletRequestFilter|http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/HttpServletRequestFilter.html] to the [HttpServletRequestHandler|http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/services/HttpServletRequestHandler.html] pipeline. A filter that simply returns false from its {{service()}} 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. Alternately, you can configure the Tapestry application to execute inside a folder to avoid conflicts. See the notes on the [configuration page|Configuration#Configuration-SegregatingApplicationsIntoFolders]. {scrollbar} Full Content Integration with existing applications Frequently Asked Questions Limitations Request Processing How do I get Tapestry to not handle a request? Often, when integrating with outside libraries, or working with legacy code, you will want Tapestry to ignore a request and let the normal servlet or other processing handle the request. The easy way to do this is to contribute a regular _expression_ to the IgnoredPathsFilter service, whose job is to exclude some requests. public static void contributeIgnoredPathsFilter(Configurationconfiguration) { configuration.add("/dwr/.*"); } Alternately, you may contribute a HttpServletRequestFilter to the HttpServletRequestHandler pipeline. A filter that simply returns false from its service() 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. Alternately, you can configure the Tapestry application to execute inside a folder to avoid conflicts. See the notes on the configuration page. Integration with existing applications Frequently Asked Questions Limitations Change Notification Preferences View Online | View Changes
[CONF] Apache Tapestry > Integration with existing applications
Integration with existing applications Page edited by Howard M. Lewis Ship Comment: add note about tapestry application folder to integration faq Changes (1) ... h3. How do I put the Tapestry application inside a folder, to avoid conflicts? Support for this was added in 5.3; see the notes on the [configuration page|Configuration#Configuration-SegregatingApplicationsIntoFolders]. {display-footnotes} Full Content Tapestry Inversion of Control FAQ Frequently Asked Questions Request Processing FAQ Integration with existing applications You may have an existing JSP (or Struts, Spring MVC, etc.) application that you want to migrate to Tapestry. It's quite common to do this in stages, moving some functionality into Tapestry and leaving other parts, initially, in the other system. You may need to prevent Tapestry from handling certain requests. How do I make a form on a JSP submit into Tapestry? Tapestry's Form component does a lot of work while an HTML form is rendering to store all the information needed to handle the form submission in a later request; this is all very specific to Tapestry and the particular construction of your pages and forms; it can't be reproduced from a JSP. Fortunately, that isn't necessary: you can have a standard HTML Form submit to a Tapestry page, you just don't get to use all of Tapestry's built in conversion and validation logic. All you need to know is how Tapestry converts page class names to page names (that appear in the URL). It's basically a matter of stripping off the root-package.pages prefix from the fully qualified class name. So, for example, if you are building a login screen as a JSP, you might want to have a Tapestry page to receive the user name and password. Let's assume the Tapestry page class is com.example.myapp.pages.LoginForm; the page name will be loginform 1 , and the URL will be /loginform. "post" action="" class="code-quote">"/loginform"> "text" value="userName"/> "password" value="password"/> "submit" value="Login"/> On the Tapestry side, we can expect that the LoginForm page will be activated; this means that its activate event handler will be invoked. We can leverage this, and Tapestry's RequestParameter annotation: public class LoginForm { void onActivate(@RequestParameter("userName") String userName, @RequestParameter("password") String password) { // Validate and store credentials, etc. } } The RequestParameter annotation extracts the named query parameter from the request, coerces its type from String to the parameter type (here, also String) and passes it into the method. How do I share information between a JSP application and the Tapestry application? From the servlet container's point of view, there's no difference between a servlet, a JSP, and an entire Tapestry application. They all share the same ServletContext, and (once created), the same HttpSession. On the Tapestry side, it is very easy to read and write session attributes: public class ShowSearchResults { @SessionAttribute private SearchResults searchResults; } Reading the instance variable searchResults is instrumented to instead read the corresponding HttpSession attribute named "searchResults". You can also specify the value attribute of the SessionAttribute annotation to override the default attribute name. Writing to the field causes the corresponding HttpSession attribute to be modified. The session is automatically created as needed. Tapestry Inversion of Control FAQ Frequently Asked Questions Request Processing FAQ How do I put the Tapestry application inside a folder, to avoid conflicts? Support for this was added in 5.3; see the notes on the configuration page. Footnotes Reference Notes 1 Tapestry is case insensitive, so LoginForm would work just as well. Change Notification Preferences View Online | View Changes
[CONF] Apache Tapestry > Ajax Components FAQ
Ajax Components FAQ Page edited by Howard M. Lewis Ship Comment: document AjaxResponseRenderer as replacement for MultiZoneUpdate Changes (3) ... From the event handler method, instead of returning a Block or a Component, return a multi-zone update: {code:controls=true|linenumbers=true} {code:title=Multiple Zone Update (5.2)|controls=true|linenumbers=true} @Inject private Block searchResults; ... {code} The above will work in Tapestry 5.3, but MultiZoneUpdate is deprecated and replaced: {code:title=Multiple Zone Update (5.2)|controls=true|linenumbers=true} @Inject private Block searchResults;@Inject private Block statusBlock;@Inject private AjaxResponseRenderer ajaxResponseRenderer;void onSuccessFromSearchForm() { searchHits = searchService.performSearch(query); message = String.format("Found %,d matching documents", searchHits.size()); ajaxResponseRenderer.addRender("results", searchResults).addRender("status", statusBlock); } {code} AjaxResponseRenderer adds other useful commands as well. It also has the advantage that a simple return value can be returned to render content for the Zone that triggered the request. h3. What's that weird number in the middle of the client ids after a Zone is updated? ... Full Content _javascript_ FAQ Frequently Asked Questions Injection FAQ Ajax Components Main article: Ajax and Zones Do I have to specify both id and t:id for Zone components? The examples for the Zone component (in the Component Reference) consistently specify both id and t:id and this is probably a good idea. Generally speaking, if you don't specify the client-side id (the id attribute), it will be the same as the Tapestry component id (t:id). However, there are any number of exceptions to this rule. The Zone may be rendering inside a Loop (in which case, each rendering will have a unique client side id). The Zone may be rendering as part of a partial page render, in which case, a random unique id is inserted into the id. There are other examples where Tapestry component ids in nested components may also clash. The point is, to be sure, specify the exact client id. This will be the value for the zone parameter of the triggering component (such as a Form, PageLink, ActionLink, etc.). How do I update the content of a Zone from an event handler method? When a client-side link or form triggers an update, the return value from the event handler method is used to construct a partial page response; this partial page response includes markup content that is used to update the Zone's client-side element. Where does that content come from? You inject it into your page. "search" t:id="searchZone"> "searchForm" zone="searchZone"> "query" size="20"/> "submit" value="Search"/> "searchResults"> "loop" source="searchHits" value="searchHit">${searchHit} @Inject private Block searchResults; Object onSuccessFromSearchForm() { searchHits = searchService.performSearch(query); return searchResults; } So, when the search form is submitted, the resulting search hits are collected. In the same request, the searchResults block is rendered, package, and sent to the client. The form inside the client-side Zone is replaced with the list of hits. In many cases, you just want to re-render the Zone itself, to display updated content. In that case, you don't need a separate , instead you can use @InjectComponent to inject the Zone object itself, and return the Zone's body: @InjectComponent private Zone statusZone; Object onActionFromUpdateStatus() { return statusZone.getBody(); } How to I update multiple zones in a single event handler? To do this, you must know, on the server, the client ids of each Zone. That's one of the reasons that you will generally set the Zone's client id (via the Zone's id parameter), rather than let Tapestry assign a client id for you. From the event handler method, instead of returning a Block or a Component, return a multi-zone update: Multiple Zone Update (5.2) @Inject private Block searchResults; @Inject private Block statusBlock; Object onSuccessFromSearchForm() { searchHits = searchService.performSearch(query); message = String.format("Found %,d matching documents", searchHits.size()); return new MultiZoneUpdate("results", searchResults).add("status", statusBlock); } The above will work in Tapestry 5.3, but MultiZoneUpdate is deprecated and replaced: Multiple Zone Update (5.2) @Inject private Block searchResults; @Inject private Block statusBlock; @Inj
[CONF] Apache Tapestry > Configuration
Configuration Page edited by Howard M. Lewis Ship Comment: document app folders Changes (3) ... *Contents* {toc:minLevel=2|maxLevel=24} h2. Changes to web.xml ... The version of the application, which is incorporated into URLs for context and classpath assets. Assets may be [compressed|Response Compression], and will have far-future expiration headers; they will be aggressively cached by the client web browser. You should change the application version on each new deployment of the application (that is, any time assets in the context change), to force clients to re-download changed versions of files. If you do not specify an application version, a _random_ one will be assigned on every deployment (which is good for development but very bad for production). h3. tapestry.application-folder The folder, of the context, in which the Tapestry application executes. By default this is blank, meaning the Tapestry application executes in the root of the web application context. Setting this value allows the Tapestry application to be [segregated into a folder|TAPESTRY:Configuration#Configuration-SegregatingApplicationsIntoFolders], which can be useful when Tapestry is executed inside a web application with other servlets or filters. {since:since=5.3}{since} h3. tapestry.blackbird-enabled ... then Tapestry will load modules in the order: DevelopmentMode1Module1, DevelopmentMode1Module2, DevelopmentMode2Module1 and DevelopmentMode2Module2 h2. Segregating Applications Into Folders In many cases where Tapestry is being adopted into an existing web application (possibly written in Tapestry 4 or some other framework), it is nice to segregate the Tapestry application into its own folder, to avoid conflicts with the existing application or servlets. {since:since=5.3} Support for application folders was added in release 5.3. {since} Setting this up is in two parts: * Modifying the configuration of the {{}} for the Tapestry filter to match the specified folder. * Identifying the folder name using a Tapestry symbol value contribution. So, if you wanted to run the Tapestry application inside folder {{t5ap}}, your web.xml would be modified to indicate the use of the folder: {code}app /t5app/*{code} ... and in your AppModule, you would inform Tapestry about the mapping change: {code} public class AppModule { @Contribute(SymbolProvider.class) @ApplicationDefaults public static void applicationDefaults(MappedConfiguration configuration) { configuration.add(SymbolConstants.APPLICATION_FOLDER, "t5app") } } {code} The changes the servlet container to only forward requests inside the {{t5app}} folder to Tapestry; requests for other folders (or the root folder) will not be passed to Tapestry at all. It also lets Tapestry change the URLs it generates to include the necessary folder name. In addition, if you choose to place page template files in the context, rather than on the classpath (as with component templates), then you will place those template files inside the {{t5app}} folder. At this time, it is still not possible to run multiple Tapestry 5 applications within the same web application. Full Content Related Articles Page: IoC cookbook - Service Configurations Page: Response Compression Page: Application Module Class Cheat Sheet Page: Tapestry IoC Configuration Page: Symbols Page: Configuration Configuring Tapestry Tapestry runs on top of the standard Java Servlet API. To the servlet container, such as Tomcat, Tapestry appears as a servlet filter. This gives Tapestry great flexibility in matching URLs without requiring lots of XML configuration. Contents Chang
[jira] [Resolved] (TAP5-1609) Generate Maven archetype from within gradle builds
[ https://issues.apache.org/jira/browse/TAP5-1609?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Massimo Lusetti resolved TAP5-1609. --- Resolution: Fixed Fix Version/s: 5.3 > Generate Maven archetype from within gradle builds > -- > > Key: TAP5-1609 > URL: https://issues.apache.org/jira/browse/TAP5-1609 > Project: Tapestry 5 > Issue Type: New Feature >Affects Versions: 5.3 >Reporter: Massimo Lusetti >Assignee: Massimo Lusetti > Fix For: 5.3 > > > It would be nice to have (again) the Maven archetype produced by the build > cycle. > Maybe with a build.gradle script in it... -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira
svn commit: r1164263 - /tapestry/tapestry5/trunk/quickstart/build.gradle
Author: mlusetti Date: Thu Sep 1 20:29:14 2011 New Revision: 1164263 URL: http://svn.apache.org/viewvc?rev=1164263&view=rev Log: TAP5-1609 Example task to publish newly generate archetype catalog to people.apache.org Modified: tapestry/tapestry5/trunk/quickstart/build.gradle Modified: tapestry/tapestry5/trunk/quickstart/build.gradle URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/quickstart/build.gradle?rev=1164263&r1=1164262&r2=1164263&view=diff == --- tapestry/tapestry5/trunk/quickstart/build.gradle (original) +++ tapestry/tapestry5/trunk/quickstart/build.gradle Thu Sep 1 20:29:14 2011 @@ -17,6 +17,47 @@ import org.apache.tools.ant.filters.Repl generatedDir = new File(buildDir, 'quickstart-generated') +/* + * An example on how to scp the generated archetype-catalog.xml to the tapestry.apache.org + * site, we need a nice way to hook it in the right place + */ +//configurations { +//scpTask +//} +// +//dependencies { +//scpTask 'org.apache.ant:ant-jsch:1.8.2', 'com.jcraft:jsch:0.1.42' +//} +// +// +//task publishArchetypeCatalog(dependsOn: 'archetype') { +//description = 'Update archetype on minotaur' +// +//// As with properties to deploy to the maven repositories (staging or central) +//// minotaurDeployUsername and minotaurDeployPassword should be specified in +//// ~/.gradle/gradle.properties +//// "minotaurDeployUsername" +//// "minotaurDeployPassword" +//// "minotaurSshPassphrase" +// +//scpToDir = minotaurDeployUserName + "@people.apache.org:/tmp" +// +//println scpToDir +// +//ant.taskdef(name: 'scp', classname: 'org.apache.tools.ant.taskdefs.optional.ssh.Scp', +//classpath: configurations.scpTask.asPath) +// +//ant.scp(todir: scpToDir, +//keyfile: '${user.home}/.ssh/id_rsa', +//// passphrase: minotaurSshPassphrase, +//// password: minotaurDeployPassword, +//verbose: 'true') { +//fileset(dir: generatedDir) { +//include(name: '**/archetype-catalog.xml') +//} +//} +//} + task generateArchetype(type: Copy) { srcDir = file('prototypes') @@ -52,4 +93,4 @@ task archetype(type: Jar, dependsOn: 'ge exclude '**/archetype-catalog.xml' from generatedDir -} \ No newline at end of file +}
svn commit: r1164262 - /tapestry/tapestry5/trunk/quickstart/prototypes/archetype-catalog.xml
Author: mlusetti Date: Thu Sep 1 20:28:19 2011 New Revision: 1164262 URL: http://svn.apache.org/viewvc?rev=1164262&view=rev Log: TAP5-1609 Import all the current published archetypes at tapestry.apache.org Modified: tapestry/tapestry5/trunk/quickstart/prototypes/archetype-catalog.xml Modified: tapestry/tapestry5/trunk/quickstart/prototypes/archetype-catalog.xml URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/quickstart/prototypes/archetype-catalog.xml?rev=1164262&r1=1164261&r2=1164262&view=diff == --- tapestry/tapestry5/trunk/quickstart/prototypes/archetype-catalog.xml (original) +++ tapestry/tapestry5/trunk/quickstart/prototypes/archetype-catalog.xml Thu Sep 1 20:28:19 2011 @@ -13,15 +13,46 @@ -http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; - xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0 http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd";> - - - org.apache.tapestry - quickstart - @quickstartVersion@ - - Tapestry @quickstartVersion@ Quickstart archetype - - +http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0"; + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; + xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0 http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd";> + + +org.apache.tapestry +quickstart +5.2.5 +Tapestry Quickstart Project + + +org.apache.tapestry +quickstart +5.2.4 +Tapestry Quickstart Project + + +org.apache.tapestry +quickstart +5.1.0.5 +Tapestry Quickstart Project + + +org.apache.tapestry +quickstart +5.0.19 +Tapestry Quickstart Project + + +org.apache.tapestry +tapestry-archetype +4.1.6 +Tapestry 4.1.6 Archetype + + +org.apache.tapestry +quickstart +@quickstartVersion@ + +Tapestry @quickstartVersion@ Quickstart archetype + +
svn commit: r1164241 - /tapestry/tapestry5/trunk/build.gradle
Author: hlship Date: Thu Sep 1 20:13:52 2011 New Revision: 1164241 URL: http://svn.apache.org/viewvc?rev=1164241&view=rev Log: Prep for 5.3-beta-2 Modified: tapestry/tapestry5/trunk/build.gradle Modified: tapestry/tapestry5/trunk/build.gradle URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/build.gradle?rev=1164241&r1=1164240&r2=1164241&view=diff == --- tapestry/tapestry5/trunk/build.gradle (original) +++ tapestry/tapestry5/trunk/build.gradle Thu Sep 1 20:13:52 2011 @@ -1,8 +1,8 @@ description = "Apache Tapestry 5 Project" -// Remember that after generating a release, this should be incremented. Also don't forget to +// Remember that when generating a release, this should be incremented. Also don't forget to // tag the release in Subversion. -tapestryVersion = "5.3-beta-1" +tapestryVersion = "5.3-beta-2" jettyVersion = '7.0.0.v20091005' tomcatVersion = '6.0.30'
[jira] [Closed] (TAP5-743) It is too much work to hide all T5 pages inside a virtual folder, for use in mixed-implementation deployments
[ https://issues.apache.org/jira/browse/TAP5-743?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Howard M. Lewis Ship closed TAP5-743. - Resolution: Fixed Fix Version/s: 5.3 > It is too much work to hide all T5 pages inside a virtual folder, for use in > mixed-implementation deployments > - > > Key: TAP5-743 > URL: https://issues.apache.org/jira/browse/TAP5-743 > Project: Tapestry 5 > Issue Type: Improvement > Components: tapestry-core >Affects Versions: 5.1.0.5 >Reporter: Howard M. Lewis Ship >Assignee: Howard M. Lewis Ship > Fix For: 5.3 > > > In a mixed-implementation deployment (mixing Tapestry 5 with Tapestry 4 or > some other framework), it would be nice if the T5 apps could be "hidden" in a > virtual /t5 folder. > This is doable, but awkward and ugly, today. > Ideally, this would be a matter of changing the web.xml mapping to: > /t5/* > and making some form of configuration change, i.e., > configuration.add(ConfigurationConstants.TAPESTRY_APP_FOLDER, "t5"); > This would affect link generation, prefixing urls with "t5/" (including the > virtual /assets folder, which would be /t5/assets). Since the /t5 portion is > part of the URL mapping, it would not be part of the request pathInfo, so > existing dispatch code would not need to change. > Of course, Websphere has some bugs in this area that might cause some grief. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira
svn commit: r1164211 - /tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy
Author: hlship Date: Thu Sep 1 19:01:54 2011 New Revision: 1164211 URL: http://svn.apache.org/viewvc?rev=1164211&view=rev Log: TAP5-743: Add test to verify that assets are downloaded from a URL inside the application folder Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy?rev=1164211&r1=1164210&r2=1164211&view=diff == --- tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy Thu Sep 1 19:01:54 2011 @@ -2,6 +2,7 @@ package org.apache.tapestry5.integration import org.apache.tapestry5.integration.TapestryCoreTestCase import org.testng.annotations.Test +import org.apache.tapestry5.test.TapestryTestConstants class AppFolderTests extends TapestryCoreTestCase { @@ -45,4 +46,22 @@ class AppFolderTests extends TapestryCor assertTitle "Index Page" } + +@Test +void asset_access() { +openLinks "t5app/" + +// Ony one image on page +String assetURL = getAttribute("//img/@src") + +assert assetURL.startsWith("/t5app/assets/") + +URL url = new URL(getBaseURL() + assetURL.substring(1)) + +byte[] downloaded = url.bytes + +byte[] actual = new File(TapestryTestConstants.MODULE_BASE_DIR, "src/test/appfolder/images/t5-logo.png").bytes + +assertEquals downloaded, actual, "Contents of t5-logo.png do not match" +} }
svn commit: r1164210 - /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java
Author: hlship Date: Thu Sep 1 19:01:51 2011 New Revision: 1164210 URL: http://svn.apache.org/viewvc?rev=1164210&view=rev Log: TAP5-743: Make a correction to page render request decoding that appears to only occur when testing with Selenium Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java?rev=1164210&r1=1164209&r2=1164210&view=diff == --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java Thu Sep 1 19:01:51 2011 @@ -89,7 +89,7 @@ public class ComponentEventLinkEncoderIm boolean hasAppFolder = applicationFolder.equals(""); -applicationFolderPrefix = hasAppFolder ? null : SLASH + applicationFolder + SLASH; +applicationFolderPrefix = hasAppFolder ? null : SLASH + applicationFolder; String applicationFolderPattern = hasAppFolder ? "" : applicationFolder + SLASH; @@ -292,9 +292,17 @@ public class ComponentEventLinkEncoderIm assert path.substring(0, prefixLength).equalsIgnoreCase(applicationFolderPrefix); +// This checks that the character after the prefix is a slash ... the extra complexity +// only seems to occur in Selenium. There's some ambiguity about what to do with a request for +// the application folder that doesn't end with a slash. Manuyal with Chrome and IE 8 shows that such +// requests are passed through with a training slash, automated testing with Selenium and FireFox +// can include requests for the folder without the trailing slash. + +assert path.length() <= prefixLength || path.charAt(prefixLength) == '/'; + // Strip off the folder prefix (i.e., "/foldername"), leaving the rest of the path (i.e., "/en/pagename"). -path = path.substring(prefixLength - 1); +path = path.substring(prefixLength); }
svn commit: r1164209 - in /tapestry/tapestry5/trunk/tapestry-core/src/test: appfolder/ appfolder/t5app/ conf/ groovy/org/apache/tapestry5/integration/appfolder/ resources/org/apache/tapestry5/integrat
Author: hlship Date: Thu Sep 1 19:01:47 2011 New Revision: 1164209 URL: http://svn.apache.org/viewvc?rev=1164209&view=rev Log: TAP5-743: Add basic tests for application folder support Added: tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/static.html tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/t5app/ContextTemplate.tml tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/appfolder/pages/Index.tml Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/static.html URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/static.html?rev=1164209&r1=1164208&r2=1164209&view=diff == --- tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/static.html (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/static.html Thu Sep 1 19:01:47 2011 @@ -1,4 +1,7 @@ +Static File + + Static File in Context @@ -6,4 +9,5 @@ to Tapestry application + \ No newline at end of file Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/t5app/ContextTemplate.tml URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/t5app/ContextTemplate.tml?rev=1164209&r1=1164208&r2=1164209&view=diff == --- tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/t5app/ContextTemplate.tml (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/t5app/ContextTemplate.tml Thu Sep 1 19:01:47 2011 @@ -1,9 +1,11 @@ http://tapestry.apache.org/schema/tapestry_5_3.xsd";> +Context Template + Context Template Demo back to index - + Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml?rev=1164209&r1=1164208&r2=1164209&view=diff == --- tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/test/conf/testng.xml Thu Sep 1 19:01:47 2011 @@ -8,93 +8,100 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Added: tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy?rev=1164209&view=auto == --- tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy (added) +++ tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/AppFolderTests.groovy Thu Sep 1 19:01:47 2011 @@ -0,0 +1,48 @@ +package org.apache.tapestry5.integration.appfolder + +import org.apache.tapestry5.integration.TapestryCoreTestCase +import org.testng.annotations.Test + +class AppFolderTests extends TapestryCoreTestCase +{ + +/** + * Tests basic navigation, and also tests ability to place a page template in the context, under the configured + * a
svn commit: r1164207 - in /tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages: ContextTemplate.groovy ContextTemplate.java
Author: hlship Date: Thu Sep 1 19:01:42 2011 New Revision: 1164207 URL: http://svn.apache.org/viewvc?rev=1164207&view=rev Log: TAP5-743: Change the ContextTemplate demo page to a Groovy class (the original intention) Added: tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.groovy - copied, changed from r1164206, tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.java Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.java Copied: tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.groovy (from r1164206, tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.java) URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.groovy?p2=tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.groovy&p1=tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.java&r1=1164206&r2=1164207&rev=1164207&view=diff == --- tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.groovy Thu Sep 1 19:01:42 2011 @@ -1,8 +1,5 @@ package org.apache.tapestry5.integration.appfolder.pages; -/** - * - */ public class ContextTemplate { }
svn commit: r1164206 - /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java
Author: hlship Date: Thu Sep 1 19:01:38 2011 New Revision: 1164206 URL: http://svn.apache.org/viewvc?rev=1164206&view=rev Log: TAP5-743: Add note about servlet container case sensitivity Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java?rev=1164206&r1=1164205&r2=1164206&view=diff == --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java Thu Sep 1 19:01:38 2011 @@ -356,6 +356,9 @@ public class SymbolConstants * This also affects the search for page templates (which are allowed within the web context). When set to a non-blank value, page templates are searched for in the folder, rather than in the root context. * * The default value is the empty string, which preserves Tapestry 5.2 behavior (and continues to be appropriate for most applications). + * + * Note that while Tapestry is case-insensitive, the servlet container is not, so the configured value must exactly match + * the folder name inside the {@code } value, including case. * * @since 5.3 */
svn commit: r1164204 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/internal/services/templates/ main/java/org/apache/tapestry5/services/ test/appfolder/ test/appfold
Author: hlship Date: Thu Sep 1 19:01:29 2011 New Revision: 1164204 URL: http://svn.apache.org/viewvc?rev=1164204&view=rev Log: TAP5-743: Allow for page templates in the folder, under the context Begin adding tests Added: tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/ tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/WEB-INF/ tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/WEB-INF/web.xml tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/images/ tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/images/t5-logo.png tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/t5app/ tapestry/tapestry5/trunk/tapestry-core/src/test/appfolder/t5app/ContextTemplate.tml tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/ tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/ContextTemplate.java tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/pages/Index.groovy tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/services/ tapestry/tapestry5/trunk/tapestry-core/src/test/groovy/org/apache/tapestry5/integration/appfolder/services/AppModule.groovy tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/appfolder/ tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/appfolder/pages/ tapestry/tapestry5/trunk/tapestry-core/src/test/resources/org/apache/tapestry5/integration/appfolder/pages/Index.tml Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java?rev=1164204&r1=1164203&r2=1164204&view=diff == --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/templates/PageTemplateLocator.java Thu Sep 1 19:01:29 2011 @@ -14,8 +14,6 @@ package org.apache.tapestry5.internal.services.templates; -import java.util.Locale; - import org.apache.tapestry5.TapestryConstants; import org.apache.tapestry5.ioc.Resource; import org.apache.tapestry5.ioc.internal.util.InternalUtils; @@ -23,9 +21,11 @@ import org.apache.tapestry5.model.Compon import org.apache.tapestry5.services.ComponentClassResolver; import org.apache.tapestry5.services.templates.ComponentTemplateLocator; +import java.util.Locale; + /** * The special case for pages, where the template is searched for in the web application context. - * + * * @since 5.2.0 */ public class PageTemplateLocator implements ComponentTemplateLocator @@ -34,15 +34,22 @@ public class PageTemplateLocator impleme private final ComponentClassResolver resolver; -public PageTemplateLocator(Resource contextRoot, ComponentClassResolver resolver) +private final String prefix; + +public PageTemplateLocator(Resource contextRoot, ComponentClassResolver resolver, String applicationFolder) { this.contextRoot = contextRoot; this.resolver = resolver; + +prefix = applicationFolder.equals("") ? "" : applicationFolder + "/"; } public Resource locateTemplate(ComponentModel model, Locale locale) { -if (!model.isPage()) { return null; } +if (!model.isPage()) +{ +return null; +} String className = model.getComponentClassName(); @@ -60,7 +67,7 @@ public class PageTemplateLocator impleme logicalName = logicalName.substring(0, slashx + 1) + simpleClassName; } -String path = String.format("%s.%s", logicalName, TapestryConstants.TEMPLATE_EXTENSION); +String path = prefix + logicalName + "." + TapestryConstants.TEMPLATE_EXTENSION; return contextRoot.forFile(path).forLocale(locale); } Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=1164204&r1=1164203&r2=1164204&view=diff =
svn commit: r1164203 - in /tapestry/tapestry5/trunk/tapestry-core/src: main/java/org/apache/tapestry5/ main/java/org/apache/tapestry5/internal/services/ main/java/org/apache/tapestry5/internal/service
Author: hlship Date: Thu Sep 1 19:01:14 2011 New Revision: 1164203 URL: http://svn.apache.org/viewvc?rev=1164203&view=rev Log: TAP5-743: First pass at application folder work Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetDispatcher.java tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImpl.java tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/assets/AssetPathConstructorImpl.java tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ClasspathAssetAliasManagerImplTest.java tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventDispatcherTest.java tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ComponentEventLinkEncoderImplTest.java tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/services/ContextAssetFactoryTest.java Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java?rev=1164203&r1=1164202&r2=1164203&view=diff == --- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java (original) +++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/SymbolConstants.java Thu Sep 1 19:01:14 2011 @@ -304,6 +304,9 @@ public class SymbolConstants * object that was accessed during the request. * * This is provided as a performance enhancement for servers that do not use clustered sessions. + * + * The default is {@code true}, to preserve 5.2 behavior. For non-clustered applications (the majority), this value should be + * overridden to {@code false}. A future release of Tapestry may change the default. * * @since 5.3 */ @@ -332,7 +335,7 @@ public class SymbolConstants * can cause a page load error if there is no matching component in the component's template. Although this is correct behavior, * it can make the upgrade from 5.2 to 5.3 difficult if an existing app had some "left over" event handler methods. Changing * this symbol to {@code false} is a temporary approach to resolving this problem. - * + * * This symbol will be ignored in release 5.4 and removed in 5.5. * * @since 5.3 @@ -340,4 +343,21 @@ public class SymbolConstants */ @Deprecated public static final String UNKNOWN_COMPONENT_ID_CHECK_ENABLED = "tapestry.compatibility.unknown-component-id-check-enabled"; + +/** + * The name of a folder in which the Tapestry application executes. Prior to 5.3, a Tapestry application always responded to all + * URLs in the context under the context root; by setting this to the name of a folder, the T5 URLs will be inside that folder only, and should + * match a corresponding entry in the {@code web.xml} configuration file. This is useful when running multiple servlets within the same web application (such as when migrating + * from Tapestry 4 or some other framework, to Tapestry 5). + * Effectively, if this symbol is set to a value, that folder name will be placed after the context path + * (typically "/") and before the locale, page name, or other prefix. For example, if this symbol is set to "app", the {@code web.xml } should be set to {@code /app/*}, and Tapestry will + * only be in invoked by the servlet container for requests inside the virtual {@code app} folder. + * + * This also affects the search for page templates (which are allowed within the web context). When set to a non-blank value, page templates are searched for in the folder, rather than in the root context. + * + * The default value is the empty string, which preserves Tapestry 5.2 behavior (and continues to be appropriate for most applications). + * + * @since 5.3 + */ +public static final String APPLICATION_FOLDER = "tapestry.application-folder"; } Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetDispatcher.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/AssetDispatcher.java?rev=1164203&r1=1164202&r2=1164203&view=diff == --- tapestry/tapestry5/trunk/ta
[jira] [Commented] (TAP5-1625) RubyonRails-like Asset Pipeline
[ https://issues.apache.org/jira/browse/TAP5-1625?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13095407#comment-13095407 ] Thiago H. de Paula Figueiredo commented on TAP5-1625: - Tapestry already combines all JavaScript files in a given page into a single one for a long time. Howard already said he wanted to support something like SCSS in Tapestry. And Tapestry already provides hooks for any asset transformations, so all you're suggesting that isn't provided yet could be provided as a separate project, packaged as a drop-in JAR. > RubyonRails-like Asset Pipeline > --- > > Key: TAP5-1625 > URL: https://issues.apache.org/jira/browse/TAP5-1625 > Project: Tapestry 5 > Issue Type: Wish > Components: tapestry-core >Reporter: Toby >Assignee: Howard M. Lewis Ship >Priority: Minor > > see: > http://weblog.rubyonrails.org/2011/5/22/rails-3-1-release-candidate > "The Asset Pipeline > The star feature of 3.1 is the asset pipeline powered by Sprockets 2.0. It > makes CSS and JavaScript first-class code citizens and enables proper > organization, including use in plugins and engines. See my RailsConf keynote > for a full tour. This comes with SCSS as the default for stylesheets and > CoffeeScript as the default for JavaScript. Much documentation is on the way > for this." > http://www.youtube.com/watch?v=cGdCI2HhfAU > something like this would be nice in Tapestry - at least a way to > automatically generate a single JS file to increase load speed would be > important as a core-feature. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Resolved] (TAP5-1625) RubyonRails-like Asset Pipeline
[ https://issues.apache.org/jira/browse/TAP5-1625?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Howard M. Lewis Ship resolved TAP5-1625. Resolution: Invalid Assignee: Howard M. Lewis Ship Tapestry 5.3 already has the key components of this, of course its not implemented the same way. Tapestry has JavaScript aggregation (since 5.1, and improved in 5.2), and in 5.3 adds ResourceTransformer that allow dynamic conversion of files from one type to another (such as CoffeeScript to JavaScript). In addition, there's now direct support for use of YUICompressor (as a ResourceMinimizer). It's a bit different than Rails, in that your code references the resource, and Tapestry uses configuration to determine how to convert it into simple JS and CSS for the client. In Rails, you add additional file extensions to guide Rails on how to transform the resource, and (I believe), JS aggregation is done at build time, not runtime. > RubyonRails-like Asset Pipeline > --- > > Key: TAP5-1625 > URL: https://issues.apache.org/jira/browse/TAP5-1625 > Project: Tapestry 5 > Issue Type: Wish > Components: tapestry-core >Reporter: Toby >Assignee: Howard M. Lewis Ship >Priority: Minor > > see: > http://weblog.rubyonrails.org/2011/5/22/rails-3-1-release-candidate > "The Asset Pipeline > The star feature of 3.1 is the asset pipeline powered by Sprockets 2.0. It > makes CSS and JavaScript first-class code citizens and enables proper > organization, including use in plugins and engines. See my RailsConf keynote > for a full tour. This comes with SCSS as the default for stylesheets and > CoffeeScript as the default for JavaScript. Much documentation is on the way > for this." > http://www.youtube.com/watch?v=cGdCI2HhfAU > something like this would be nice in Tapestry - at least a way to > automatically generate a single JS file to increase load speed would be > important as a core-feature. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Commented] (TAP5-1409) datefield - cannot select same day in different month
[ https://issues.apache.org/jira/browse/TAP5-1409?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13095402#comment-13095402 ] b kopelove commented on TAP5-1409: -- This fix is great but it introduced a different bug. When one clicks on the month name at the top of the calendar, a popup list of surrounding months is shown. Upon clicking one of these months, the calendar disappears because the javascript thinks that you have clicked "outside" the calendar and exits. I identified a simple fix to not exit when a popup month is selected: ---change: 331 if (parent.className == 'datePicker') { ---to: 331 if (parent.className == 'datePicker' || parent.className == 'labelPopup') { > datefield - cannot select same day in different month > - > > Key: TAP5-1409 > URL: https://issues.apache.org/jira/browse/TAP5-1409 > Project: Tapestry 5 > Issue Type: Bug >Affects Versions: 5.2.4 >Reporter: Paul Stanton >Assignee: Robert Zeigler > Fix For: 5.3 > > Attachments: datepicker.js > > > say your date format is m/d/ and the initial value is 1/1/2011 and you > want to change it to 2/1/2011.. that is not possible. changing month, the > selected 'day' is still selected and therefore not selectable. > use case: > initial date is 1/1/2011 > 1. open date picker > 2. change month to feb > 3. try to click on 1st of feb > - nothing happens. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira
[jira] [Created] (TAP5-1625) RubyonRails-like Asset Pipeline
RubyonRails-like Asset Pipeline --- Key: TAP5-1625 URL: https://issues.apache.org/jira/browse/TAP5-1625 Project: Tapestry 5 Issue Type: Wish Components: tapestry-core Reporter: Toby Priority: Minor see: http://weblog.rubyonrails.org/2011/5/22/rails-3-1-release-candidate "The Asset Pipeline The star feature of 3.1 is the asset pipeline powered by Sprockets 2.0. It makes CSS and JavaScript first-class code citizens and enables proper organization, including use in plugins and engines. See my RailsConf keynote for a full tour. This comes with SCSS as the default for stylesheets and CoffeeScript as the default for JavaScript. Much documentation is on the way for this." http://www.youtube.com/watch?v=cGdCI2HhfAU something like this would be nice in Tapestry - at least a way to automatically generate a single JS file to increase load speed would be important as a core-feature. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira