Re: 5.3 Beta change in behaviour from Alpha with regard to event methods
On 28.09.2011 01:56, Howard Lewis Ship wrote: Also, you can turn this check off, at least in 5.3 (in later releases, the option to turn off the check may be removed). See the release notes on the Tapestry home page. Sorry. I have read the release notes 2-3 times since moving from 5.2 to 5.3 alpha, but somehow I didn't understand this. Maybe it should be also mentioned with a bullet in breaking changes, just because it is not seen at compile time. Can Tapestry start these checks for all the initialized pages at start time? So one could be warned in advance. It is hard to find all such methods and hidden components while in development, especially if not all pages are covered with tests. I have tried some extensions for Eclipse to find dead code, but they give a zillion of false positives due to how Tapestry works. smime.p7s Description: S/MIME Cryptographic Signature
Re: 5.3 Beta change in behaviour from Alpha with regard to event methods
Hi, I think you are looking for the part New Component Class Validations in the release noteshttp://tapestry.apache.org/release-notes-53.html#ReleaseNotes5.3-ReleaseNotes%253ATapestry5.3.0 . The symbol you have to use to turn off this check is SymbolConstants.UNKNOWN_COMPONENT_ID_CHECK_ENABLED. USe this in contributeApplicationDefaults in the IOC module. Cheers On Wed, Sep 28, 2011 at 10:20 AM, Vangel V. Ajanovski a...@ii.edu.mk wrote: On 28.09.2011 01:56, Howard Lewis Ship wrote: Also, you can turn this check off, at least in 5.3 (in later releases, the option to turn off the check may be removed). See the release notes on the Tapestry home page. Sorry. I have read the release notes 2-3 times since moving from 5.2 to 5.3 alpha, but somehow I didn't understand this. Maybe it should be also mentioned with a bullet in breaking changes, just because it is not seen at compile time. Can Tapestry start these checks for all the initialized pages at start time? So one could be warned in advance. It is hard to find all such methods and hidden components while in development, especially if not all pages are covered with tests. I have tried some extensions for Eclipse to find dead code, but they give a zillion of false positives due to how Tapestry works.
Injecting domain object into all pages
Hi guys, I am new to Tapestry. Over the past couple of weeks, I have migrated a simple Tapestry application we had to T 5.3 and really enjoyed the experience. Now I am evaluating Tapestry for some further development by writing a prototype application. One of the things I want to be able to do is inject a domain object inside all pages that have a field of that type. The situation is this :- 1. One tapestry app will serve multiple sites 2. There is a domain object called Site which contains configuration for site, and there is a mechanism to identify the Site for current request based on information in the URL used (let us say a query parameter called site, but in reality this will be the domain name used to access the application). What I am trying to do is intercept the request, look up the Site and inject the Site object inside the target page which may look like this :- class MyPage { private Site site; } It appears that the first two steps can be accomplished either by using a Decorator or a HttpServletRequestFilter. After that how to I inject the Site object inside the target page? I have searched through the Nabble forum, Tapestry documentation, Tapestry quickstart etc. but I can't see a clear way of how to do this. If anyone can provide an answer, or point me to some demo code or another resource, that would help me greatly. Thanks! Cheers, Sonny Gill
[t5.2.6] Composing pages through inheritance problem
This is a new approach I'm taking to compose pages. I'm trying to convert an existing application to tapestry but one page turned out to be really big and hard to maintain. This page has many form fields. Some fields should always exists, and conditionally show other fields depending on a condition, let's say a test type. I used to do this in one page template, then conditionally showing the fields I want using the t:if component and a configured bean-editor inside. Then I decided to go more scalable so I decided to make a page for each test and inherit the page with the common fields. This will release me for the messy t:if p:else tags all over the center of the page. Now I'm facing an issue that my parent page has injected components (@InjectComponent) and when displaying the child page, it complains: Component tests/DNSTest does not contain embedded component 'gatewayField'. The gatewayField variable exists in the parent page as: @InjectComponent private TextField gatewayField ..and there are other fields. I tried adding @Property, and getters\setters my self, still didn't work. It only worked when I commented these fields and code referring to them. How can I resolve this ? And is this the best approach to dynamically construct a page ? Thank you all for your time :) -- *Regards,* *Muhammad Gelbana Java Developer*
Re: DEAD LOCK in VirtualAssetStreamer
Thanks Howard! Unortunately we need some time to migrate to 5.2.x and we face this issues each day, thus loosing our cluster and shop-customers. Downtimes each day because of this issue is, well, ugly to horrible depending on whom you ask... Unfortunately we depend on core library mappings in our current version like configuration.add(new LibraryMapping(core, x.y.z.core)); which failed in 5.2, therefore migration means more than switching a version or jar to us. Is there any workaround or quickfix we can go for immediately to buy us time to allow proper migration from 5.1.0.5? Any hint is highly appreciated Jens Am 22.09.11 17:52, schrieb Howard Lewis Ship: This is known and fixed in 5.2. On Thu, Sep 22, 2011 at 3:36 AM, Jens Breitensteinmailingl...@j-b-s.de wrote: Hi All! It seems we encountered a serious concurrency bug in Tapestry 5.1 under high load. In our special case one thread was blocked and unable to respond and write an asset output stream. As virtual assets are shared and the same ByteArrayOutputStream is reused for the same asset accross multiple threads, the one thread hanging causes all other threads which use the same asset to be blocked too. This happens because ByteArrayOutputStream.writeTo uses synchronized internally. To our personal opinion we should only cache the data but not the ByteArrayOutputStream instances. Any idea how to solve this or am I wrong? Jens - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
[t5.2.6] Is it possible to validate a bean-editor's object using properties file only ?
Hi All, The question says it all and here is some explanation. I have a jar file that I don't wanna add tapestry tapestry annotations to, because It won't always run within tapestry environment. So I can't use @Validate for example. Now when I display an object using bean-editor. I can only validate this object (client-side speaking) by overriding how a parameters is displayed, example: *t:parameter name=param* * t:label for=pName /* * t:textfield t:id=pName value=obj.param t:validate=required/* * /t:parameter* And using either t:validate attributes or using the related .properties for the page including the bean-edior (Ex: param-required-message=Please enter param) Now my question is, why isn't it possible to *only* add validation configuration in the .properties file only for this to work ? -- *Regards,* *Muhammad Gelbana Java Developer*
Re: [t5.2.6] Composing pages through inheritance problem
Hi Muhammad I don't think inheritance is the best approach with tapestry. You can always re-factor your code by composition. Using components is always a better approach. If you have a child page trying to access a component in parent page, IMHO, you should reconsider your refactoring. On Wed, Sep 28, 2011 at 3:58 PM, Muhammad Gelbana m.gelb...@gmail.com wrote: This is a new approach I'm taking to compose pages. I'm trying to convert an existing application to tapestry but one page turned out to be really big and hard to maintain. This page has many form fields. Some fields should always exists, and conditionally show other fields depending on a condition, let's say a test type. I used to do this in one page template, then conditionally showing the fields I want using the t:if component and a configured bean-editor inside. Then I decided to go more scalable so I decided to make a page for each test and inherit the page with the common fields. This will release me for the messy t:if p:else tags all over the center of the page. Now I'm facing an issue that my parent page has injected components (@InjectComponent) and when displaying the child page, it complains: Component tests/DNSTest does not contain embedded component 'gatewayField'. The gatewayField variable exists in the parent page as: @InjectComponent private TextField gatewayField ..and there are other fields. I tried adding @Property, and getters\setters my self, still didn't work. It only worked when I commented these fields and code referring to them. How can I resolve this ? And is this the best approach to dynamically construct a page ? Thank you all for your time :) -- *Regards,* *Muhammad Gelbana Java Developer* -- Regards Taha Hafeez Siddiqi (tawus) http://tawus.wordpress.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Injecting domain object into all pages
I have a site that works this way also. I'm sure what you are trying to do could be done but I just do this. 1. Make Site a service 2. class MyPage { @Inject private Site site; } I guess it's a bit more typing but it's easy. Since site is a service it has access to the Request and whatever else you might need. You don't need to intercept the request. Depending on how it works you might want the service to be per thread. If you really want to automate it I suspect it can be done with TransformField in a ComponentClassTransformWorker, but Site would still need to be a service. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [t5.2.6] Composing pages through inheritance problem
Thank you Taha :) But what do you mean by You can always re-factor your code by composition. On Wed, Sep 28, 2011 at 1:11 PM, Taha Hafeez tawus.tapes...@gmail.comwrote: Hi Muhammad I don't think inheritance is the best approach with tapestry. You can always re-factor your code by composition. Using components is always a better approach. If you have a child page trying to access a component in parent page, IMHO, you should reconsider your refactoring. On Wed, Sep 28, 2011 at 3:58 PM, Muhammad Gelbana m.gelb...@gmail.com wrote: This is a new approach I'm taking to compose pages. I'm trying to convert an existing application to tapestry but one page turned out to be really big and hard to maintain. This page has many form fields. Some fields should always exists, and conditionally show other fields depending on a condition, let's say a test type. I used to do this in one page template, then conditionally showing the fields I want using the t:if component and a configured bean-editor inside. Then I decided to go more scalable so I decided to make a page for each test and inherit the page with the common fields. This will release me for the messy t:if p:else tags all over the center of the page. Now I'm facing an issue that my parent page has injected components (@InjectComponent) and when displaying the child page, it complains: Component tests/DNSTest does not contain embedded component 'gatewayField'. The gatewayField variable exists in the parent page as: @InjectComponent private TextField gatewayField ..and there are other fields. I tried adding @Property, and getters\setters my self, still didn't work. It only worked when I commented these fields and code referring to them. How can I resolve this ? And is this the best approach to dynamically construct a page ? Thank you all for your time :) -- *Regards,* *Muhammad Gelbana Java Developer* -- Regards Taha Hafeez Siddiqi (tawus) http://tawus.wordpress.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- *Regards,* *Muhammad Gelbana Java Developer*
Re: [t5.2.6] Composing pages through inheritance problem
Use components :) On Wed, Sep 28, 2011 at 5:03 PM, Muhammad Gelbana m.gelb...@gmail.com wrote: Thank you Taha :) But what do you mean by You can always re-factor your code by composition. On Wed, Sep 28, 2011 at 1:11 PM, Taha Hafeez tawus.tapes...@gmail.comwrote: Hi Muhammad I don't think inheritance is the best approach with tapestry. You can always re-factor your code by composition. Using components is always a better approach. If you have a child page trying to access a component in parent page, IMHO, you should reconsider your refactoring. On Wed, Sep 28, 2011 at 3:58 PM, Muhammad Gelbana m.gelb...@gmail.com wrote: This is a new approach I'm taking to compose pages. I'm trying to convert an existing application to tapestry but one page turned out to be really big and hard to maintain. This page has many form fields. Some fields should always exists, and conditionally show other fields depending on a condition, let's say a test type. I used to do this in one page template, then conditionally showing the fields I want using the t:if component and a configured bean-editor inside. Then I decided to go more scalable so I decided to make a page for each test and inherit the page with the common fields. This will release me for the messy t:if p:else tags all over the center of the page. Now I'm facing an issue that my parent page has injected components (@InjectComponent) and when displaying the child page, it complains: Component tests/DNSTest does not contain embedded component 'gatewayField'. The gatewayField variable exists in the parent page as: @InjectComponent private TextField gatewayField ..and there are other fields. I tried adding @Property, and getters\setters my self, still didn't work. It only worked when I commented these fields and code referring to them. How can I resolve this ? And is this the best approach to dynamically construct a page ? Thank you all for your time :) -- *Regards,* *Muhammad Gelbana Java Developer* -- Regards Taha Hafeez Siddiqi (tawus) http://tawus.wordpress.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- *Regards,* *Muhammad Gelbana Java Developer* -- Regards Taha Hafeez Siddiqi (tawus) http://tawus.wordpress.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Injecting domain object into all pages
Thanks Barry. Site is a domain layer object and knows nothing about Request/Response etc. There will be a limited number of Site objects, one for each site supported, created and configured at the application start up. I could set it up as a Service for Tapestry application. But can I then provide a Service lookup method that can look at the current request, get the correct Site using some criteria, and hand it over to Tapestry to inject into the page for current request? So, something like :- public Service lookupSiteService(Request request) { String id = ...get site id from the request in some way...; SiteRepository repository = ...; // Can I inject an implementation of SiteRepository (also a domain layer object) here? return repository.getSite(id); } Cheers, Sonny On Wed, Sep 28, 2011 at 1:33 PM, Barry Books trs...@gmail.com wrote: I have a site that works this way also. I'm sure what you are trying to do could be done but I just do this. 1. Make Site a service 2. class MyPage { @Inject private Site site; } I guess it's a bit more typing but it's easy. Since site is a service it has access to the Request and whatever else you might need. You don't need to intercept the request. Depending on how it works you might want the service to be per thread. If you really want to automate it I suspect it can be done with TransformField in a ComponentClassTransformWorker, but Site would still need to be a service. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- http://sonnygill.net/ http://twitter.com/sonny_gill http://www.linkedin.com/in/sonnygill
Re: [t5.2.6] Composing pages through inheritance problem
I know you mean I should use components but in what way ? I retracted the inheritance approache and replaced it with the switchinghttp://tapestry.apache.org/switching-cases.htmlidea which is marvelous. This way I won't get into the messy t:if tree. I'm trying to figure out *every possible way* of composing pages from components, that's why I asked you what do you mean :) And this way I'll learn more about components till hopefully reach the point when I say Now I get it ! :) For example consider this case, what if I want to have the blocks in the switching example, to be in a separate .tml file ? Just to reduce the page's size and make it easier to maintain. Actually I can apply this idea to the common test fields part. It's a bean editor declaration in the page's .tml file: *t:CommonTestDataBeanEditor t:id=commonTestDataEditor object=commonTestData* * t:parameter name=prefix* * t:label for=**prefix** /* * t:textfield t:id=**prefix** value=commonTestData.**prefix**/* * /t:parameter* * /t:CommonTestDataBeanEditor* Is it possible to get this bean-editor's declaration from another .tml file ? I tried extending the bean editor component, but I couldn't figure out what to put in the .tml file ! Can mixins fit in ? I'm all about trying everything and mastering this very flexible and nice framework, that's why I'm asking too many questions :) Thank you for your time :) On Wed, Sep 28, 2011 at 1:37 PM, Taha Hafeez tawus.tapes...@gmail.comwrote: Use components :) On Wed, Sep 28, 2011 at 5:03 PM, Muhammad Gelbana m.gelb...@gmail.com wrote: Thank you Taha :) But what do you mean by You can always re-factor your code by composition. On Wed, Sep 28, 2011 at 1:11 PM, Taha Hafeez tawus.tapes...@gmail.com wrote: Hi Muhammad I don't think inheritance is the best approach with tapestry. You can always re-factor your code by composition. Using components is always a better approach. If you have a child page trying to access a component in parent page, IMHO, you should reconsider your refactoring. On Wed, Sep 28, 2011 at 3:58 PM, Muhammad Gelbana m.gelb...@gmail.com wrote: This is a new approach I'm taking to compose pages. I'm trying to convert an existing application to tapestry but one page turned out to be really big and hard to maintain. This page has many form fields. Some fields should always exists, and conditionally show other fields depending on a condition, let's say a test type. I used to do this in one page template, then conditionally showing the fields I want using the t:if component and a configured bean-editor inside. Then I decided to go more scalable so I decided to make a page for each test and inherit the page with the common fields. This will release me for the messy t:if p:else tags all over the center of the page. Now I'm facing an issue that my parent page has injected components (@InjectComponent) and when displaying the child page, it complains: Component tests/DNSTest does not contain embedded component 'gatewayField'. The gatewayField variable exists in the parent page as: @InjectComponent private TextField gatewayField ..and there are other fields. I tried adding @Property, and getters\setters my self, still didn't work. It only worked when I commented these fields and code referring to them. How can I resolve this ? And is this the best approach to dynamically construct a page ? Thank you all for your time :) -- *Regards,* *Muhammad Gelbana Java Developer* -- Regards Taha Hafeez Siddiqi (tawus) http://tawus.wordpress.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- *Regards,* *Muhammad Gelbana Java Developer* -- Regards Taha Hafeez Siddiqi (tawus) http://tawus.wordpress.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- *Regards,* *Muhammad Gelbana Java Developer*
Re: Injecting domain object into all pages
Hi, I built a website with similar requirements, and it is not hard to do that with Tapestry. A simple approach is to built a service that returns correct 'Site' instance, and use it everywhere where you need to 'site'. So instead having private Site site; you would have, e.g. @Inject private SiteLookup lookup; and instead using 'site', you would use 'lookup.getSite()'. SiteLookup can depend on 'Request' service, so there is no need to pass it as argument to getSite() method. But, if you are not afraid of some more advanced machinery, you can contribute your own InjectionProvider, and inject 'Site' directly, something like: public class SiteInjectionProvider implements InjectionProvider { private final Request request; public SiteInjectionProvider (Request request) { this.request = request; } @Override public boolean provideInjection(String fieldName, @SuppressWarnings(rawtypes) Class fieldType, ObjectLocator locator, ClassTransformation transformation, MutableComponentModel componentModel) { if (!Site.class.equals(fieldType)) { return false; } TransformField field = transformation.getField(fieldName); ComponentValueProviderFieldValueConduit provider = createProvider(fieldName); field.replaceAccess(provider); return true; } private ComponentValueProviderFieldValueConduit createProvider(final String fieldName) { return new ComponentValueProviderFieldValueConduit() { public FieldValueConduit get(final ComponentResources resources) { return new ReadOnlyFieldValueConduit(resources, fieldName) { public Object get() { return ; // --- here implement selecting correct Site based on Request } }; } }; } } Remember to contribute your injection provider in your AppModule @Contribute(InjectionProvider.class) public static void setupInjectingSite(OrderedConfigurationInjectionProvider configuration) { configuration.addInstance(site, SiteInjectionProvider .class, after:Default); } After that, you would be able to use @Inject private Site site; on your pages and components. Best regards, Cezary On Wed, Sep 28, 2011 at 2:39 PM, Sonny Gill sonny.pub...@gmail.com wrote: Thanks Barry. Site is a domain layer object and knows nothing about Request/Response etc. There will be a limited number of Site objects, one for each site supported, created and configured at the application start up. I could set it up as a Service for Tapestry application. But can I then provide a Service lookup method that can look at the current request, get the correct Site using some criteria, and hand it over to Tapestry to inject into the page for current request? So, something like :- public Service lookupSiteService(Request request) { String id = ...get site id from the request in some way...; SiteRepository repository = ...; // Can I inject an implementation of SiteRepository (also a domain layer object) here? return repository.getSite(id); }
Re: Injecting domain object into all pages
Hi Cezary, Thanks a lot for the detailed response. That InjectionProvider example looks like exactly what I am looking for. I will give that a go. Cheers, Sonny On Wed, Sep 28, 2011 at 2:59 PM, Cezary Biernacki cezary...@gmail.comwrote: Hi, I built a website with similar requirements, and it is not hard to do that with Tapestry. A simple approach is to built a service that returns correct 'Site' instance, and use it everywhere where you need to 'site'. So instead having private Site site; you would have, e.g. @Inject private SiteLookup lookup; and instead using 'site', you would use 'lookup.getSite()'. SiteLookup can depend on 'Request' service, so there is no need to pass it as argument to getSite() method. But, if you are not afraid of some more advanced machinery, you can contribute your own InjectionProvider, and inject 'Site' directly, something like: public class SiteInjectionProvider implements InjectionProvider { private final Request request; public SiteInjectionProvider (Request request) { this.request = request; } @Override public boolean provideInjection(String fieldName, @SuppressWarnings(rawtypes) Class fieldType, ObjectLocator locator, ClassTransformation transformation, MutableComponentModel componentModel) { if (!Site.class.equals(fieldType)) { return false; } TransformField field = transformation.getField(fieldName); ComponentValueProviderFieldValueConduit provider = createProvider(fieldName); field.replaceAccess(provider); return true; } private ComponentValueProviderFieldValueConduit createProvider(final String fieldName) { return new ComponentValueProviderFieldValueConduit() { public FieldValueConduit get(final ComponentResources resources) { return new ReadOnlyFieldValueConduit(resources, fieldName) { public Object get() { return ; // --- here implement selecting correct Site based on Request } }; } }; } } Remember to contribute your injection provider in your AppModule @Contribute(InjectionProvider.class) public static void setupInjectingSite(OrderedConfigurationInjectionProvider configuration) { configuration.addInstance(site, SiteInjectionProvider .class, after:Default); } After that, you would be able to use @Inject private Site site; on your pages and components. Best regards, Cezary
Re: DEAD LOCK in VirtualAssetStreamer
Hi, You can replace default VirtualAssetStreamer with your implementation by contributing it to ServiceOverride (contributeServiceOverride). Your version of VirtualAssetStreamer can be based on existing org.apache.tapestry5.internal.services.VirtualAssetStreamerImpl, just replace all references of ByteArrayOutputStream to your class that extends ByteArrayOutputStream but has not synchronized writeTo(). Another that does not require application change is to deploy a caching proxy to cache just assets. Best regards, Cezary On Wed, Sep 28, 2011 at 1:00 PM, Jens Breitenstein mailingl...@j-b-s.dewrote: Thanks Howard! Unortunately we need some time to migrate to 5.2.x and we face this issues each day, thus loosing our cluster and shop-customers. Downtimes each day because of this issue is, well, ugly to horrible depending on whom you ask... Unfortunately we depend on core library mappings in our current version like configuration.add(new LibraryMapping(core, x.y.z.core)); which failed in 5.2, therefore migration means more than switching a version or jar to us. Is there any workaround or quickfix we can go for immediately to buy us time to allow proper migration from 5.1.0.5? Any hint is highly appreciated Jens Am 22.09.11 17:52, schrieb Howard Lewis Ship: This is known and fixed in 5.2. On Thu, Sep 22, 2011 at 3:36 AM, Jens Breitensteinmailinglist@j-b-**s.demailingl...@j-b-s.de wrote: Hi All! It seems we encountered a serious concurrency bug in Tapestry 5.1 under high load. In our special case one thread was blocked and unable to respond and write an asset output stream. As virtual assets are shared and the same ByteArrayOutputStream is reused for the same asset accross multiple threads, the one thread hanging causes all other threads which use the same asset to be blocked too. This happens because ByteArrayOutputStream.writeTo uses synchronized internally. To our personal opinion we should only cache the data but not the ByteArrayOutputStream instances. Any idea how to solve this or am I wrong? Jens --**--**- To unsubscribe, e-mail: users-unsubscribe@tapestry.**apache.orgusers-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [t5.2.6] Composing pages through inheritance problem
Have you looked at http://tawus.wordpress.com/2011/04/20/tapestry-magic-3-plugin-blocks/ On Wed, Sep 28, 2011 at 6:13 PM, Muhammad Gelbana m.gelb...@gmail.com wrote: I know you mean I should use components but in what way ? I retracted the inheritance approache and replaced it with the switchinghttp://tapestry.apache.org/switching-cases.htmlidea which is marvelous. This way I won't get into the messy t:if tree. I'm trying to figure out *every possible way* of composing pages from components, that's why I asked you what do you mean :) And this way I'll learn more about components till hopefully reach the point when I say Now I get it ! :) For example consider this case, what if I want to have the blocks in the switching example, to be in a separate .tml file ? Just to reduce the page's size and make it easier to maintain. Actually I can apply this idea to the common test fields part. It's a bean editor declaration in the page's .tml file: * t:CommonTestDataBeanEditor t:id=commonTestDataEditor object=commonTestData* * t:parameter name=prefix* * t:label for=**prefix** /* * t:textfield t:id=**prefix** value=commonTestData.**prefix**/* * /t:parameter* * /t:CommonTestDataBeanEditor* Is it possible to get this bean-editor's declaration from another .tml file ? I tried extending the bean editor component, but I couldn't figure out what to put in the .tml file ! Can mixins fit in ? I'm all about trying everything and mastering this very flexible and nice framework, that's why I'm asking too many questions :) Thank you for your time :) On Wed, Sep 28, 2011 at 1:37 PM, Taha Hafeez tawus.tapes...@gmail.comwrote: Use components :) On Wed, Sep 28, 2011 at 5:03 PM, Muhammad Gelbana m.gelb...@gmail.com wrote: Thank you Taha :) But what do you mean by You can always re-factor your code by composition. On Wed, Sep 28, 2011 at 1:11 PM, Taha Hafeez tawus.tapes...@gmail.com wrote: Hi Muhammad I don't think inheritance is the best approach with tapestry. You can always re-factor your code by composition. Using components is always a better approach. If you have a child page trying to access a component in parent page, IMHO, you should reconsider your refactoring. On Wed, Sep 28, 2011 at 3:58 PM, Muhammad Gelbana m.gelb...@gmail.com wrote: This is a new approach I'm taking to compose pages. I'm trying to convert an existing application to tapestry but one page turned out to be really big and hard to maintain. This page has many form fields. Some fields should always exists, and conditionally show other fields depending on a condition, let's say a test type. I used to do this in one page template, then conditionally showing the fields I want using the t:if component and a configured bean-editor inside. Then I decided to go more scalable so I decided to make a page for each test and inherit the page with the common fields. This will release me for the messy t:if p:else tags all over the center of the page. Now I'm facing an issue that my parent page has injected components (@InjectComponent) and when displaying the child page, it complains: Component tests/DNSTest does not contain embedded component 'gatewayField'. The gatewayField variable exists in the parent page as: @InjectComponent private TextField gatewayField ..and there are other fields. I tried adding @Property, and getters\setters my self, still didn't work. It only worked when I commented these fields and code referring to them. How can I resolve this ? And is this the best approach to dynamically construct a page ? Thank you all for your time :) -- *Regards,* *Muhammad Gelbana Java Developer* -- Regards Taha Hafeez Siddiqi (tawus) http://tawus.wordpress.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- *Regards,* *Muhammad Gelbana Java Developer* -- Regards Taha Hafeez Siddiqi (tawus) http://tawus.wordpress.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- *Regards,* *Muhammad Gelbana Java Developer* -- Regards Taha Hafeez Siddiqi (tawus) http://tawus.wordpress.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [t5.2.6] Composing pages through inheritance problem
On Wed, 28 Sep 2011 10:38:53 -0300, Taha Hafeez tawus.tapes...@gmail.com wrote: Have you looked at http://tawus.wordpress.com/2011/04/20/tapestry-magic-3-plugin-blocks/ Which is basically the same approach used by BeanEditor, Grid and other BeanModel-based components. A proven approach. :) -- Thiago H. de Paula Figueiredo Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, and instructor Owner, Ars Machina Tecnologia da Informação Ltda. http://www.arsmachina.com.br - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [T5.3] Symbols for Default Component Parameter Values
On Wed, Sep 28, 2011 at 12:15 AM, Igor Drobiazko igor.drobia...@gmail.com wrote: Actually this is supported since 5.2: https://issues.apache.org/jira/browse/TAP5-1094 I think the proposal here is to have the default value for some parameters (like the grid's rowsPerPage) to bind to a Symbol so the default can be changed more easly... Please fire a jira issue It's something nice to work on... -- Massimo http://meridio.blogspot.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
table
The cell I have added using t:add doesn't show the sort button, on the thead. How can I show the sort button? Please also let me know, whether this is the right way to create table in tapestry? table t:type=grid t:source=truckWoodPriceList t:row=truckWoodPrice t:exclude=woodType, price,created, updated t:rowsPerPage=20 t:pagerPosition=top t:add=truck, cft, wood p:empty pThere are no records to display; /p /p:empty p:truckCell ${truckWoodPrice.truck.id} /p:truckCell p:cftCell ${truckWoodPrice.truck.cft} /p:cftCell p:woodCell ${truckWoodPrice.woodType} @ ${truckWoodPrice.price} /p:woodCell /table public class TruckWoodPrice extends Persistent{ private Truck truck; DateTime dateTime = new DateTime(); private WoodType woodType; private Double price; private Integer truckYear= dateTime.getYear(); //getters and setters } -- View this message in context: http://tapestry.1045711.n5.nabble.com/table-tp4849434p4849434.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Some worries about Tapestry5 after comparing with wicket!!!
Hi, gus, I am investigating web frameworks for our products, which is a big ERP software. After that, I am interested in Tapestry5 and Wicket, and I think we will determine one of them to use. They are very similar and I prefer to T5, but I still would like to know the best solution to address my some concerns in tapestry5,some of them are pros in wicket. 1. How do we add the components or remove them dynamically by coding? 2. How do we set disabled property of components dynamically, by coding not EL expression to binding a method in page class. 3. Is it easy for tapestry to intergrate some other famous framework, like freemaker, velocity, Google guice and some thing like that. Thanks a lot! -- View this message in context: http://tapestry.1045711.n5.nabble.com/Some-worries-about-Tapestry5-after-comparing-with-wicket-tp4849721p4849721.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Some worries about Tapestry5 after comparing with wicket!!!
1). You can use blocks to dynamically build a page from the 'blocks' or you can use Dynamic component in some of the more esoteric cases. 2). components can have any property you want, and can be set dynamically at runtime, via ajax for example. 3). Any frameworks are easily integrated. Guice is a special case because it's an IoC framework, and Tapestry has its own, which is better, so while its possible to integrate Guice, it's not necessary. On Sep 28, 2011, at 10:53 AM, Kevin Jing wrote: Hi, gus, I am investigating web frameworks for our products, which is a big ERP software. After that, I am interested in Tapestry5 and Wicket, and I think we will determine one of them to use. They are very similar and I prefer to T5, but I still would like to know the best solution to address my some concerns in tapestry5,some of them are pros in wicket. 1. How do we add the components or remove them dynamically by coding? 2. How do we set disabled property of components dynamically, by coding not EL expression to binding a method in page class. 3. Is it easy for tapestry to intergrate some other famous framework, like freemaker, velocity, Google guice and some thing like that. Thanks a lot! -- View this message in context: http://tapestry.1045711.n5.nabble.com/Some-worries-about-Tapestry5-after-comparing-with-wicket-tp4849721p4849721.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: table
On Wed, 28 Sep 2011 11:41:25 -0300, csckid testnowsh...@gmail.com wrote: The cell I have added using t:add doesn't show the sort button, on the thead. How can I show the sort button? When you use the add parameter, Grid doesn't know what the associated value is for the columns you're adding. One way is providing a BeanModel to the model parameter and adding columns through beanModel.add(truck.id), for example. Another way is to change your TruckWoodPrice to have, for example, a getTruckId() { return truck.getid(); } method. -- Thiago H. de Paula Figueiredo Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, and instructor Owner, Ars Machina Tecnologia da Informação Ltda. http://www.arsmachina.com.br - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Some worries about Tapestry5 after comparing with wicket!!!
On Wed, 28 Sep 2011 12:53:52 -0300, Kevin Jing kevinhig...@gmail.com wrote: Hi, gus, Hi! 1. How do we add the components or remove them dynamically by coding? In Tapestry, the component tree is static, but you can have them render very dynamically. Nice example here: http://tawus.wordpress.com/2011/04/20/tapestry-magic-3-plugin-blocks/. 2. How do we set disabled property of components dynamically, by coding not EL expression to binding a method in page class. Easy: a t:type=EventLink disabled=disableLink In your page or component class: public boolean isDisableLink() { ... } 3. Is it easy for tapestry to intergrate some other famous framework, like freemaker, velocity, Google guice and some thing like that. Very easy. ChennileKit provides FreeMarker and Velocity integration: http://www.chenillekit.org/chenillekit-template/index.html. Guice wasn't integrated yet as far as I know, but Spring integration is already provided and the same approach could be used for Guice or any other dependency injection framework. Geoff's Tapestry JumpStart has an example of integration at http://jumpstart.doublenegative.com.au/jumpstart/examples/state/ejb3, the Tapestry 5 wiki too: http://wiki.apache.org/tapestry/JEE-Annotation. By the way, Guice inspired Tapestry-IoC a lot. -- Thiago H. de Paula Figueiredo Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, and instructor Owner, Ars Machina Tecnologia da Informação Ltda. http://www.arsmachina.com.br - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [t5.2.6] Composing pages through inheritance problem
I hope one day I can as helpful as you are..for no less than helping you back :) On Wed, Sep 28, 2011 at 3:51 PM, Thiago H. de Paula Figueiredo thiag...@gmail.com wrote: On Wed, 28 Sep 2011 10:38:53 -0300, Taha Hafeez tawus.tapes...@gmail.com wrote: Have you looked at http://tawus.wordpress.com/**2011/04/20/tapestry-magic-3-**plugin-blocks/http://tawus.wordpress.com/2011/04/20/tapestry-magic-3-plugin-blocks/ Which is basically the same approach used by BeanEditor, Grid and other BeanModel-based components. A proven approach. :) -- Thiago H. de Paula Figueiredo Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, and instructor Owner, Ars Machina Tecnologia da Informação Ltda. http://www.arsmachina.com.br --**--**- To unsubscribe, e-mail: users-unsubscribe@tapestry.**apache.orgusers-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- *Regards,* *Muhammad Gelbana Java Developer*
Using Request Attributes
Hi I am new bee in using Tapestry How to use request.setAttribute(XXX,YYY') and request.getAttribute(XXX). I hv a java component(POJO) class and some tml file I want to set a variable likr pageId and want to use that in tml file. Can anyone help me Thanks in advance. -- View this message in context: http://tapestry.1045711.n5.nabble.com/Using-Request-Attributes-tp4848701p4848701.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Some worries about Tapestry5 after comparing with wicket!!!
Hi, gus, I am investigating web frameworks for our products, which is a big ERP software. After that, I am interested in Tapestry5 and Wicket, and I think we will determine one of them to use. They are very similar and I prefer to T5, but I still would like to know the best solution to address my some concerns in tapestry5,some of them are pros in wicket. 1. How do we add the components or remove them dynamically by coding? 2. How do we set disabled property of components dynamically, by coding not EL expression to binding a method in page class. 3. Is it easy for tapestry to intergrate some other famous framework, like freemaker, velocity, Google guice and some thing like that. Thanks a lot! -- View this message in context: http://tapestry.1045711.n5.nabble.com/Some-worries-about-Tapestry5-after-comparing-with-wicket-tp4849707p4849707.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
CSS for all pages
Hello Guys, I was wondering if it is at all possible to add a global (ie included in all pages) CSS from a module. Basically just like the tapestry framework adds the default.css to any page in your tapestry web app I would like to have a webapp that loads a module that includes a CSS in all the pages of the app. The use-case is that I need to add some CSS fixes that should go into all apps that use the module auto-magically as is the case with filters and services. Thanks and kind Regards, Wulf
Re: Using Request Attributes
You don't use set/getAttributes in Tapestry, it abstracts that away for you. Use @Property (@Perist) fields and they will work the same way, or you can use @SessionAttrubute as well if you need to integrate with other frameworks On Sep 28, 2011, at 5:50 AM, sireesha wrote: Hi I am new bee in using Tapestry How to use request.setAttribute(XXX,YYY') and request.getAttribute(XXX). I hv a java component(POJO) class and some tml file I want to set a variable likr pageId and want to use that in tml file. Can anyone help me Thanks in advance. -- View this message in context: http://tapestry.1045711.n5.nabble.com/Using-Request-Attributes-tp4848701p4848701.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: CSS for all pages
There may be an easier way, but you could have a worker to add a Mixin / Component to each page which has no markup, but @Import's your CSS. In T5.3 it's : public class EmbedCssMixinInEveryPageWorker implements ComponentClassTransformWorker2 { public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model) { if (model.isPage()) model.addMixinClassName(CssMixin.class.getName()); } } @Import(stylesheet=context:myApp.css) public class CssMixin { } in your module, add public static void contributeComponentClassTransformWorker(OrderedConfigurationComponentClassTransformWorker2 configuration) { configuration.addInstance(CssMixin, EmbedCssMixinInEveryPageWorker.class); } Steve. On 29 September 2011 00:24, Wechsung, Wulf wulf.wechs...@sap.com wrote: Hello Guys, I was wondering if it is at all possible to add a global (ie included in all pages) CSS from a module. Basically just like the tapestry framework adds the default.css to any page in your tapestry web app I would like to have a webapp that loads a module that includes a CSS in all the pages of the app. The use-case is that I need to add some CSS fixes that should go into all apps that use the module auto-magically as is the case with filters and services. Thanks and kind Regards, Wulf - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Meap Tapestry 5 book cancelled?
There are many many users of Tapestry that are very excited about the book but are not actively on the forums expressing it. I believe, like you said, this is the best thing that could have happened. I for one, cannot wait to get my hands on it. Good luck and steady hand :). -- View this message in context: http://tapestry.1045711.n5.nabble.com/Meap-Tapestry-5-book-cancelled-tp4830642p4849928.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Where to store site settings?
Can someone please tell me the best way to store site settings in a Tapestry application? I would like to store the location of a certain directory (where Lucene data is to be kept), and it is different in development and in production, so I don't want it hard coded into the code. Where should I store this setting? In a properties file? (and if so, where do I store the location to the properties files?) In the web.xml file as a context-param? In app.properties? What do people out there do? I suspect the answer is probably app.properties, so how do I get access to this in a normal Java class? Thanks. -- Tim Koop - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Where to store site settings?
I typically have a bunch of application specific symbols since they allow so much flexibility. Set the defaults in AppModule, override with jvm system properties, in your setup scripts for production environment etc. Kalle On Wed, Sep 28, 2011 at 9:47 AM, Tim koop...@gmail.com wrote: Can someone please tell me the best way to store site settings in a Tapestry application? I would like to store the location of a certain directory (where Lucene data is to be kept), and it is different in development and in production, so I don't want it hard coded into the code. Where should I store this setting? In a properties file? (and if so, where do I store the location to the properties files?) In the web.xml file as a context-param? In app.properties? What do people out there do? I suspect the answer is probably app.properties, so how do I get access to this in a normal Java class? Thanks. -- Tim Koop - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
How to retrieve Field
Hi to all. I use Tapestry 5.1.0.5. I have the following code @Component(id = applyCouponCode) private TextField applyCouponCode; private void processSubmission() { ... if (applyCouponParameterName != null || parameterNames.contains(proceedWithoutCoupon)) { applyCouponCodeValue = request.getParameter(applyCouponParameterName); try { shoppingCartService.applyCoupon(applyCouponCodeValue); shoppingCartService.validateCartState(); } catch (ShoppingCartException e) { tracker.recordError(applyCouponCode, e.getMessage() + Please, enter a different coupon code or remove coupon code to proceed.); } } } This component doesn't contain Form. It's located inside the form in this way t:form t:id=orderForm clientValidation=false autofocus=false ... t:applyCoupon/ ... /t:form In mentioned processSubmission method in recordError method applyCouponCode.getControlName() return null. So finally when I'm trying to decorate error message for specified field I get tracker.inError(field) == false Is it possible do not do @Component(id = applyCouponCode) private TextField applyCouponCode; and somehow to retrieve necessary Field using some service or something else? Otherwise, what can be wrong in existing code? Thanks a lot -- View this message in context: http://tapestry.1045711.n5.nabble.com/How-to-retrieve-Field-tp4850061p4850061.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: CSS for all pages
Ah, cheers Thiago! I think Wulf was saying the CSS was part of a separate module he wouldn't have direct access to the Layout component - in that case he could use the Worker to single out the Layout and just add the Mixin to that. -- Forwarded message -- From: Thiago H. de Paula Figueiredo thiag...@gmail.com Date: 29 September 2011 01:27 Subject: Re: CSS for all pages To: Steve Eynon steve.ey...@alienfactory.co.uk Awesome use of a component class transformation and a mixin, Steve! :) Wulf, I'd say almost all Tapestry projects have a Layout component used in all pages, so @Import'ing your CSS or JavaScript in it makes them being added to all pages. On Wed, 28 Sep 2011 13:39:56 -0300, Steve Eynon steve.ey...@alienfactory.co.uk wrote: There may be an easier way, but you could have a worker to add a Mixin / Component to each page which has no markup, but @Import's your CSS. In T5.3 it's : public class EmbedCssMixinInEveryPageWorker implements ComponentClassTransformWorker2 { public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model) { if (model.isPage()) model.addMixinClassName(CssMixin.class.getName()); } } @Import(stylesheet=context:myApp.css) public class CssMixin { } in your module, add public static void contributeComponentClassTransformWorker(OrderedConfigurationComponentClassTransformWorker2 configuration) { configuration.addInstance(CssMixin, EmbedCssMixinInEveryPageWorker.class); } Steve. On 29 September 2011 00:24, Wechsung, Wulf wulf.wechs...@sap.com wrote: Hello Guys, I was wondering if it is at all possible to add a global (ie included in all pages) CSS from a module. Basically just like the tapestry framework adds the default.css to any page in your tapestry web app I would like to have a webapp that loads a module that includes a CSS in all the pages of the app. The use-case is that I need to add some CSS fixes that should go into all apps that use the module auto-magically as is the case with filters and services. Thanks and kind Regards, Wulf - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- Thiago H. de Paula Figueiredo Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, and instructor Owner, Ars Machina Tecnologia da Informação Ltda. Consultor, desenvolvedor e instrutor em Java, Tapestry e Hibernate http://www.arsmachina.com.br - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
RE: CSS for all pages
Exactly, Steve! You solution is great! Thanks a lot :) -Original Message- From: Steve Eynon [mailto:steve.ey...@alienfactory.co.uk] Sent: Mittwoch, 28. September 2011 19:53 To: Tapestry users Subject: Re: CSS for all pages Ah, cheers Thiago! I think Wulf was saying the CSS was part of a separate module he wouldn't have direct access to the Layout component - in that case he could use the Worker to single out the Layout and just add the Mixin to that. -- Forwarded message -- From: Thiago H. de Paula Figueiredo thiag...@gmail.com Date: 29 September 2011 01:27 Subject: Re: CSS for all pages To: Steve Eynon steve.ey...@alienfactory.co.uk Awesome use of a component class transformation and a mixin, Steve! :) Wulf, I'd say almost all Tapestry projects have a Layout component used in all pages, so @Import'ing your CSS or JavaScript in it makes them being added to all pages. On Wed, 28 Sep 2011 13:39:56 -0300, Steve Eynon steve.ey...@alienfactory.co.uk wrote: There may be an easier way, but you could have a worker to add a Mixin / Component to each page which has no markup, but @Import's your CSS. In T5.3 it's : public class EmbedCssMixinInEveryPageWorker implements ComponentClassTransformWorker2 { public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model) { if (model.isPage()) model.addMixinClassName(CssMixin.class.getName()); } } @Import(stylesheet=context:myApp.css) public class CssMixin { } in your module, add public static void contributeComponentClassTransformWorker(OrderedConfigurationComponentClassTransformWorker2 configuration) { configuration.addInstance(CssMixin, EmbedCssMixinInEveryPageWorker.class); } Steve. On 29 September 2011 00:24, Wechsung, Wulf wulf.wechs...@sap.com wrote: Hello Guys, I was wondering if it is at all possible to add a global (ie included in all pages) CSS from a module. Basically just like the tapestry framework adds the default.css to any page in your tapestry web app I would like to have a webapp that loads a module that includes a CSS in all the pages of the app. The use-case is that I need to add some CSS fixes that should go into all apps that use the module auto-magically as is the case with filters and services. Thanks and kind Regards, Wulf - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- Thiago H. de Paula Figueiredo Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, and instructor Owner, Ars Machina Tecnologia da Informação Ltda. Consultor, desenvolvedor e instrutor em Java, Tapestry e Hibernate http://www.arsmachina.com.br - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: T5.2 and CXF / SOAP
Thanks! That should be very helpful. I may be doing attachments for pictures and integrating with .NET, so the MTOM stuff should come in handy. Norman Franke Answering Service for Directors, Inc. www.myasd.com On Sep 27, 2011, at 8:30 AM, Ulrich Stärk wrote: Sure: First you need a CXF servlet to process incoming requests targeted at the web service. Something along the lines of public class MyCXFServlet extends CXFNonSpringServlet { private static final long serialVersionUID = -2887022453330372210L; @Override public void loadBus(ServletConfig servletConfig) throws ServletException { super.loadBus(servletConfig); Registry registry = (Registry) servletConfig .getServletContext ().getAttribute(TapestryFilter.REGISTRY_CONTEXT_NAME); MyService impl = registry.getService(MyService, MyServiceImpl.class); Bus bus = this.getBus(); BusFactory.setDefaultBus(bus); EndpointImpl ep = (EndpointImpl) Endpoint.create(impl); ep.getFeatures().add(new WSAddressingFeature()); ep.setPublishedEndpointUrl(https://your.host/some/path/MyService ); ep.publish(/MyService); } } As you can see we fetch the Tapestry IoC registry from the servlet context and ask it for a service called MyService that is then being published by CXF. The service interface looks something like import javax.activation.DataHandler; import javax.jws.WebService; @WebService public interface RelationAnalyzer { public ListFoo doSomething(DataHandler file) throws IOException; } In this case doSomething() is working on a file upload and since this one is speaking to a .NET client we need to configure it to send files as MTOM attachments and configure it as a SOAP 1.2 HTTP Binding: import javax.activation.DataHandler; import javax.jws.WebService; import javax.xml.ws.BindingType; import javax.xml.ws.soap.SOAPBinding; @BindingType(SOAPBinding.SOAP12HTTP_MTOM_BINDING) @WebService(endpointInterface = MyService, serviceName = MyService) public class MyServiceImpl implements MyService { ... } Additionally, in your AppModule you have to tell Tapestry to ignore the path where your webservice is listening for requests (compare with above's setPublishedEndpointURL()): public static void contributeIgnoredPathsFilter(ConfigurationString configuration) { configuration.add(/some/path/.*); } Since in previous versions, Tapestry didn't copy annotations from the service implementation to it's proxies, you have to bind the implementation itself: binder.bind(MyServiceImpl.class).withId(MyService); This might be different now, I haven't tried the new feature though. And as a goodie from the web service client's app.config: ?xml version=1.0 encoding=utf-8 ? configuration configSections /configSections system.serviceModel bindings customBinding binding name=MyServiceSoapBinding mtomMessageEncoding maxReadPoolSize=64 maxWritePoolSize=16 messageVersion=Soap12 writeEncoding=utf-8 readerQuotas maxDepth=32 maxStringContentLength=8192 maxArrayLength=16384 maxBytesPerRead=4096 maxNameTableCharCount=16384 / /mtomMessageEncoding httpsTransport manualAddressing=false maxBufferPoolSize=524288 maxReceivedMessageSize=65536 allowCookies=false authenticationScheme=Anonymous bypassProxyOnLocal=false hostNameComparisonMode=StrongWildcard keepAliveEnabled=true maxBufferSize=65536 proxyAuthenticationScheme=Anonymous realm= transferMode=Buffered unsafeConnectionNtlmAuthentication=false useDefaultWebProxy=true requireClientCertificate=false /httpsTransport /binding /customBinding /bindings client endpoint address=https://your.host/some/path/MyService; binding=customBinding bindingConfiguration=MyServiceSoapBinding contract=MyService.MyService name=MyServiceImplPort / /client /system.serviceModel /configuration HTH, Uli On 26.09.2011 17:33, Norman Franke wrote: Care to share? Norman Franke Answering Service for Directors, Inc. www.myasd.com On Sep 26, 2011, at 9:20 AM, Ulrich Stärk wrote: I have. On 24.09.2011 00:27, Norman Franke wrote: So, since CXF appears to be way, way better documented, I'll ask. Has anyone integrated Tapestry 5's IoC with CXF? Norman Franke Answering Service for Directors, Inc. www.myasd.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail:
Re: Using Request Attributes
Hi. You should have a look here. http://jumpstart.doublenegative.com.au/jumpstart/examples/output/output As you see, the value is retrieved from the getMessage method by using ${message} in the tml file. Regards Sigbjørn On Wed, Sep 28, 2011 at 18:30, Lenny Primak lpri...@hope.nyc.ny.us wrote: You don't use set/getAttributes in Tapestry, it abstracts that away for you. Use @Property (@Perist) fields and they will work the same way, or you can use @SessionAttrubute as well if you need to integrate with other frameworks On Sep 28, 2011, at 5:50 AM, sireesha wrote: Hi I am new bee in using Tapestry How to use request.setAttribute(XXX,YYY') and request.getAttribute(XXX). I hv a java component(POJO) class and some tml file I want to set a variable likr pageId and want to use that in tml file. Can anyone help me Thanks in advance. -- View this message in context: http://tapestry.1045711.n5.nabble.com/Using-Request-Attributes-tp4848701p4848701.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: How to retrieve Field
On Wed, 28 Sep 2011 14:46:00 -0300, Vasyl Shevchuk vasyl.shevc...@devcom.com wrote: Hello, Thiago! Hi! But, could you please explain this part more detailed Your TextField should be bound to some property. Can't you read this property directly? TextFields edits properties of type String. In your case, it's bound to the applyCouponCodeValue property. As you're inside the processSubmission() method, you should get the submitted value from the request itself, as the TextField's processSubmission() may not be invoked yet. I always avoided writing form field components with form field components in their template. It's easy to create a form field component with multiple HTML form fields inside. I have this on template now (using @Component) input t:id=applyCouponCode name=applyCouponCode size=17 value=applyCouponCodeValue class=stxt/ Ah, I haven't noticed that you didn't use t:type in your template, so you need to use @Component instead of @InjectComponent. Your code was and is right. :) And will have the folllowing if I'll not use @Component annotation t:textfield t:id=applyCouponCode name=applyCouponCode size=17 value=applyCouponCodeValue class=stxt / Yep, or, my preference, input type=text t:type=TextField t:id=applyCouponCode name=applyCouponCode size=17 value=applyCouponCodeValue class=stxt / How can I read property directly? getApplyCouponCodeValue(). :) Cheers! -- Thiago H. de Paula Figueiredo Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, and instructor Owner, Ars Machina Tecnologia da Informação Ltda. http://www.arsmachina.com.br - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Who can recommend a hosting plan with jdk1.6, resin, dedicated IP addy, 6 domains, web admin interface shell access?
Hi y'all, Who can recommend a hosting plan with jdk1.6, resin, dedicated IP addy, 6 domains, web admin interface shell access that isn't in India or Tibuktoo? OFF TOPIC I KNOW. I trust you guys/gals. Opinions?
Re: Who can recommend a hosting plan with jdk1.6, resin, dedicated IP addy, 6 domains, web admin interface shell access?
Hi Jon. If it really has to be resin, i would as the directly ask the caucho folks. They are quite a friendly bunch. Cheers, Andi. On Sep 28, 2011, at 21:12 , Jon Williams wrote: Hi y'all, Who can recommend a hosting plan with jdk1.6, resin, dedicated IP addy, 6 domains, web admin interface shell access that isn't in India or Tibuktoo? OFF TOPIC I KNOW. I trust you guys/gals. Opinions? - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Textarea with character count?
There's some easy-to-modify source code for this at http://tinybits.blogspot.com/2009/04/enforce-max-length-on-textareas-and_15.html On Tue, Sep 27, 2011 at 2:34 AM, Magnus Kvalheim mag...@kvalheim.dk wrote: Hi, I wonder in Tapestry world, is there such a component that while user types, it will counts how many characters have the user typed. Alternatively, I would like to know if there is a way to restrict the textarea to a fixed size, say 500 characters. If exceeded, no more text will be allowed. I guess there isn't one ready to use, but with a little bit of JavaScript you can easily write a mixin that does exactly that. ;) I've used this jQuery plugin previously - http://roy-jin.appspot.com/jsp/textareaCounter.jsp . You can specify a fixed number of characters. Works well and has good documentation. Cheers Magnus Kvalheim - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: 5.3 Beta change in behaviour from Alpha with regard to event methods
On 28.09.2011 10:32, Dragan Sahpaski wrote: The symbol you have to use to turn off this check is SymbolConstants.UNKNOWN_COMPONENT_ID_CHECK_ENABLED. Actually, I like this check, but it would be better if it was possible to happen at application startup, not on first access to the page. smime.p7s Description: S/MIME Cryptographic Signature
Re: Textarea with character count?
Oh this brings back some bad memories for me. Try doing this with Tapestry 4's Dojo.js Not fun. RANT OFF On Wed, Sep 28, 2011 at 1:58 PM, Bob Harner bobhar...@gmail.com wrote: There's some easy-to-modify source code for this at http://tinybits.blogspot.com/2009/04/enforce-max-length-on-textareas-and_15.html On Tue, Sep 27, 2011 at 2:34 AM, Magnus Kvalheim mag...@kvalheim.dk wrote: Hi, I wonder in Tapestry world, is there such a component that while user types, it will counts how many characters have the user typed. Alternatively, I would like to know if there is a way to restrict the textarea to a fixed size, say 500 characters. If exceeded, no more text will be allowed. I guess there isn't one ready to use, but with a little bit of JavaScript you can easily write a mixin that does exactly that. ;) I've used this jQuery plugin previously - http://roy-jin.appspot.com/jsp/textareaCounter.jsp . You can specify a fixed number of characters. Works well and has good documentation. Cheers Magnus Kvalheim - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: 5.3 Beta change in behaviour from Alpha with regard to event methods
Part of Tapestry's philosophy is lazy loading of pages and components on an as-needed basis. This has good points and bad points ... good points are very fast startup which I find very important. The bad side is that a lot of checks occur when the page is lazily loaded (when first needed), and some things people want (such as a @Path annotation on pages to control the URL for that page) aren't possible. Further, if Tapestry did all the checks at startup, before the first request, you would not have a good place to report the errors ... errors logged to the console are not nearly as nice as the full exception report page. A thought: a built in page that, when it renders, identifies and loads all pages in the application, which should flesh out most of the errors in most pages. So the PageCatalog page would either generate a list of all pages, or an exception report for the first error loading a page. Quite doable. On Wed, Sep 28, 2011 at 1:01 PM, Vangel V. Ajanovski a...@ii.edu.mk wrote: On 28.09.2011 10:32, Dragan Sahpaski wrote: The symbol you have to use to turn off this check is SymbolConstants.UNKNOWN_COMPONENT_ID_CHECK_ENABLED. Actually, I like this check, but it would be better if it was possible to happen at application startup, not on first access to the page. -- Howard M. Lewis Ship Creator of Apache Tapestry The source for Tapestry training, mentoring and support. Contact me to learn how I can get you up and productive in Tapestry fast! (971) 678-5210 http://howardlewisship.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Some worries about Tapestry5 after comparing with wicket!!!
Thanks for prompt replay and they are very clear so that I can understand some of them now. But for setting disabled property, I am still confuse. I would like to give a scenarios. When a user login the system, we need to check his/her permission, and then we will probably hide or disable the buttons or links, or disable an edittable, or make some cells readable or just set some other properties according to his/her permission. if so, I think the following solution is not the ones that I need because I hope I can change the properties dynamically by coding according to some conditions. Is there some better solution for this question in tapestry? In your page or component class: public boolean isDisableLink() { ... } Thanks a lot! -- View this message in context: http://tapestry.1045711.n5.nabble.com/Some-worries-about-Tapestry5-after-comparing-with-wicket-tp4849721p4851067.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Some worries about Tapestry5 after comparing with wicket!!!
Tapestry-security has components that do exactly this. So I Isn't only possible but been done before. On Sep 28, 2011, at 7:22 PM, Kevin Jing kevinhig...@gmail.com wrote: Thanks for prompt replay and they are very clear so that I can understand some of them now. But for setting disabled property, I am still confuse. I would like to give a scenarios. When a user login the system, we need to check his/her permission, and then we will probably hide or disable the buttons or links, or disable an edittable, or make some cells readable or just set some other properties according to his/her permission. if so, I think the following solution is not the ones that I need because I hope I can change the properties dynamically by coding according to some conditions. Is there some better solution for this question in tapestry? In your page or component class: public boolean isDisableLink() { ... } Thanks a lot! -- View this message in context: http://tapestry.1045711.n5.nabble.com/Some-worries-about-Tapestry5-after-comparing-with-wicket-tp4849721p4851067.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Where to store site settings?
I like to have a simple Settings or Config table in the database, having just VARCHAR name and value columns, and a simple Tapestry IOC service that looks up and caches the values (either lazily or at startup time). Another option is to have the settings in a property file (outside the war), of course, but on the other hand having them in the database makes it easier to later create crud interfaces for those that may need to change at run time. On Wed, Sep 28, 2011 at 12:53 PM, Kalle Korhonen kalle.o.korho...@gmail.com wrote: I typically have a bunch of application specific symbols since they allow so much flexibility. Set the defaults in AppModule, override with jvm system properties, in your setup scripts for production environment etc. Kalle On Wed, Sep 28, 2011 at 9:47 AM, Tim koop...@gmail.com wrote: Can someone please tell me the best way to store site settings in a Tapestry application? I would like to store the location of a certain directory (where Lucene data is to be kept), and it is different in development and in production, so I don't want it hard coded into the code. Where should I store this setting? In a properties file? (and if so, where do I store the location to the properties files?) In the web.xml file as a context-param? In app.properties? What do people out there do? I suspect the answer is probably app.properties, so how do I get access to this in a normal Java class? Thanks. -- Tim Koop - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: 5.3 Beta change in behaviour from Alpha with regard to event methods
On 29.09.2011 00:25, Howard Lewis Ship wrote: errors in most pages. So the PageCatalog page would either generate a list of all pages, or an exception report for the first error loading a page. Quite doable. That would probably help. Thanks for the idea. smime.p7s Description: S/MIME Cryptographic Signature
Change Name
If I make a form using beaneditform , how do I change the name of the field of the form. e.g class Truck{ private int id; private int truckNumberVO; //getters and setters } t:beaneditform submitlabel=Create object=truck / I want the field/label name of truckNumberVO to be shown as Truck Number -- View this message in context: http://tapestry.1045711.n5.nabble.com/Change-Name-tp4851582p4851582.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [T5.3] Symbols for Default Component Parameter Values
I had to look up the meaning of Staw Man Proposal (!) but it seems it's all good! JIRA raised: https://issues.apache.org/jira/browse/TAP5-1677 Have fun! Steve. On 28 September 2011 21:57, Massimo Lusetti mluse...@gmail.com wrote: On Wed, Sep 28, 2011 at 12:15 AM, Igor Drobiazko igor.drobia...@gmail.com wrote: Actually this is supported since 5.2: https://issues.apache.org/jira/browse/TAP5-1094 I think the proposal here is to have the default value for some parameters (like the grid's rowsPerPage) to bind to a Symbol so the default can be changed more easly... Please fire a jira issue It's something nice to work on... -- Massimo http://meridio.blogspot.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: 5.3 Beta change in behaviour from Alpha with regard to event methods
if Tapestry did all the checks at startup, before the first request, you would not have a good place to report the errors ... If you wanted to go down this line you could have a filter in place that redirected you to an error reporting page if any errors were recorded at startup. I do something similar with a Configuration Module I have - all config is loaded on startup and any errors recorded. When attempting to access any page, if config errors were detected, you're sent to a Config Error page where you're enlightened of your mistakes. (Guru Meditation Style!) But by doing this, you effectively disable the whole app until the errors are rectified - which may not desired behaviour. Steve. On 29 September 2011 10:29, Vangel V. Ajanovski a...@ii.edu.mk wrote: On 29.09.2011 00:25, Howard Lewis Ship wrote: errors in most pages. So the PageCatalog page would either generate a list of all pages, or an exception report for the first error loading a page. Quite doable. That would probably help. Thanks for the idea. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Change Name
Hi Won't it be more useful if you first visit the documentation and then if you don't find it there you ask it in the mailing list. It will save you some time !! http://tapestry.apache.org/beaneditform-guide.html Default Label Tapestry will attempt to provide a reasonable default label for each field, based on the property name being emitted. The property name is capitalized, and spaces are added before case changes, thus property name becomes label Name and property streetAddress becomes label Street Address. BeanEditForm also searches for a label for the field in the containing component's message catalog. The message key is the property name suffixed with -label. If such a label is found, it takes precedence. On Thu, Sep 29, 2011 at 9:04 AM, csckid testnowsh...@gmail.com wrote: If I make a form using beaneditform , how do I change the name of the field of the form. e.g class Truck{ private int id; private int truckNumberVO; //getters and setters } t:beaneditform submitlabel=Create object=truck / I want the field/label name of truckNumberVO to be shown as Truck Number -- View this message in context: http://tapestry.1045711.n5.nabble.com/Change-Name-tp4851582p4851582.html Sent from the Tapestry - User mailing list archive at Nabble.com. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- Regards Taha Hafeez Siddiqi (tawus) http://tawus.wordpress.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: [T5.3] Symbols for Default Component Parameter Values
A good thing about following Howard is you getter better in both tapestry and english :) On Thu, Sep 29, 2011 at 9:04 AM, Steve Eynon steve.ey...@alienfactory.co.uk wrote: I had to look up the meaning of Staw Man Proposal (!) but it seems it's all good! JIRA raised: https://issues.apache.org/jira/browse/TAP5-1677 Have fun! Steve. On 28 September 2011 21:57, Massimo Lusetti mluse...@gmail.com wrote: On Wed, Sep 28, 2011 at 12:15 AM, Igor Drobiazko igor.drobia...@gmail.com wrote: Actually this is supported since 5.2: https://issues.apache.org/jira/browse/TAP5-1094 I think the proposal here is to have the default value for some parameters (like the grid's rowsPerPage) to bind to a Symbol so the default can be changed more easly... Please fire a jira issue It's something nice to work on... -- Massimo http://meridio.blogspot.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- Regards Taha Hafeez Siddiqi (tawus) http://tawus.wordpress.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: CSS for all pages
The other way to do this is (simpler in my opinion) to implement your own JavaScriptStack (ListStylesheetLink getStylesheets() method) and make a contribution to JavaScriptStackSource in your module. Cheers, Olaf 2011/9/28 Wechsung, Wulf wulf.wechs...@sap.com Exactly, Steve! You solution is great! Thanks a lot :) -Original Message- From: Steve Eynon [mailto:steve.ey...@alienfactory.co.uk] Sent: Mittwoch, 28. September 2011 19:53 To: Tapestry users Subject: Re: CSS for all pages Ah, cheers Thiago! I think Wulf was saying the CSS was part of a separate module he wouldn't have direct access to the Layout component - in that case he could use the Worker to single out the Layout and just add the Mixin to that. -- Forwarded message -- From: Thiago H. de Paula Figueiredo thiag...@gmail.com Date: 29 September 2011 01:27 Subject: Re: CSS for all pages To: Steve Eynon steve.ey...@alienfactory.co.uk Awesome use of a component class transformation and a mixin, Steve! :) Wulf, I'd say almost all Tapestry projects have a Layout component used in all pages, so @Import'ing your CSS or JavaScript in it makes them being added to all pages. On Wed, 28 Sep 2011 13:39:56 -0300, Steve Eynon steve.ey...@alienfactory.co.uk wrote: There may be an easier way, but you could have a worker to add a Mixin / Component to each page which has no markup, but @Import's your CSS. In T5.3 it's : public class EmbedCssMixinInEveryPageWorker implements ComponentClassTransformWorker2 { public void transform(PlasticClass plasticClass, TransformationSupport support, MutableComponentModel model) { if (model.isPage()) model.addMixinClassName(CssMixin.class.getName()); } } @Import(stylesheet=context:myApp.css) public class CssMixin { } in your module, add public static void contributeComponentClassTransformWorker(OrderedConfigurationComponentClassTransformWorker2 configuration) { configuration.addInstance(CssMixin, EmbedCssMixinInEveryPageWorker.class); } Steve. On 29 September 2011 00:24, Wechsung, Wulf wulf.wechs...@sap.com wrote: Hello Guys, I was wondering if it is at all possible to add a global (ie included in all pages) CSS from a module. Basically just like the tapestry framework adds the default.css to any page in your tapestry web app I would like to have a webapp that loads a module that includes a CSS in all the pages of the app. The use-case is that I need to add some CSS fixes that should go into all apps that use the module auto-magically as is the case with filters and services. Thanks and kind Regards, Wulf - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- Thiago H. de Paula Figueiredo Independent Java, Apache Tapestry 5 and Hibernate consultant, developer, and instructor Owner, Ars Machina Tecnologia da Informação Ltda. Consultor, desenvolvedor e instrutor em Java, Tapestry e Hibernate http://www.arsmachina.com.br - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org