Re: t5: autocomplete mixin gets autofocus on field. I don't want that.
You can disable the autofocus handling in the form component. Joachim Britske wrote: I have a textfield enriched with the autocomplete mixin. input class=search t:minChars=3 t:frequency=0.2 t:type=textfield t:id=quickTextField t:mixins=autocompletearoer2 id=quickTextField name=Best type=text value=quickTextValue / This field always gets the focus even though it isn't the first field of the form. Is there a way to disable this? I tried to circumvent this by having a javascript set the focus on another field, but without success: the autcomplete field seems to get the focus back automatically. This is a problem since for instance alt-tabbing forth and back to the browser set's off an ajax-call automatically since the focus is on the autocomplete field. Any way to prevent this? Thanks, Geert-Jan - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Tapestry-Spring and Spring 3.X
Found a solution, upgrading to 3.0.0.M4 removes the use of the conflicting antlr class. You may need to do some creative maven excludes of antlr depending on what other deps you use (hibernate in my case) bestguy wrote: The only issue I came across is that T5.1 and Spring 3 are using two incompatible versions of Antlr library Is there a workaround? Pages will not load after startup due to this. Excluding one or the other antlr deps will cause an error in either Tapestry or Spring. Lubor Gajda wrote: Hi Geoffrey, I've tried T5.1.0.5 in combination with Spring 3.0.0.M3 and it works fine for me. The only issue I came across is that T5.1 and Spring 3 are using two incompatible versions of Antlr library, but injection of spring beans works fine for me. Could you please send us more information about your runtime environment (e.g. list of jars on your classpath, your web.xml configuration, what application server you are using, etc.)? Thanks, Lubor On Mon, Jun 29, 2009 at 2:48 PM, Geoffrey Wiseman geoffrey.wise...@gmail.com wrote: On Mon, Jun 29, 2009 at 9:42 AM, Thiago H. de Paula Figueiredo thiag...@gmail.com wrote: Was it already released? Is it backward-compatible with Spring 1 and 2? Spring 3.0 is up to Milestone 3.X; I gather a release candidate is due in the near future, so it might be a good time to start looking at it if T5.1 wants to be compatible at the time of release. - Geoffrey -- Geoffrey Wiseman http://www.geoffreywiseman.ca/ -- View this message in context: http://www.nabble.com/Tapestry-Spring-and-Spring-3.X-tp24253883p25270757.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: Supporting multiple devices, eg. browser + mobile + TV
Hi, We've done that here, and it wasn't a real pleasure party. but yes, for each component and pages, we can use the same system than localization: i.e. : index.tml, index_fr.tml, index_iphone_fr.tml You've got to decorate a lot of internals services (PagePool, ComponentTemplateSource), hack the locale and prey for no API changes in the future. :-) I agree with others comments, a web for desktop browser should never be the same web than a web for SmartPhones. You should do a specific app/page for other devices. Robin K. - Atos Worldline -Message d'origine- De : Christian Edward Gruber [mailto:christianedwardgru...@gmail.com] Envoyé : jeudi 3 septembre 2009 06:04 À : Tapestry users Objet : Re: Supporting multiple devices, eg. browser + mobile + TV I'd go further - interfaces for the blind, for the hard of hearing - these are still more clients. If the user experience is going to be substantially altered, then you can convert from some meta-interface and have everything automatically expressed, but that often requires that the framework make trade-off choices that are better handled by a good User Experience designer. A lot of what makes a good iPhone- ready application is a different user-flow that's consistent with the device's unique properties. Shoe-horning a normal web-interface will often result in a bad iPhone experience (though better than WAP phones, to be sure). cheers, Christian. On 2009-09-02, at 23:13 , Thiago H. de Paula Figueiredo wrote: Em Wed, 02 Sep 2009 20:36:21 -0300, Alfie Kirkpatrick alfie.kirkpatr...@ioko.com escreveu: So I think T5 helps separate concerns and assists in building multi-device apps (ie. it's a decent framework to do this in), but the framework itself could do more if this becomes something many web developers end up having to build for in future. What exactly could the framework do? There's a framework that does it: JSF. Then it got too complicated. Of course, we could be smarter than the JSF creators. :) But I agree with Howard: different devices with different capabilities, different frontends. -- Thiago H. de Paula Figueiredo Independent Java consultant, developer, and instructor http://www.arsmachina.com.br/thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org Christian Edward Gruber e-mail: christianedwardgru...@gmail.com weblog: http://www.geekinasuit.com/ - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org Ce message et les pièces jointes sont confidentiels et réservés à l'usage exclusif de ses destinataires. Il peut également être protégé par le secret professionnel. Si vous recevez ce message par erreur, merci d'en avertir immédiatement l'expéditeur et de le détruire. L'intégrité du message ne pouvant être assurée sur Internet, la responsabilité du groupe Atos Origin ne pourra être recherchée quant au contenu de ce message. Bien que les meilleurs efforts soient faits pour maintenir cette transmission exempte de tout virus, l'expéditeur ne donne aucune garantie à cet égard et sa responsabilité ne saurait être recherchée pour tout dommage résultant d'un virus transmis. This e-mail and the documents attached are confidential and intended solely for the addressee; it may also be privileged. If you receive this e-mail in error, please notify the sender immediately and destroy it. As its integrity cannot be secured on the Internet, the Atos Origin group liability cannot be triggered for the message content. Although the sender endeavours to maintain a computer virus-free network, the sender does not warrant that this transmission is virus-free and will not be liable for any damages resulting from any virus transmitted. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Testify Base class com.formos.tapestry.testify.testng.TapestryTest is not in a controlled package
Hi Borut, thanks VERY much for the explanations. I refactored my code to almost match your recomendation (I did not put stuff from src/main/resources into src/main/java). Putting the resources in the java tree was the most controversial suggestion :-) Definitely a personal preference. But useful for people to know that they do have that choice. When running mvn clean test I get: FAILED: testElementIsOnPage java.lang.RuntimeException: Request was not handled: 'demo/DayMonthYearDateInputDemo' may not be a valid page name. at org.apache.tapestry5.test.PageTester.renderPage(PageTester.java:177) at test.si.najdi.tapestry.library.demo.components. DayMonthYearDateInputDemo. testElementIsOnPage(DayMonthYearDateInputDemo.java:14) at org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:74) What's interesting about this stack trace (reading from the bottom up) is that TestNG is calling: test.si.najdi.tapestry.library.demo.components.DayMonthYearDateInputDemo.testElementIsOnPage So TestNG is calling the demo page and the demo page contains the test... That's not right. You need the demo page to just be a simple page providing enough infrastructure to exercise the component that you want to test. The test method needs to move into: test.si.najdi.tapestry.library.components.DayMonthYearDateInputTest.java So something like this: DayMonthYearDateInputTest.java == package test.si.najdi.tapestry.library.components; import org.apache.tapestry5.dom.Document; import org.testng.Assert; import org.testng.annotations.Test; import test.si.najdi.tapestry.library.base.AbstractT5ComponentsLibraryTest; public class DayMonthYearDateInputTest extends AbstractT5ComponentsLibraryTest { @Test public void testElementIsOnPage() { Document page = tester.renderPage(demo/DayMonthYearDateInputDemo); Assert.assertNotNull(page.getElementById(h1)); } } DayMonthYearDateInputDemo.java == package test.si.najdi.tapestry.library.demo.components; public class DayMonthYearDateInputDemo { } And you need to make TestNG run that test class (it was trying to run the page :-) ): testng.xml !DOCTYPE suite SYSTEM http://testng.org/testng-1.0.dtd; suite name=Najdi.si Tapestry Components Suite parallel=false thread-count=10 annotations=1.5 verbose=2 parameter name=tapestry.integration-webapp value=src/main/webapp/ test name=DayMonthYearDateInput classes class name=test.si.najdi.tapestry.library.components.DayMonthYearDateInputTest/ /classes /test /suite Hopefully that will do the trick.. but let me know if not. Other things: Just prior to this error message a list of available components is also printed out on the console: .. demo/DayMonthYearDateInput: test.si.najdi.tapestry.library.demo.components.DayMonthYearDateInputDemo demo/DayMonthYearDateInputDemo: test.si.najdi.tapestry.library.demo.components.DayMonthYearDateInputDemo Why there are 2 demo components? I'm guessing here but I think it because of Tapestry's clever naming system. The name of the page ends in Demo and the page is in a demo directory and Tapestry allows an abbreviated URL where the Demo can be ommitted (i.e. /demo/DayMonthYearDateInput). So my guess is that you are seeing Tapestry register the same page under two URLs: the long one and the abbreviated one. private static final TapestryTester SHARED_TESTER = new TapestryTester(demo, DemoModule.class); I tried instantiating TapestryTester with all kind of appPackage names I could think off. You actually need to be a bit careful with the appPackage name. If you give it a name like app, Tapestry will look for AppModule in the modules package - now this might be OK for you, but also might build a complex IOC that you don't want just for unit testing. So personally, I prefer to use a nonsense name (like xxx), because the testing infrastructure will ignore that, and then I control exactly the set of modules that I want using the TapestryTester constructor. - Paul --- This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and delete this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden. Please refer to http://www.db.com/en/content/eu_disclosures.htm for additional EU corporate and regulatory disclosures.
Re: t5: autocomplete mixin gets autofocus on field. I don't want that.
Yeah thanks! totally missed that. Joachim Van der Auwera (PROGS bvba) wrote: You can disable the autofocus handling in the form component. Joachim Britske wrote: I have a textfield enriched with the autocomplete mixin. input class=search t:minChars=3 t:frequency=0.2 t:type=textfield t:id=quickTextField t:mixins=autocompletearoer2 id=quickTextField name=Best type=text value=quickTextValue / This field always gets the focus even though it isn't the first field of the form. Is there a way to disable this? I tried to circumvent this by having a javascript set the focus on another field, but without success: the autcomplete field seems to get the focus back automatically. This is a problem since for instance alt-tabbing forth and back to the browser set's off an ajax-call automatically since the focus is on the autocomplete field. Any way to prevent this? Thanks, Geert-Jan - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- View this message in context: http://www.nabble.com/t5%3A-autocomplete-mixin-gets-autofocus-on-field.-I-don%27t-want-that.-tp25255884p25271757.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: Supporting multiple devices, eg. browser + mobile + TV
The approach followed by Ramaze (a Ruby based framework) is to deliver different content depending on the suffix. I like the approach but Tapestry probably doesn't fit in very well with such a concept as content is created by Java Code or templates both in pages and components. The idea to setup a separate application introduces a lot of redundant code. What about a shadow directory structure holding components and templates I would like to overwrite. myapp/components // the ordinatry myapp/wap/components / the wap overwrites ... This allows to reuse what you can and replace what you need. Depending on the request you dispatch to one namespace or another. Best Regards / Viele Grüße Sebastian Hennebrueder - Software Developer and Trainer for Hibernate / Java Persistence http://www.laliluna.de Komiwes Robin schrieb: Hi, We've done that here, and it wasn't a real pleasure party. but yes, for each component and pages, we can use the same system than localization: i.e. : index.tml, index_fr.tml, index_iphone_fr.tml You've got to decorate a lot of internals services (PagePool, ComponentTemplateSource), hack the locale and prey for no API changes in the future. :-) I agree with others comments, a web for desktop browser should never be the same web than a web for SmartPhones. You should do a specific app/page for other devices. Robin K. - Atos Worldline -Message d'origine- De : Christian Edward Gruber [mailto:christianedwardgru...@gmail.com] Envoyé : jeudi 3 septembre 2009 06:04 À : Tapestry users Objet : Re: Supporting multiple devices, eg. browser + mobile + TV I'd go further - interfaces for the blind, for the hard of hearing - these are still more clients. If the user experience is going to be substantially altered, then you can convert from some meta-interface and have everything automatically expressed, but that often requires that the framework make trade-off choices that are better handled by a good User Experience designer. A lot of what makes a good iPhone- ready application is a different user-flow that's consistent with the device's unique properties. Shoe-horning a normal web-interface will often result in a bad iPhone experience (though better than WAP phones, to be sure). cheers, Christian. On 2009-09-02, at 23:13 , Thiago H. de Paula Figueiredo wrote: Em Wed, 02 Sep 2009 20:36:21 -0300, Alfie Kirkpatrick alfie.kirkpatr...@ioko.com escreveu: So I think T5 helps separate concerns and assists in building multi-device apps (ie. it's a decent framework to do this in), but the framework itself could do more if this becomes something many web developers end up having to build for in future. What exactly could the framework do? There's a framework that does it: JSF. Then it got too complicated. Of course, we could be smarter than the JSF creators. :) But I agree with Howard: different devices with different capabilities, different frontends. -- Thiago H. de Paula Figueiredo Independent Java consultant, developer, and instructor http://www.arsmachina.com.br/thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org Christian Edward Gruber e-mail: christianedwardgru...@gmail.com weblog: http://www.geekinasuit.com/ - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org Ce message et les pièces jointes sont confidentiels et réservés à l'usage exclusif de ses destinataires. Il peut également être protégé par le secret professionnel. Si vous recevez ce message par erreur, merci d'en avertir immédiatement l'expéditeur et de le détruire. L'intégrité du message ne pouvant être assurée sur Internet, la responsabilité du groupe Atos Origin ne pourra être recherchée quant au contenu de ce message. Bien que les meilleurs efforts soient faits pour maintenir cette transmission exempte de tout virus, l'expéditeur ne donne aucune garantie à cet égard et sa responsabilité ne saurait être recherchée pour tout dommage résultant d'un virus transmis. This e-mail and the documents attached are confidential and intended solely for the addressee; it may also be privileged. If you receive this e-mail in error, please notify the sender immediately and destroy it. As its integrity cannot be secured on the Internet, the Atos Origin group liability cannot be triggered for the message content. Although the sender endeavours to maintain a computer virus-free network, the sender does not warrant that this transmission is virus-free and will not be liable for any damages resulting from any virus transmitted. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail:
t5: request count
Hi, In tomcat manager, we can see: Request count: 1 is it equivalent to the request make to t5 pages? Angelo -- View this message in context: http://www.nabble.com/t5%3A-request-count-tp25272224p25272224.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: Supporting multiple devices, eg. browser + mobile + TV
myapp/components // the ordinatry myapp/wap/components / the wap overwrites We also already test this solution. It can be done for pages with not so much pain. For components it was a lot more complex. We finally abandonned this solution. Sebastian Hennebrueder wrote: The approach followed by Ramaze (a Ruby based framework) is to deliver different content depending on the suffix. I like the approach but Tapestry probably doesn't fit in very well with such a concept as content is created by Java Code or templates both in pages and components. The idea to setup a separate application introduces a lot of redundant code. What about a shadow directory structure holding components and templates I would like to overwrite. myapp/components // the ordinatry myapp/wap/components / the wap overwrites ... This allows to reuse what you can and replace what you need. Depending on the request you dispatch to one namespace or another. Best Regards / Viele Grüße Sebastian Hennebrueder - Software Developer and Trainer for Hibernate / Java Persistence http://www.laliluna.de Komiwes Robin schrieb: Hi, We've done that here, and it wasn't a real pleasure party. but yes, for each component and pages, we can use the same system than localization: i.e. : index.tml, index_fr.tml, index_iphone_fr.tml You've got to decorate a lot of internals services (PagePool, ComponentTemplateSource), hack the locale and prey for no API changes in the future. :-) I agree with others comments, a web for desktop browser should never be the same web than a web for SmartPhones. You should do a specific app/page for other devices. Robin K. - Atos Worldline -Message d'origine- De : Christian Edward Gruber [mailto:christianedwardgru...@gmail.com] Envoyé : jeudi 3 septembre 2009 06:04 À : Tapestry users Objet : Re: Supporting multiple devices, eg. browser + mobile + TV I'd go further - interfaces for the blind, for the hard of hearing - these are still more clients. If the user experience is going to be substantially altered, then you can convert from some meta-interface and have everything automatically expressed, but that often requires that the framework make trade-off choices that are better handled by a good User Experience designer. A lot of what makes a good iPhone- ready application is a different user-flow that's consistent with the device's unique properties. Shoe-horning a normal web-interface will often result in a bad iPhone experience (though better than WAP phones, to be sure). cheers, Christian. On 2009-09-02, at 23:13 , Thiago H. de Paula Figueiredo wrote: Em Wed, 02 Sep 2009 20:36:21 -0300, Alfie Kirkpatrick alfie.kirkpatr...@ioko.com escreveu: So I think T5 helps separate concerns and assists in building multi-device apps (ie. it's a decent framework to do this in), but the framework itself could do more if this becomes something many web developers end up having to build for in future. What exactly could the framework do? There's a framework that does it: JSF. Then it got too complicated. Of course, we could be smarter than the JSF creators. :) But I agree with Howard: different devices with different capabilities, different frontends. -- Thiago H. de Paula Figueiredo Independent Java consultant, developer, and instructor http://www.arsmachina.com.br/thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org Christian Edward Gruber e-mail: christianedwardgru...@gmail.com weblog: http://www.geekinasuit.com/ - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org Ce message et les pièces jointes sont confidentiels et réservés à l'usage exclusif de ses destinataires. Il peut également être protégé par le secret professionnel. Si vous recevez ce message par erreur, merci d'en avertir immédiatement l'expéditeur et de le détruire. L'intégrité du message ne pouvant être assurée sur Internet, la responsabilité du groupe Atos Origin ne pourra être recherchée quant au contenu de ce message. Bien que les meilleurs efforts soient faits pour maintenir cette transmission exempte de tout virus, l'expéditeur ne donne aucune garantie à cet égard et sa responsabilité ne saurait être recherchée pour tout dommage résultant d'un virus transmis. This e-mail and the documents attached are confidential and intended solely for the addressee; it may also be privileged. If you receive this e-mail in error, please notify the sender immediately and destroy it. As its integrity cannot be secured on the Internet, the Atos Origin group liability cannot be triggered for the message content. Although the sender
Reloading fails back to old version for nested components
I have the following use case page A contains component B I change something in B and redeploy the template of B. Reloading works Then I change something in the page and redeploy A. Suddenly the old version of B appears again. Does anybody else experience this behaviour. -- Best Regards / Viele Grüße Sebastian Hennebrueder - http://www.laliluna.de Laliluna.de, Berliner Strasse 22, 61118 Bad Vilbel, Germany * Java Software Development, Support * Training for Hibernate and Java Persistence * Tutorials for JSP, JavaServer Faces, Struts, Hibernate and EJB smime.p7s Description: S/MIME Cryptographic Signature
Re: Can't get Testify JUnit 4 Mockito working
Hi Mats, Hi! I then have a subclass with the JUnit 4 test: public class GamesLauncherTest extends AbstractPageTest { @ForComponents @Mock private XyzManager xyzManager; @Mock private XyzConfig xyzConfig; What I get is runtime exceptions, such as this: Caused by: java.lang.RuntimeException: Service id 'xyzConfig' is not defined by any module. Defined services: AccessDecisionManager, ... VirtualAssetStreamer. Something is trying to look up a service with id xyzConfig - using that id. I assume you have something like this in your page: @Inject @Service(xyzConfig) private XyzConfig config; If that's true then it might simply be that you haven't got a @ForComponents annotation on your xyzConfig mock. Also, if you name the service (using the @Service annotation) then you need to name it in the @ForComponents too: public class GamesLauncherTest extends AbstractPageTest { @ForComponents @Mock private XyzManager xyzManager; @ForComponents(xyzConfig) @Mock private XyzConfig xyzConfig; OK, I'll try that. We define our services in spring XML files, and @Inject them into our pages, and this worries me quite a bit, since I can't see any examples where Spring XML wiring has been mocked. If you are faking/mocking the services then there's no problem. However, Testify and Tapestry's PageTester don't work with the tapestry-spring integration so you can't rely on the real spring services for (for example) integration tests. Actually, I don't want the Spring wiring at all. I hope to be able to use Mockito mocks all the way. Mats - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Extending ActionLink
Hello, I try to extend ActionLink in order to get rendered the following code. t:actionlink t:id=delete context=aModel.id img src=${context:images/delete.png} alt=Delete image title=message:icon_delete/ /t:actionlink using something like this in my template t:delete context=aModel.id/ My first try had the effect that the actionlink rendered like this inside of a loop. http://localhost:8080/content/editreadlist.delete_0.delete/$005bLjava.lang.Object$003b$00407369f6b9?t:ac=770671 Do you have any ideas, how I can achieve what I wanted? I used the following class public class Delete { @Parameter private Object[] context; public Object[] getContext() { return context; } } with the following template. body xmlns=http://www.w3.org/1999/xhtml; xmlns:t=http://tapestry.apache.org/schema/tapestry_5_1_0.xsd; t:actionlink t:id=delete context=${context} img src=${context:images/delete.png} alt=Delete image title=message:icon_delete/ /t:actionlink /body -- Best Regards / Viele Grüße Sebastian Hennebrueder - Software Developer and Trainer for Hibernate / Java Persistence http://www.laliluna.de - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: t5: request count
no, because css, js, images,... requests are counted as well - not every request is a page request Angelo Chen angelochen...@yahoo.com.hk 03.09.2009 11:02 Bitte antworten an Tapestry users users@tapestry.apache.org An users@tapestry.apache.org Kopie Thema t5: request count Hi, In tomcat manager, we can see: Request count: 1 is it equivalent to the request make to t5 pages? Angelo -- View this message in context: http://www.nabble.com/t5%3A-request-count-tp25272224p25272224.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: Extending ActionLink
what type is aModel.id? maybe you have to register an own ValueEncoder to convert aModel.id to a valid client representation and vice versa. just out of curiosity: why dont you define a .btn_delete css class? should be easier. g, kris Sebastian Hennebrueder use...@laliluna.de 03.09.2009 11:39 Bitte antworten an Tapestry users users@tapestry.apache.org An Tapestry users users@tapestry.apache.org Kopie Thema Extending ActionLink Hello, I try to extend ActionLink in order to get rendered the following code. t:actionlink t:id=delete context=aModel.id img src=${context:images/delete.png} alt=Delete image title=message:icon_delete/ /t:actionlink using something like this in my template t:delete context=aModel.id/ My first try had the effect that the actionlink rendered like this inside of a loop. http://localhost:8080/content/editreadlist.delete_0.delete/$005bLjava.lang.Object$003b$00407369f6b9?t:ac=770671 Do you have any ideas, how I can achieve what I wanted? I used the following class public class Delete { @Parameter private Object[] context; public Object[] getContext() { return context; } } with the following template. body xmlns=http://www.w3.org/1999/xhtml; xmlns:t=http://tapestry.apache.org/schema/tapestry_5_1_0.xsd t:actionlink t:id=delete context=${context} img src=${context:images/delete.png} alt=Delete image title=message:icon_delete/ /t:actionlink /body -- Best Regards / Viele Grüße Sebastian Hennebrueder - Software Developer and Trainer for Hibernate / Java Persistence http://www.laliluna.de - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Extending ActionLink
Kristian Marinkovic schrieb: what type is aModel.id? aModel is a simple domain class, where as id is an Integer value But I don't think that this is the problem. maybe you have to register an own ValueEncoder to convert aModel.id to a valid client representation and vice versa. no just out of curiosity: why dont you define a .btn_delete css class? should be easier. The title of the image is used to show a help bubble and I want to show an ALT attribute to follow HTML standards as well. I am not sure if an background image of the action link alines properly if I apply a hoover effect to it showing a thin border. Best Regards Sebastian Hennebrueder g, kris Sebastian Hennebrueder use...@laliluna.de 03.09.2009 11:39 Bitte antworten an Tapestry users users@tapestry.apache.org An Tapestry users users@tapestry.apache.org Kopie Thema Extending ActionLink Hello, I try to extend ActionLink in order to get rendered the following code. t:actionlink t:id=delete context=aModel.id img src=${context:images/delete.png} alt=Delete image title=message:icon_delete/ /t:actionlink using something like this in my template t:delete context=aModel.id/ My first try had the effect that the actionlink rendered like this inside of a loop. http://localhost:8080/content/editreadlist.delete_0.delete/$005bLjava.lang.Object$003b$00407369f6b9?t:ac=770671 Do you have any ideas, how I can achieve what I wanted? I used the following class public class Delete { @Parameter private Object[] context; public Object[] getContext() { return context; } } with the following template. body xmlns=http://www.w3.org/1999/xhtml; xmlns:t=http://tapestry.apache.org/schema/tapestry_5_1_0.xsd t:actionlink t:id=delete context=${context} img src=${context:images/delete.png} alt=Delete image title=message:icon_delete/ /t:actionlink /body -- Best Regards / Viele Grüße Sebastian Hennebrueder - Software Developer and Trainer for Hibernate / Java Persistence http://www.laliluna.de - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Extending ActionLink
yes, you can do it with css! :) just apply an invisble border. on hover you just set your color. this prevents layout to shake (redraw) you're right you don't need an ValueEncoder.a TypeCoercer is used to convert the context type. it seems like your context object is being serialized but i cannot find a TypeCoerceTuple doing this. nor do i understand why it is doing that. i'll try it myself and report tomorrow Sebastian Hennebrueder use...@laliluna.de 03.09.2009 12:20 Bitte antworten an Tapestry users users@tapestry.apache.org An Tapestry users users@tapestry.apache.org Kopie Thema Re: Extending ActionLink Kristian Marinkovic schrieb: what type is aModel.id? aModel is a simple domain class, where as id is an Integer value But I don't think that this is the problem. maybe you have to register an own ValueEncoder to convert aModel.id to a valid client representation and vice versa. no just out of curiosity: why dont you define a .btn_delete css class? should be easier. The title of the image is used to show a help bubble and I want to show an ALT attribute to follow HTML standards as well. I am not sure if an background image of the action link alines properly if I apply a hoover effect to it showing a thin border. Best Regards Sebastian Hennebrueder g, kris Sebastian Hennebrueder use...@laliluna.de 03.09.2009 11:39 Bitte antworten an Tapestry users users@tapestry.apache.org An Tapestry users users@tapestry.apache.org Kopie Thema Extending ActionLink Hello, I try to extend ActionLink in order to get rendered the following code. t:actionlink t:id=delete context=aModel.id img src=${context:images/delete.png} alt=Delete image title=message:icon_delete/ /t:actionlink using something like this in my template t:delete context=aModel.id/ My first try had the effect that the actionlink rendered like this inside of a loop. http://localhost:8080/content/editreadlist.delete_0.delete/$005bLjava.lang.Object$003b$00407369f6b9?t:ac=770671 Do you have any ideas, how I can achieve what I wanted? I used the following class public class Delete { @Parameter private Object[] context; public Object[] getContext() { return context; } } with the following template. body xmlns=http://www.w3.org/1999/xhtml; xmlns:t= http://tapestry.apache.org/schema/tapestry_5_1_0.xsd t:actionlink t:id=delete context=${context} img src=${context:images/delete.png} alt=Delete image title=message:icon_delete/ /t:actionlink /body -- Best Regards / Viele Grüße Sebastian Hennebrueder - Software Developer and Trainer for Hibernate / Java Persistence http://www.laliluna.de - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Extending ActionLink
hi Sebastian Hennebrueder schrieb: t:actionlink t:id=delete context=${context} shouldn't this be: t:actionlink t:id=delete context=context ? - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Can't get Testify JUnit 4 Mockito working
Caused by: java.lang.RuntimeException: Service id 'xyzConfig' is not defined by any module. Defined services: AccessDecisionManager, ... VirtualAssetStreamer. Something is trying to look up a service with id xyzConfig - using that id. I assume you have something like this in your page: @Inject @Service(xyzConfig) private XyzConfig config; If that's true then it might simply be that you haven't got a @ForComponents annotation on your xyzConfig mock. Also, if you name the service (using the @Service annotation) then you need to name it in the @ForComponents too: public class GamesLauncherTest extends AbstractPageTest { @ForComponents @Mock private XyzManager xyzManager; @ForComponents(xyzConfig) @Mock private XyzConfig xyzConfig; OK, I'll try that. That didn't work either. So now I've started out copy paste of example code to my code base, to see if the MessagePage and ForComponentsJustMockTest examples would work, and they don't. Same error message. My current guess is that @ForComponents is pulling in and handling binding from my real AppManager, even though it is in no way part of the test. Does anyone have a clue? Mats - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
RE: Newbie questions
Thank you very much Thiago. EventContext is working ok when I'm sending data from the page to the same page. But if I send data from another page and I'm setting the EventContext parameters as before is show an error: method onActivate signature: (Lorg/apache/tapestry/EventContext;)V) Illegal constant pool index Do I have to set the onActivate parameters one by one as I usually did or is better to make a setContext method in the page receiving the data? If so, how do I implement the setter? With a constructor of ArrayEventContext? Thank you very much again. I really aprecciate the help of all you guys. It's saving my life! _ Con Vodafone disfruta de Hotmail gratis en tu móvil. ¡Pruébalo! http://serviciosmoviles.es.msn.com/hotmail/vodafone.aspx
How do you pass a context to PageTester?
Hi! Since Testify isn't working for me, I thought I'd look at this page: http://tapestry.apache.org/tapestry5.1/guide/unit-testing-pages.html It has this example: PageTester tester = new PageTester(appPackage, appName, ...); Object[] context = new Object[]{ abc, 123 }; Document doc = tester.invoke(new ComponentInvocation( new PageLinkTarget(MyPage), context)); Unfortunately I can't find a PageTester.invoke() function in T5.1. There isn't a ComponentInvocation class either. So, how IS this supposed to work? And what exactly IS that context? Is it possible to override the @Injected services with mock services into my page this way? Mats - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Supporting multiple devices, eg. browser + mobile + TV
We have had a solution that let us load different templates based on arbitrary parameters. It would be possible to use this to select a different TML for the page. This does require a some amount of overiding/hacking of internal services so we never put it into production - but it is certainly feasible. Ben Gidley www.gidley.co.uk b...@gidley.co.uk On Thu, Sep 3, 2009 at 10:02 AM, Robin K. robin.komi...@atosorigin.comwrote: myapp/components // the ordinatry myapp/wap/components / the wap overwrites We also already test this solution. It can be done for pages with not so much pain. For components it was a lot more complex. We finally abandonned this solution. Sebastian Hennebrueder wrote: The approach followed by Ramaze (a Ruby based framework) is to deliver different content depending on the suffix. I like the approach but Tapestry probably doesn't fit in very well with such a concept as content is created by Java Code or templates both in pages and components. The idea to setup a separate application introduces a lot of redundant code. What about a shadow directory structure holding components and templates I would like to overwrite. myapp/components // the ordinatry myapp/wap/components / the wap overwrites ... This allows to reuse what you can and replace what you need. Depending on the request you dispatch to one namespace or another. Best Regards / Viele Grüße Sebastian Hennebrueder - Software Developer and Trainer for Hibernate / Java Persistence http://www.laliluna.de Komiwes Robin schrieb: Hi, We've done that here, and it wasn't a real pleasure party. but yes, for each component and pages, we can use the same system than localization: i.e. : index.tml, index_fr.tml, index_iphone_fr.tml You've got to decorate a lot of internals services (PagePool, ComponentTemplateSource), hack the locale and prey for no API changes in the future. :-) I agree with others comments, a web for desktop browser should never be the same web than a web for SmartPhones. You should do a specific app/page for other devices. Robin K. - Atos Worldline -Message d'origine- De : Christian Edward Gruber [mailto:christianedwardgru...@gmail.com] Envoyé : jeudi 3 septembre 2009 06:04 À : Tapestry users Objet : Re: Supporting multiple devices, eg. browser + mobile + TV I'd go further - interfaces for the blind, for the hard of hearing - these are still more clients. If the user experience is going to be substantially altered, then you can convert from some meta-interface and have everything automatically expressed, but that often requires that the framework make trade-off choices that are better handled by a good User Experience designer. A lot of what makes a good iPhone- ready application is a different user-flow that's consistent with the device's unique properties. Shoe-horning a normal web-interface will often result in a bad iPhone experience (though better than WAP phones, to be sure). cheers, Christian. On 2009-09-02, at 23:13 , Thiago H. de Paula Figueiredo wrote: Em Wed, 02 Sep 2009 20:36:21 -0300, Alfie Kirkpatrick alfie.kirkpatr...@ioko.com escreveu: So I think T5 helps separate concerns and assists in building multi-device apps (ie. it's a decent framework to do this in), but the framework itself could do more if this becomes something many web developers end up having to build for in future. What exactly could the framework do? There's a framework that does it: JSF. Then it got too complicated. Of course, we could be smarter than the JSF creators. :) But I agree with Howard: different devices with different capabilities, different frontends. -- Thiago H. de Paula Figueiredo Independent Java consultant, developer, and instructor http://www.arsmachina.com.br/thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org Christian Edward Gruber e-mail: christianedwardgru...@gmail.com weblog: http://www.geekinasuit.com/ - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org Ce message et les pièces jointes sont confidentiels et réservés à l'usage exclusif de ses destinataires. Il peut également être protégé par le secret professionnel. Si vous recevez ce message par erreur, merci d'en avertir immédiatement l'expéditeur et de le détruire. L'intégrité du message ne pouvant être assurée sur Internet, la responsabilité du groupe Atos Origin ne pourra être recherchée quant au contenu de ce message. Bien que les meilleurs efforts soient faits pour maintenir cette transmission exempte de tout
Re: Newbie questions
Em Thu, 03 Sep 2009 08:40:53 -0300, Martin Torre Castro mad...@hotmail.com escreveu: Thank you very much Thiago. You're welcome! EventContext is working ok when I'm sending data from the page to the same page. But if I send data from another page and I'm setting the EventContext parameters as before is show an error: method onActivate signature: (Lorg/apache/tapestry/EventContext;)V) Illegal constant pool index This is a compilation or class manipulation issue. Try recompiling your application. It looks like you're trying to receive an array of EventContext in your onActivate method: that's not correct. It should be onActivate(EventContext context). The context value can't be an EventContext (something I guess it's fixed in the next Tapestry version). Do I have to set the onActivate parameters one by one as I usually did or is better to make a setContext method in the page receiving the data? If you use a method other than onActivate to recevie data, it's a valid choice, but you're not using the activation context. -- Thiago H. de Paula Figueiredo Independent Java consultant, developer, and instructor http://www.arsmachina.com.br/thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Can't get Testify JUnit 4 Mockito working
Mats Henricson m...@henricson.se wrote on 03/09/2009 12:28:23: My current guess is that @ForComponents is pulling in and handling binding from my real AppManager, even though it is in no way part of the test. In that case try creating the TapestryTester with a nonsense app name: private static final TapestryTester SHARED_TESTER = new TapestryTester(nonsense, MyModule.class); That will make sure Tapestry/Testify are using only the modules you specify in the constructor. Paul --- This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and delete this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden. Please refer to http://www.db.com/en/content/eu_disclosures.htm for additional EU corporate and regulatory disclosures.
Re: Can't get Testify JUnit 4 Mockito working
Hi Mats, I have checked your configuration and it looks correct, I am using JUnit4 and have it working with this same setup... one thing to be conscious of is using the correct service scope... you are aware that you may not be using TestifyConstants.PERTEST if you source in from AppModule? regards, Peter - Original Message - From: Paul Field paul.fi...@db.com To: Tapestry users users@tapestry.apache.org Sent: Thursday, 3 September, 2009 14:54:55 GMT +02:00 Athens, Beirut, Bucharest, Istanbul Subject: Re: Can't get Testify JUnit 4 Mockito working Mats Henricson m...@henricson.se wrote on 03/09/2009 12:28:23: My current guess is that @ForComponents is pulling in and handling binding from my real AppManager, even though it is in no way part of the test. In that case try creating the TapestryTester with a nonsense app name: private static final TapestryTester SHARED_TESTER = new TapestryTester(nonsense, MyModule.class); That will make sure Tapestry/Testify are using only the modules you specify in the constructor. Paul --- This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error) please notify the sender immediately and delete this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden. Please refer to http://www.db.com/en/content/eu_disclosures.htm for additional EU corporate and regulatory disclosures. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
eJUG Tapestry presentation
Kristian Marinkovic present Tapestry IoC as a modular application development solution (and Sam Brannen Spring-DM) on the 17th September 06:30 - 8:30 pm in Linz, Austria. This is a eJUG (enterprise Java User Group) Austria seminar evening - so it will be in German. More details here: http://www.ejug.at/node/25 I guess this will be an interesting evening. -- Chris -- View this message in context: http://n2.nabble.com/eJUG-Tapestry-presentation-tp3573019p3573019.html Sent from the Tapestry Users 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
Using object or id in Context
Why are most examples written as context=myObject.id? Should not the best practice be to use the object directly? This way the handler method will be more type safe. Do you know of any good best-practices page for issues like this one? /Tapestry learner - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Extending ActionLink
Felix Gonschorek schrieb: hi Sebastian Hennebrueder schrieb: t:actionlink t:id=delete context=${context} shouldn't this be: t:actionlink t:id=delete context=context ? - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org Hello Felix, the problem is not the encoded parameter, which is probably due to the fact that there is an Object array. I just want to get the onActionFromDelete called and not an onActionFromDelete_0 -- Best Regards / Viele Grüße Sebastian Hennebrueder - Software Developer and Trainer for Hibernate / Java Persistence http://www.laliluna.de - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Newbie questions
Hi. I made the mvn clean and tried again to run the app but the same error keeps on. /* on the FindSocios page */- showSocios.setSocioSearchType(socioSearchType.toString()); //LINE 122 the stacktrace leads to here, the only hint I have showSocios.setDateSearchType(dateSearchType.toString()); showSocios.setCatSearchType(catSearchType.toString()); switch(socioSearchType) { case ALL: return showSocios; case BYLOGIN: showSocios.setLogin(login); return showSocios; case BYDNI: showSocios.setDni(dni); return showSocios; /* on the ShowSocios page*/-- The onActivate() signature when receiving is: void onActivate(EventContext context) throws ParseException { this.idServ = context.get(Long.class, 3); this.login= context.get(String.class, 5); this.dni= context.get(String.class, 6); ...and so on } java.lang.VerifyError (class: es/udc/madtyn/gimnasio/web/pages/show/ShowSocios, method: onActivate signature: (Lorg/apache/tapestry5/EventContext;)V) Illegal constant pool index Stack trace: org.apache.tapestry5.internal.structure.InternalComponentResourcesImpl.init(InternalComponentResourcesImpl.java:85) org.apache.tapestry5.internal.structure.ComponentPageElementImpl.init(ComponentPageElementImpl.java:589) org.apache.tapestry5.internal.structure.ComponentPageElementImpl.init(ComponentPageElementImpl.java:602) org.apache.tapestry5.internal.services.PageElementFactoryImpl.newRootComponentElement(PageElementFactoryImpl.java:266) org.apache.tapestry5.internal.services.PageLoaderProcessor.loadRootComponent(PageLoaderProcessor.java:412) org.apache.tapestry5.internal.services.PageLoaderProcessor.loadPage(PageLoaderProcessor.java:390) org.apache.tapestry5.internal.services.PageLoaderImpl.loadPage(PageLoaderImpl.java:59) org.apache.tapestry5.internal.services.PagePoolCache.checkout(PagePoolCache.java:210) org.apache.tapestry5.internal.services.PagePoolImpl.checkout(PagePoolImpl.java:99) org.apache.tapestry5.internal.services.RequestPageCacheImpl.get(RequestPageCacheImpl.java:51) org.apache.tapestry5.internal.services.ComponentSourceImpl.getPage(ComponentSourceImpl.java:79) es.udc.madtyn.gimnasio.web.pages.find.FindSocios._$read_inject_page_showSocios(FindSocios.java) es.udc.madtyn.gimnasio.web.pages.find.FindSocios.onSubmitFromBusquedaForm(FindSocios.java:122) - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Can't get Testify JUnit 4 Mockito working
My current guess is that @ForComponents is pulling in and handling binding from my real AppManager, even though it is in no way part of the test. In that case try creating the TapestryTester with a nonsense app name: private static final TapestryTester SHARED_TESTER = new TapestryTester(nonsense, MyModule.class); That will make sure Tapestry/Testify are using only the modules you specify in the constructor. This seems to do the trick, actually! Much much thanks! But now Acegi Security is kicking in, and I get: Can only process HttpServletRequest Has anyone managed to mock it out of the picture? Mats - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Can't get Testify JUnit 4 Mockito working
Hi Mats, Yes, this is a question that has come up before, Paul provided the answer... you can do a google for the original post, but you will need to create a module with a contribution that ensures there are replacement HTTP request/response objects available for your tests, then use a mock to replace the request and response in your actual test. This is the code Paul provided: public static void contributeRequestHandler(OrderedConfigurationRequestFilter config, final RequestGlobals requestGlobals) { RequestFilter filter = new RequestFilter() { public boolean service(Request request, Response response, RequestHandler handler) throws IOException { requestGlobals.storeServletRequestResponse(mock (HttpServletRequest.class), mock(HttpServletResponse.class)); return handler.service(request, response); } }; config.add(EnsureNonNullHttpRequestAndResponse, filter, before:*); } Kind regards, Peter - Original Message - From: Mats Henricson m...@henricson.se To: Tapestry users users@tapestry.apache.org Sent: Thursday, 3 September, 2009 16:30:10 GMT +02:00 Athens, Beirut, Bucharest, Istanbul Subject: Re: Can't get Testify JUnit 4 Mockito working My current guess is that @ForComponents is pulling in and handling binding from my real AppManager, even though it is in no way part of the test. In that case try creating the TapestryTester with a nonsense app name: private static final TapestryTester SHARED_TESTER = new TapestryTester(nonsense, MyModule.class); That will make sure Tapestry/Testify are using only the modules you specify in the constructor. This seems to do the trick, actually! Much much thanks! But now Acegi Security is kicking in, and I get: Can only process HttpServletRequest Has anyone managed to mock it out of the picture? Mats - 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
Problem with OptimizedSessionPersistedObject not working in Tomcat Jetty
I don't know if anyone else has spotted this, and it may well be the case for other servlet containers as well, but we noticed that objects were being propagated across our cluster even when a page that only read the session object was just being refreshed. This is a very serious issue, not quite a blocker because everything functions okay, but I really think this should be fixed and released as 5.1.0.6 as soon as possible. Please take a look at the bug and vote for it if you agree: https://issues.apache.org/jira/browse/TAP5-834 I've included a couple of suggestions of solutions, please comment if you thing there are any drawbacks or better ones. Thanks, Andy.
Re: Using object or id in Context
Hi Mats, Should not the best practice be to use the object directly? Imho no, myObject.id is a bean for the page (object with empty constructor), which is less error prone. Its nearly always better to use a bean to seperate concerns for cleaner, more maintainable code. I.e.: you should not mix database access with view logic, instead use a single bean where possible per page and handle database access in your services (which makes things more testable and reusable)... so it has several advantages. The bean is like a glue layer (or the view layer in the MVC pattern). So following this pattern means myObject.id is no less type safe as myObject is never really going to be null in your page. regards, Peter - Original Message - From: Mats Andersson mats.anders...@ronsoft.se To: Tapestry users users@tapestry.apache.org Sent: Thursday, 3 September, 2009 15:58:20 GMT +02:00 Athens, Beirut, Bucharest, Istanbul Subject: Using object or id in Context Why are most examples written as context=myObject.id? Should not the best practice be to use the object directly? This way the handler method will be more type safe. Do you know of any good best-practices page for issues like this one? /Tapestry learner - 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: Using object or id in Context
Thanks Peter for the reply. I am starting to learning the concepts of Tapestry, but it takes time to be productive with it. This mailing list is a great resource and I hope that I will be able to contribute to it once I have learned more. Regards, Mats p.stavrini...@albourne.com wrote: Hi Mats, Should not the best practice be to use the object directly? Imho no, myObject.id is a bean for the page (object with empty constructor), which is less error prone. Its nearly always better to use a bean to seperate concerns for cleaner, more maintainable code. I.e.: you should not mix database access with view logic, instead use a single bean where possible per page and handle database access in your services (which makes things more testable and reusable)... so it has several advantages. The bean is like a glue layer (or the view layer in the MVC pattern). So following this pattern means myObject.id is no less type safe as myObject is never really going to be null in your page. regards, Peter - Original Message - From: Mats Andersson mats.anders...@ronsoft.se To: Tapestry users users@tapestry.apache.org Sent: Thursday, 3 September, 2009 15:58:20 GMT +02:00 Athens, Beirut, Bucharest, Istanbul Subject: Using object or id in Context Why are most examples written as context=myObject.id? Should not the best practice be to use the object directly? This way the handler method will be more type safe. Do you know of any good best-practices page for issues like this one? /Tapestry learner - 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: [ANN] JumpStart 4.4 released
Kalle, I'm really glad you asked this question because it got me thinking, and I've realised I'm putting too much into onActivate(..). The problem is that onActivate() is called regardless of whether the user clicks on submit or an ActionLink. The database activity in onActivate() is not usually necessary for an ActionLink. I think this is better... * Use onActivate() to read in the context and nothing more. * Use setupRender() to set up display-only objects and fields. You can also use getters if they have low overhead or you take care to lazy- load. * Use onPrepare() to set up editable objects and fields. onPrepare() is triggered by form render and form submit. If there's more than one form then use multiple onPrepares, eg. onPrepareForFormX(), onPrepareForFormY(). So the examples become... UserCreate.java: void onPrepare() { // Instantiate a User for the page data to overlay. _user = new User(); _user.setActive(true); } UserEdit.java: Long onPassivate() { return _userId; } void onActivate(Long id) { _userId = id; } void onPrepare() { try { _user = getSecurityFinderService().findUser(_userId); } catch (DoesNotExistException e) { // Handle null user in the template } } void setupRender() { _userRoles = getSecurityFinderService().findUserRolesShallowishByUser(_userId); } I've almost finished reworking JumpStart to suit this pattern and it works much better. I'll release a few days from now as version 4.5.2. The previous technique is a hangover from when I thought onActivate() should validate the context and throw an exception if it was invalid. I changed my mind on that quite a while ago and wrote this: http://jumpstart.doublenegative.com.au:8080/jumpstart/examples/infrastructure/handlingabadcontext/1 Thanks again, Geoff On 03/09/2009, at 4:53 AM, Kalle Korhonen wrote: Thanks Geoff, no can't see any major issues. Agree on the initialization of roles in setupRender() since they really are used for rendering only. Heavy use of lazy getter-based initialization has gotten me into trouble before, but I may revisit my coding best practice. And that's really the only thing I was after - to review my understanding and practices against others'. Kalle On Wed, Sep 2, 2009 at 8:12 AM, Geoff Callendergeoff.callender.jumpst...@gmail.com wrote: To set the scene: in the EditUser example, the user is displayed in a form and the user roles are displayed below it in a grid with ActionLinks for View, Edit, and Delete on each row. The reason it is OK to get the user roles in setupRender() is because they are not editable - all we need is the id for the context of each ActionLink in the row. If you come back to this screen and hit a link then it will still work. Actually, if the user roles were editable you'd probably get them in onPrepare() rather than onActivate(), just as in the EditableLoop1 example. I can't recall why I preferred onPrepare() over onActivate() but I think it was because it's called exactly as often as it is needed whereas onActivate() is called often. If a ValueEncoder is used with the loop then it becomes OK to get the entities in setupRender() and encode them in onPrepare(). This is demonstrated in EditableLoopUsingEncoder1. Back in the user form, user.salutation is chosen from a Select list. The list doesn't need to be built in onActivate() either. It's done in getSalutations() and works just fine with the Back button. Can you see a hole in this that I've missed? Geoff http://jumpstart.doublenegative.com.au:8080/jumpstart/ On 02/09/2009, at 11:56 PM, Kalle Korhonen wrote: On Tue, Sep 1, 2009 at 11:30 PM, Geoff Callendergeoff.callender.jumpst...@gmail.com wrote: The key to it is this snippet: if the stuff you are setting up is not needed for component event requests, consider putting it elsewhere. If I understand your example correctly, the object you are creating IS needed for a component event request so DO put it in onActivate(...). Yes, that's just the thing. Whether it's entities or translators or anything, pretty much all of that stuff is needed for event requests. Can you come up with a good example for initializing something that is safe to do in setupRender()? Obviously if that object is really needed just for rendering (as the operation name suggests) then it's the right place for it, but those cases are few and far between. Even in your example, the userRoles are most certainly needed in event requests - obviously you can just return error user doesn't have the proper role for the operation but it'd be more usable to just do that in onActivate as well. But with edit, if you want optimistic locking then you have to
RE: Supporting multiple devices, eg. browser + mobile + TV
I guess I'm voting to make this better supported, ie. a way to customise the way tml's are loaded under the control of the application, therefore not having to hack/subvert the existing locale support. It seems to me a few people have tried to do this and found it harder than maybe it should be... I fully understand and appreciate all the comments about having separate apps though! Regards, Alfie. -Original Message- From: Komiwes Robin [mailto:robin.komi...@atosorigin.com] Sent: 03 September 2009 08:31 To: Tapestry users Subject: RE: Supporting multiple devices, eg. browser + mobile + TV Hi, We've done that here, and it wasn't a real pleasure party. but yes, for each component and pages, we can use the same system than localization: i.e. : index.tml, index_fr.tml, index_iphone_fr.tml You've got to decorate a lot of internals services (PagePool, ComponentTemplateSource), hack the locale and prey for no API changes in the future. :-) I agree with others comments, a web for desktop browser should never be the same web than a web for SmartPhones. You should do a specific app/page for other devices. Robin K. - Atos Worldline -Message d'origine- De : Christian Edward Gruber [mailto:christianedwardgru...@gmail.com] Envoyé : jeudi 3 septembre 2009 06:04 À : Tapestry users Objet : Re: Supporting multiple devices, eg. browser + mobile + TV I'd go further - interfaces for the blind, for the hard of hearing - these are still more clients. If the user experience is going to be substantially altered, then you can convert from some meta-interface and have everything automatically expressed, but that often requires that the framework make trade-off choices that are better handled by a good User Experience designer. A lot of what makes a good iPhone- ready application is a different user-flow that's consistent with the device's unique properties. Shoe-horning a normal web-interface will often result in a bad iPhone experience (though better than WAP phones, to be sure). cheers, Christian. On 2009-09-02, at 23:13 , Thiago H. de Paula Figueiredo wrote: Em Wed, 02 Sep 2009 20:36:21 -0300, Alfie Kirkpatrick alfie.kirkpatr...@ioko.com escreveu: So I think T5 helps separate concerns and assists in building multi-device apps (ie. it's a decent framework to do this in), but the framework itself could do more if this becomes something many web developers end up having to build for in future. What exactly could the framework do? There's a framework that does it: JSF. Then it got too complicated. Of course, we could be smarter than the JSF creators. :) But I agree with Howard: different devices with different capabilities, different frontends. -- Thiago H. de Paula Figueiredo Independent Java consultant, developer, and instructor http://www.arsmachina.com.br/thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org Christian Edward Gruber e-mail: christianedwardgru...@gmail.com weblog: http://www.geekinasuit.com/ - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org Ce message et les pièces jointes sont confidentiels et réservés à l'usage exclusif de ses destinataires. Il peut également être protégé par le secret professionnel. Si vous recevez ce message par erreur, merci d'en avertir immédiatement l'expéditeur et de le détruire. L'intégrité du message ne pouvant être assurée sur Internet, la responsabilité du groupe Atos Origin ne pourra être recherchée quant au contenu de ce message. Bien que les meilleurs efforts soient faits pour maintenir cette transmission exempte de tout virus, l'expéditeur ne donne aucune garantie à cet égard et sa responsabilité ne saurait être recherchée pour tout dommage résultant d'un virus transmis. This e-mail and the documents attached are confidential and intended solely for the addressee; it may also be privileged. If you receive this e-mail in error, please notify the sender immediately and destroy it. As its integrity cannot be secured on the Internet, the Atos Origin group liability cannot be triggered for the message content. Although the sender endeavours to maintain a computer virus-free network, the sender does not warrant that this transmission is virus-free and will not be liable for any damages resulting from any virus transmitted. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Marker for required fields on bean editor
Hi all! Is it possible to mark the required fields inside a beaneditor form as valid? I know i could override the field declaration and put the marker there but i would like to create something more generic. I was thinking that a Mixin may get the beaneditor's form to get all the components in the form, iterate over the validators and add the js or mark to the ones with a required validator but i am not sure how to accomplish this. Is it possible at all? Has anybody done such thing? - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Add yourself to the Tapestry Users Map
I maintain a map of Google Map of Tapestry users: http://maps.google.com/maps/ms?ie=UTF8hl=enmsa=0msid=106662057515738259524.0004696f8216ba268b74az=3 It's fun an informative for me, and for others, to see where the Tapestry users are. For instance, I can see that Germany is a real hot-bed of Tapestry activity (a separate discussion would be why there as opposed to elsewhere?). Start by clicking the Edit button: [image: map-edit.png] Next, click the pushpin icon in the upper left corner of the map: [image: map-toolbar.png] Drag the push-pin to where you live: [image: map-drop.png] In the popup-bubble, set the Title to your name, add any extra details you like, and customize the push-pin icon if you like: [image: map-details.png] Click OK to dismiss the dialog, then click Done to save your new pushpin on the global map: [image: map-done.png] -- 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!
Re: Add yourself to the Tapestry Users Map
Wow, there are a couple of people who must live in the arctic circle. -Original Message- From: Howard Lewis Ship hls...@gmail.com Reply-To: Tapestry users users@tapestry.apache.org To: Tapestry users users@tapestry.apache.org Subject: Add yourself to the Tapestry Users Map Date: Thu, 3 Sep 2009 10:03:57 -0700 I maintain a map of Google Map of Tapestry users: http://maps.google.com/maps/ms?ie=UTF8hl=enmsa=0msid=106662057515738259524.0004696f8216ba268b74az=3 It's fun an informative for me, and for others, to see where the Tapestry users are. For instance, I can see that Germany is a real hot-bed of Tapestry activity (a separate discussion would be why there as opposed to elsewhere?). Start by clicking the Edit button: map-edit.png Next, click the pushpin icon in the upper left corner of the map: map-toolbar.png Drag the push-pin to where you live: map-drop.png In the popup-bubble, set the Title to your name, add any extra details you like, and customize the push-pin icon if you like: map-details.png Click OK to dismiss the dialog, then click Done to save your new pushpin on the global map: map-done.png -- 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! - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Marker for required fields on bean editor
Juan E. Maya schrieb: Hi all! Is it possible to mark the required fields inside a beaneditor form as valid? I know i could override the field declaration and put the marker there but i would like to create something more generic. I was thinking that a Mixin may get the beaneditor's form to get all the components in the form, iterate over the validators and add the js or mark to the ones with a required validator but i am not sure how to accomplish this. Is it possible at all? Has anybody done such thing? - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org You are aware of @Validate? http://tapestry.apache.org/tapestry5/guide/validation.html -- Best Regards / Viele Grüße Sebastian Hennebrueder - Software Developer and Trainer for Hibernate / Java Persistence http://www.laliluna.de - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Marker for required fields on bean editor
Sorry Sebastian, i was not clear enough. I want to change the markup of the label when the field has a required validator. For example i want to add a CSS class required to the label of the required field. or i want to add a * next to the label. Thanks for ur answer :) On Thu, Sep 3, 2009 at 7:40 PM, Sebastian Hennebruederuse...@laliluna.de wrote: Juan E. Maya schrieb: Hi all! Is it possible to mark the required fields inside a beaneditor form as valid? I know i could override the field declaration and put the marker there but i would like to create something more generic. I was thinking that a Mixin may get the beaneditor's form to get all the components in the form, iterate over the validators and add the js or mark to the ones with a required validator but i am not sure how to accomplish this. Is it possible at all? Has anybody done such thing? - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org You are aware of @Validate? http://tapestry.apache.org/tapestry5/guide/validation.html -- Best Regards / Viele Grüße Sebastian Hennebrueder - Software Developer and Trainer for Hibernate / Java Persistence http://www.laliluna.de - 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
TapestryFilter question
I try a simall test using aspectj to capture the doFilter() execution of TapestryFilter.java. The pointcut intends to caputre the doFilter method and prints out some information in the e.g. catalina.out log file. The code looks as below: public aspect Test{ pointcut intercept(): execution(* org.apache.tapestry5.services.TapestryFilter.doFilter(..)); void around() : intercept(){ System.out.println( .. test info ); logger.debug( . test info using slf4j); // configure log properties already. proceed(); } } If I copy TapestryFilter.java to my own folder e.g. myproject/pkg/web/ and rename it to e.g. MyTapestryFilter.java. When accessing from the brwoswer http://localhost:8080/myproject. The log will show the debug information printed in the catalina.out log file. However, if the web.xml filter class switch back using TapestryFilter.java, then nothing happens. I am just curious if Tapestry5 add any contract that prevents bytecode level weaving? Or is there any source code as entry point I can start to have a look (TapestryFilter.java looks like a normal Filter calss)? I appreciate any help. Thank you. -- View this message in context: http://n2.nabble.com/TapestryFilter-question-tp3574931p3574931.html Sent from the Tapestry Users 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
Substitution for Switch/Case/Block to embed components really dynamic ?
Hi again, i'm currently working on a solution to embed custom components really dynamic. In short: I have a page with a custom component with a specific parameter. The component does nothing else than embedding (one) another custom component, based upon the passed parameter value. (and doing some validation etc...) Sounds simple and could be done with the already known switch/block construct. But... There will be up to 40+ (!) of these custom embedded components. And now there are some problems: - terrible maintenance / extension / changes - too much hardcoded (at least for me) - what's about performance issues/memory consumption? -The wrapper component need to have bindings to 40 all possible embeddable components. I think that could be problematic? So i've tried it with some different approaches, dived into the API- Docs but found nothing really helpful. Every time i will stuck on the problem that every component has to be known in the wrapper components template ... Long speech, short sense: Are there any ideas/solutions out there to embed components really dynamic? Greets from Berlin, Stefan btw: i found a solution on T4 on the lists, but every used class/ service is'nt available in T5. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: TapestryFilter question
Nothing special in Tapestry ... most likely it's a classloader conflict between AspectJ and Tomcat. Tomcat must not be loading the bytecode enhanced version of TapestryFilter, instead loading the standard version. On Thu, Sep 3, 2009 at 10:51 AM, Neo Anderson javadeveloper...@yahoo.co.ukwrote: I try a simall test using aspectj to capture the doFilter() execution of TapestryFilter.java. The pointcut intends to caputre the doFilter method and prints out some information in the e.g. catalina.out log file. The code looks as below: public aspect Test{ pointcut intercept(): execution(* org.apache.tapestry5.services.TapestryFilter.doFilter(..)); void around() : intercept(){ System.out.println( .. test info ); logger.debug( . test info using slf4j); // configure log properties already. proceed(); } } If I copy TapestryFilter.java to my own folder e.g. myproject/pkg/web/ and rename it to e.g. MyTapestryFilter.java. When accessing from the brwoswer http://localhost:8080/myproject. The log will show the debug information printed in the catalina.out log file. However, if the web.xml filter class switch back using TapestryFilter.java, then nothing happens. I am just curious if Tapestry5 add any contract that prevents bytecode level weaving? Or is there any source code as entry point I can start to have a look (TapestryFilter.java looks like a normal Filter calss)? I appreciate any help. Thank you. -- View this message in context: http://n2.nabble.com/TapestryFilter-question-tp3574931p3574931.html Sent from the Tapestry Users 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 -- 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!
Re: Extending ActionLink
Em Thu, 03 Sep 2009 10:07:56 -0300, Sebastian Hennebrueder use...@laliluna.de escreveu: the problem is not the encoded parameter, which is probably due to the fact that there is an Object array. You should *never* use an expression (${}) when passing parameters to a component, as it cause its value to be coerced to a String before being passed to the component. I just want to get the onActionFromDelete called and not an onActionFromDelete_0 In inside a loop or grid, there's no solution I can recall. If not, use EventLink instead. -- Thiago H. de Paula Figueiredo Independent Java consultant, developer, and instructor http://www.arsmachina.com.br/thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Using object or id in Context
Em Thu, 03 Sep 2009 09:58:20 -0300, Mats Andersson mats.anders...@ronsoft.se escreveu: Why are most examples written as context=myObject.id? Should not the best practice be to use the object directly? This way the handler method will be more type safe. Do you know of any good best-practices page for issues like this one? Because the object would be coerced to a String. Then you would need to get this String and get the original object back. In Tapestry CRUD, an open source package I'm developing, there's an ActivationContextEncoder. It's similar to a ValueEncoder, but used specifically for activation context values. Then I have some components (ActivationContextPageLink, ActivationContextActionLink) that receives an Object and uses the corresponding ActivationContextEncoder to get the object's activation context value. -- Thiago H. de Paula Figueiredo Independent Java consultant, developer, and instructor http://www.arsmachina.com.br/thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
T5: Email-Component to send me current web page
Hi, I was wondering how to properly write a component for our site, which is supposed to appear on any page, and enables the user to mail the current content of the page he is viewing. We've got our MailService up and running. Now I've been trying two ways of getting to the HTML source of the last page's source. One being by javascript, submitting all the current content when clicking on the email-icon. Is supposed to capture the current state of our site, which can be changed a bit by javascript while using it (Dragging a series of images around etc). It also tries to embedd the current images and cut the hrefs out, which seems to work alright in FF, not IE. The other is by an Action-Link on the email-icon, the onAction method then fiddles around with the Request and lets a Handler render the request into a ResponseWrapper (exposing the byte[] of the Response). This also gives me the HTML source, and would be usable per se, but it throws an Exception when popping an environment. From what I've read, it's difficult to more or less properly style the html in an email, as if Safari/FF/IE weren't hell enough... I am thinking about copying all the .css-data into the header of the html-part of the mail. The Images i either want to embed in the html, or with the multipart/inline mime type. Well, it barely works, but it is still ugly. Any recommondations on this topic for me? Thanks for your time, Michael -- View this message in context: http://www.nabble.com/T5%3A-Email-Component-to-send-me-current-web-page-tp25282810p25282810.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: Supporting multiple devices, eg. browser + mobile + TV
Robin K. schrieb: myapp/components // the ordinatry myapp/wap/components / the wap overwrites We also already test this solution. It can be done for pages with not so much pain. For components it was a lot more complex. We finally abandonned this solution. I assume that there are quite some things to do but wouldn't it be the cleanest approach with the maximum of reusability? It might be naive but doesn't it only require to adapt the page and the component resolution? I can already overwrite default components so there needs to be a kind of hierachical resolution already. -- Best Regards / Viele Grüße Sebastian Hennebrueder - Software Developer and Trainer for Hibernate / Java Persistence http://www.laliluna.de Sebastian Hennebrueder wrote: The approach followed by Ramaze (a Ruby based framework) is to deliver different content depending on the suffix. I like the approach but Tapestry probably doesn't fit in very well with such a concept as content is created by Java Code or templates both in pages and components. The idea to setup a separate application introduces a lot of redundant code. What about a shadow directory structure holding components and templates I would like to overwrite. myapp/components // the ordinatry myapp/wap/components / the wap overwrites ... This allows to reuse what you can and replace what you need. Depending on the request you dispatch to one namespace or another. Best Regards / Viele Grüße Sebastian Hennebrueder - Software Developer and Trainer for Hibernate / Java Persistence http://www.laliluna.de Komiwes Robin schrieb: Hi, We've done that here, and it wasn't a real pleasure party. but yes, for each component and pages, we can use the same system than localization: i.e. : index.tml, index_fr.tml, index_iphone_fr.tml You've got to decorate a lot of internals services (PagePool, ComponentTemplateSource), hack the locale and prey for no API changes in the future. :-) I agree with others comments, a web for desktop browser should never be the same web than a web for SmartPhones. You should do a specific app/page for other devices. Robin K. - Atos Worldline -Message d'origine- De : Christian Edward Gruber [mailto:christianedwardgru...@gmail.com] Envoyé : jeudi 3 septembre 2009 06:04 À : Tapestry users Objet : Re: Supporting multiple devices, eg. browser + mobile + TV I'd go further - interfaces for the blind, for the hard of hearing - these are still more clients. If the user experience is going to be substantially altered, then you can convert from some meta-interface and have everything automatically expressed, but that often requires that the framework make trade-off choices that are better handled by a good User Experience designer. A lot of what makes a good iPhone- ready application is a different user-flow that's consistent with the device's unique properties. Shoe-horning a normal web-interface will often result in a bad iPhone experience (though better than WAP phones, to be sure). cheers, Christian. On 2009-09-02, at 23:13 , Thiago H. de Paula Figueiredo wrote: Em Wed, 02 Sep 2009 20:36:21 -0300, Alfie Kirkpatrick alfie.kirkpatr...@ioko.com escreveu: So I think T5 helps separate concerns and assists in building multi-device apps (ie. it's a decent framework to do this in), but the framework itself could do more if this becomes something many web developers end up having to build for in future. What exactly could the framework do? There's a framework that does it: JSF. Then it got too complicated. Of course, we could be smarter than the JSF creators. :) But I agree with Howard: different devices with different capabilities, different frontends. -- Thiago H. de Paula Figueiredo Independent Java consultant, developer, and instructor http://www.arsmachina.com.br/thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org Christian Edward Gruber e-mail: christianedwardgru...@gmail.com weblog: http://www.geekinasuit.com/ - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: T5: ServletRequestFilter and dependency injection
I follow this setting to add my own request filter. However, I notice that if I, for instance, add public MyHttpServletRequestFilter(final FilterConfig filterConfig) { this.filterConfig = filterConfig; } in the constructor, when accessing to the url e.g. http://localhost:8080/myproject. It will throw No service implements the interface javax.servlet.FilterConfig. (I search wiki and mailing list, but do find solution related) Is there any way I can access the FilterConfig from HttpServletRequestFilter.service()? or what is the correct way if I want to obtain FilterConfig? Thanks. The rootcause is as below: java.lang.RuntimeException: No service implements the interface javax.servlet.FilterConfig. org.apache.tapestry5.ioc.internal.RegistryImpl.getService(RegistryImpl.java:560) org.apache.tapestry5.ioc.internal.ObjectLocatorImpl.getService(ObjectLocatorImpl.java:44) org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl$1.invoke(MasterObjectProviderImpl.java:56) org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:68) org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:68) org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:941) org.apache.tapestry5.ioc.internal.services.MasterObjectProviderImpl.provide(MasterObjectProviderImpl.java:41) $MasterObjectProvider_1238176ce8a.provide($MasterObjectProvider_1238176ce8a.java) org.apache.tapestry5.ioc.internal.RegistryImpl.getObject(RegistryImpl.java:696) org.apache.tapestry5.ioc.internal.ObjectLocatorImpl.getObject(ObjectLocatorImpl.java:49) org.apache.tapestry5.ioc.internal.util.InternalUtils.calculateInjection(InternalUtils.java:209) org.apache.tapestry5.ioc.internal.util.InternalUtils.access$000(InternalUtils.java:43) org.apache.tapestry5.ioc.internal.util.InternalUtils$2.invoke(InternalUtils.java:256) org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:68) org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:68) org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:941) org.apache.tapestry5.ioc.internal.util.InternalUtils.calculateParameters(InternalUtils.java:260) org.apache.tapestry5.ioc.internal.util.InternalUtils.calculateParametersForConstructor(InternalUtils.java:227) org.apache.tapestry5.ioc.internal.ConstructorServiceCreator.createObject(ConstructorServiceCreator.java:56) org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45) org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:68) org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:68) org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:941) org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49) org.apache.tapestry5.ioc.internal.SingletonServiceLifecycle.createService(SingletonServiceLifecycle.java:29) org.apache.tapestry5.ioc.internal.LifecycleWrappedServiceCreator.createObject(LifecycleWrappedServiceCreator.java:46) org.apache.tapestry5.ioc.internal.AdvisorStackBuilder.createObject(AdvisorStackBuilder.java:60) org.apache.tapestry5.ioc.internal.InterceptorStackBuilder.createObject(InterceptorStackBuilder.java:52) org.apache.tapestry5.ioc.internal.RecursiveServiceCreationCheckWrapper.createObject(RecursiveServiceCreationCheckWrapper.java:60) org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator$1.invoke(OperationTrackingObjectCreator.java:45) org.apache.tapestry5.ioc.internal.OperationTrackerImpl.invoke(OperationTrackerImpl.java:68) org.apache.tapestry5.ioc.internal.PerThreadOperationTracker.invoke(PerThreadOperationTracker.java:68) org.apache.tapestry5.ioc.internal.RegistryImpl.invoke(RegistryImpl.java:941) org.apache.tapestry5.ioc.internal.OperationTrackingObjectCreator.createObject(OperationTrackingObjectCreator.java:49) org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.obtainObjectFromCreator(JustInTimeObjectCreator.java:68) org.apache.tapestry5.ioc.internal.services.JustInTimeObjectCreator.createObject(JustInTimeObjectCreator.java:57) $HttpServletRequestFilter_1238176ceaf.delegate($HttpServletRequestFilter_1238176ceaf.java) $HttpServletRequestFilter_1238176ceaf.service($HttpServletRequestFilter_1238176ceaf.java) $HttpServletRequestHandler_1238176ceb4.service($HttpServletRequestHandler_1238176ceb4.java) org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:726) $HttpServletRequestHandler_1238176ceb4.service($HttpServletRequestHandler_1238176ceb4.java) $HttpServletRequestHandler_1238176ceae.service($HttpServletRequestHandler_1238176ceae.java) org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:127) Robert Zeigler
Re: kein Betreff
Hi Oliver, see https://issues.apache.org/jira/browse/TAP5-711 On Tue, Sep 1, 2009 at 10:25 AM, Oliver Baueroliver.bauer...@web.de wrote: Hello, i have some problems with the submit component and the parameter t:image. The following works fine with T5.1.0.5 form t:type=form t:id=myform input type=submit t:type=submit t:id=viewselection title=View/ /form and as expected the following methods are called @OnEvent(component=viewselection, value = EventConstants.SELECTED) void someMethodName() { logger.debug(With EventConstants); } void onSelectedFromViewselection() { logger.debug(With onSelectedFromId); } @OnEvent(value = selected, component = viewselection) void someOtherMethodName() { logger.debug(With @OnEvent); } but if i want to use an image for the submit none of those methods are called (the image will be rendered correctly). I've used each of the following input type=submit t:type=submit t:id=viewselection title=View t:image=context:images/view.png/ input type=submit t:type=submit t:id=viewselection title=View t:image=context:images/view.png/ t:submit t:id=viewselection title=view t:image=context:images/view.png/ Whats wrong? TIA, Oliver Neu: WEB.DE Doppel-FLAT mit Internet-Flatrate + Telefon-Flatrate für nur 19,99 Euro/mtl.!* http://produkte.web.de/go/02/ - 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: [ANN] JumpStart 4.5 released 1 September
Thanks Geoff! - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Newbie questiones
I'm experimenting and trying all kinds of things and I think the problem I have is when passing Enums to the EventContext. Although I do before the Enum - String conversion and then set the String value in the destination page and return as a String in the onPassivate, when I get the String value before converting it to Enum again, this makes something fail. I can't understand why it did work when I didn't used the EventContext and why it does fail now. Anyone does know about an efficient way to pass the Enums from the select component on the first page to the EventContext to the second injected page? I know I could use a @Persist annotation, but it involves some details I would prefer avoiding. Some sample code would be great. Thanks to everyone - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Newbie questiones
Are you trying to pass the value of a Select to another page? On Thu, Sep 3, 2009 at 5:14 PM, Madtyn mad...@gmail.com wrote: I'm experimenting and trying all kinds of things and I think the problem I have is when passing Enums to the EventContext. Although I do before the Enum - String conversion and then set the String value in the destination page and return as a String in the onPassivate, when I get the String value before converting it to Enum again, this makes something fail. I can't understand why it did work when I didn't used the EventContext and why it does fail now. Anyone does know about an efficient way to pass the Enums from the select component on the first page to the EventContext to the second injected page? I know I could use a @Persist annotation, but it involves some details I would prefer avoiding. Some sample code would be great. Thanks to everyone - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- _ Joshua S. Martin CONFIDENTIALITY NOTE: This e-mail message, including any attachment(s), contains information that may be confidential, protected by the attorney client or other legal privileges, and or proprietary non public information. If you are not an intended recipient of this message or an authorized assistant to an intended recipient, please notify the sender by replying to this message and then delete it from your system. Use, dissemination, distribution, or reproduction of this message and or any of its attachments (if any) by unintended recipients is not authorized and may be unlawful.
Re: Newbie questions
More than one select. The problem is that the model of the select is an Enum made by myself. As I explained, when I did the conversion to String and used the parameter by parameter onPassivate()-onActivate way of doing it, it worked. But using the EventContext is going to get me more than nervous :-(. 2009/9/3, Joshua Martin josmar52...@gmail.com: Are you trying to pass the value of a Select to another page? On Thu, Sep 3, 2009 at 5:14 PM, Madtyn mad...@gmail.com wrote: I'm experimenting and trying all kinds of things and I think the problem I have is when passing Enums to the EventContext. Although I do before the Enum - String conversion and then set the String value in the destination page and return as a String in the onPassivate, when I get the String value before converting it to Enum again, this makes something fail. I can't understand why it did work when I didn't used the EventContext and why it does fail now. Anyone does know about an efficient way to pass the Enums from the select component on the first page to the EventContext to the second injected page? I know I could use a @Persist annotation, but it involves some details I would prefer avoiding. Some sample code would be great. Thanks to everyone - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- _ Joshua S. Martin CONFIDENTIALITY NOTE: This e-mail message, including any attachment(s), contains information that may be confidential, protected by the attorney client or other legal privileges, and or proprietary non public information. If you are not an intended recipient of this message or an authorized assistant to an intended recipient, please notify the sender by replying to this message and then delete it from your system. Use, dissemination, distribution, or reproduction of this message and or any of its attachments (if any) by unintended recipients is not authorized and may be unlawful. - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Newbie questiones
Maybe this is a dumb question, but why can't you just pass the Enum instead of converting to a String, then passing, the reconverting back to Enum? On Thu, Sep 3, 2009 at 5:17 PM, Joshua Martin josmar52...@gmail.com wrote: Are you trying to pass the value of a Select to another page? On Thu, Sep 3, 2009 at 5:14 PM, Madtyn mad...@gmail.com wrote: I'm experimenting and trying all kinds of things and I think the problem I have is when passing Enums to the EventContext. Although I do before the Enum - String conversion and then set the String value in the destination page and return as a String in the onPassivate, when I get the String value before converting it to Enum again, this makes something fail. I can't understand why it did work when I didn't used the EventContext and why it does fail now. Anyone does know about an efficient way to pass the Enums from the select component on the first page to the EventContext to the second injected page? I know I could use a @Persist annotation, but it involves some details I would prefer avoiding. Some sample code would be great. Thanks to everyone - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- _ Joshua S. Martin CONFIDENTIALITY NOTE: This e-mail message, including any attachment(s), contains information that may be confidential, protected by the attorney client or other legal privileges, and or proprietary non public information. If you are not an intended recipient of this message or an authorized assistant to an intended recipient, please notify the sender by replying to this message and then delete it from your system. Use, dissemination, distribution, or reproduction of this message and or any of its attachments (if any) by unintended recipients is not authorized and may be unlawful. -- _ Joshua S. Martin CONFIDENTIALITY NOTE: This e-mail message, including any attachment(s), contains information that may be confidential, protected by the attorney client or other legal privileges, and or proprietary non public information. If you are not an intended recipient of this message or an authorized assistant to an intended recipient, please notify the sender by replying to this message and then delete it from your system. Use, dissemination, distribution, or reproduction of this message and or any of its attachments (if any) by unintended recipients is not authorized and may be unlawful.
RE: Newbie questiones
The more probable thing is that I am the dumb. When I tried before to do it, it was failing but maybe it was another thing and I got confused and thought that Enums couldn't be passed to another pages. I was thinking until this evening (I read something about it somewhere) that only primitive types, theirs wrappers and String could be passed and that you had to convert the Date, Calendar and Enum objects. By your answer, I guess I was wrong. Could you please confirm it to me? Which are the no-conversion-types and the another ones? From: josmar52...@gmail.com Date: Thu, 3 Sep 2009 17:45:31 -0400 Subject: Re: Newbie questiones To: users@tapestry.apache.org Maybe this is a dumb question, but why can't you just pass the Enum instead of converting to a String, then passing, the reconverting back to Enum? On Thu, Sep 3, 2009 at 5:17 PM, Joshua Martin josmar52...@gmail.com wrote: Are you trying to pass the value of a Select to another page? On Thu, Sep 3, 2009 at 5:14 PM, Madtyn mad...@gmail.com wrote: I'm experimenting and trying all kinds of things and I think the problem I have is when passing Enums to the EventContext. Although I do before the Enum - String conversion and then set the String value in the destination page and return as a String in the onPassivate, when I get the String value before converting it to Enum again, this makes something fail. I can't understand why it did work when I didn't used the EventContext and why it does fail now. Anyone does know about an efficient way to pass the Enums from the select component on the first page to the EventContext to the second injected page? I know I could use a @Persist annotation, but it involves some details I would prefer avoiding. Some sample code would be great. Thanks to everyone - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- _ Joshua S. Martin CONFIDENTIALITY NOTE: This e-mail message, including any attachment(s), contains information that may be confidential, protected by the attorney client or other legal privileges, and or proprietary non public information. If you are not an intended recipient of this message or an authorized assistant to an intended recipient, please notify the sender by replying to this message and then delete it from your system. Use, dissemination, distribution, or reproduction of this message and or any of its attachments (if any) by unintended recipients is not authorized and may be unlawful. -- _ Joshua S. Martin CONFIDENTIALITY NOTE: This e-mail message, including any attachment(s), contains information that may be confidential, protected by the attorney client or other legal privileges, and or proprietary non public information. If you are not an intended recipient of this message or an authorized assistant to an intended recipient, please notify the sender by replying to this message and then delete it from your system. Use, dissemination, distribution, or reproduction of this message and or any of its attachments (if any) by unintended recipients is not authorized and may be unlawful. _ Descárgate Internet Explorer 8 ¡Y gana gratis viajes con Spanair! http://www.vivelive.com/spanair
Good news about Tapestry 5 in Google App Engine
--- Mensagem encaminhada --- De: codesite-nore...@google.com Assunto: Issue 1277 in googleappengine: Add javax.xml.stream to whitelist Data: Thu, 03 Sep 2009 19:34:42 -0300 Updates: Status: Fixed Labels: Version-1.2.5 Comment #12 on issue 1277 by sly...@google.com: Add javax.xml.stream to whitelist http://code.google.com/p/googleappengine/issues/detail?id=1277 This has been fixed in the 1.2.5 release. http://code.google.com/p/googleappengine/wiki/SdkForJavaReleaseNotes Support for the Stax API, javax.xml.stream. You can now use both the JDK's Stax parser as well as third-party Stax libraries like Woodstox. Can anyone confirm that a vanilla Tapestry 5.1.0.5 works in GAE now? -- Thiago H. de Paula Figueiredo Independent Java consultant, developer, and instructor http://www.arsmachina.com.br/thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Substitution for Switch/Case/Block to embed components really dynamic ?
BeanEditor and BeanEditForm use blocks from different pages to edit properties. Its something similar to what you want to do. Ultimately, they get a block from a given page using this code (adapted from BeanBlockOverrideSourceImpl.toBlock()): Page page = pageCache.get(pageName); return page.getRootElement().getBlock(blockId); where pageCache is an instance of RequestPageCache. -- Thiago H. de Paula Figueiredo Independent Java consultant, developer, and instructor http://www.arsmachina.com.br/thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Reloading fails back to old version for nested components
Em Thu, 03 Sep 2009 06:27:04 -0300, Sebastian HennebrŸüder hennebrue...@laliluna.de escreveu: I have the following use case page A contains component B I change something in B and redeploy the template of B. Reloading works Then I change something in the page and redeploy A. Suddenly the old version of B appears again. Does anybody else experience this behaviour. I've never experienced something like that. -- Thiago H. de Paula Figueiredo Independent Java consultant, developer, and instructor http://www.arsmachina.com.br/thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: Marker for required fields on bean editor
I've finished something like that before. First create a mixin 'FieldDecorator', then need contribute to the BeanBlockOverrideSource. Here is the sample code: 1. @MixinAfter public class FieldDecorator { @InjectContainer private AbstractField field; @Inject private ComponentResources resources; void cleanupRender(MarkupWriter writer) { if (field.isRequired()) { writer.element(font, color, red); writer.writeRaw(nbsp;*nbsp;); writer.end(); } } 2. Contribution, override the default edit block in page PropertyEditBlocks.java. public static void contributeBeanBlockOverrideSource(ConfigurationBeanBlockContribution configuration) { configuration.add(new BeanBlockContribution(text, CustomEditBlocks, text, true)); } You need write your own CustomEditBlocks.java and CustomEditBlocks.tml to do something like PropertyEditBlocks.java and PropertyEditBlocks.tml, then just put the mixin 'FieldDecorator' there. DH http://www.gaonline.com.cn - Original Message - From: Juan E. Maya maya.j...@gmail.com To: Tapestry users users@tapestry.apache.org Sent: Friday, September 04, 2009 1:56 AM Subject: Re: Marker for required fields on bean editor Sorry Sebastian, i was not clear enough. I want to change the markup of the label when the field has a required validator. For example i want to add a CSS class required to the label of the required field. or i want to add a * next to the label. Thanks for ur answer :) On Thu, Sep 3, 2009 at 7:40 PM, Sebastian Hennebruederuse...@laliluna.de wrote: Juan E. Maya schrieb: Hi all! Is it possible to mark the required fields inside a beaneditor form as valid? I know i could override the field declaration and put the marker there but i would like to create something more generic. I was thinking that a Mixin may get the beaneditor's form to get all the components in the form, iterate over the validators and add the js or mark to the ones with a required validator but i am not sure how to accomplish this. Is it possible at all? Has anybody done such thing? - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org You are aware of @Validate? http://tapestry.apache.org/tapestry5/guide/validation.html -- Best Regards / Viele Grüße Sebastian Hennebrueder - Software Developer and Trainer for Hibernate / Java Persistence http://www.laliluna.de - 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: Good news about Tapestry 5 in Google App Engine
The ticket had been fixed.I had tested on GAE using 1.2.5 SDK. But when I write simple pagelink t:pagelink page=about about/t:pagelink ,some exception thrown. java.lang.VerifyError: (class: org/apache/tapestry5/internal/antlr/PropertyExpressionLexer, method: mRANGEOP signature: ()V) Stack size too large at org.apache.tapestry5.internal.services.PropertyConduitSourceImpl.parse(PropertyConduitSourceImpl.java:1229) at org.apache.tapestry5.internal.services.PropertyConduitSourceImpl.build(PropertyConduitSourceImpl.java:1124) at org.apache.tapestry5.internal.services.PropertyConduitSourceImpl.create(PropertyConduitSourceImpl.java:1080) Who can give me an idea about the exception. thanks. 2009/9/4 Thiago H. de Paula Figueiredo thiag...@gmail.com --- Mensagem encaminhada --- De: codesite-nore...@google.com Assunto: Issue 1277 in googleappengine: Add javax.xml.stream to whitelist Data: Thu, 03 Sep 2009 19:34:42 -0300 Updates: Status: Fixed Labels: Version-1.2.5 Comment #12 on issue 1277 by sly...@google.com: Add javax.xml.stream to whitelist http://code.google.com/p/googleappengine/issues/detail?id=1277 This has been fixed in the 1.2.5 release. http://code.google.com/p/googleappengine/wiki/SdkForJavaReleaseNotes Support for the Stax API, javax.xml.stream. You can now use both the JDK's Stax parser as well as third-party Stax libraries like Woodstox. Can anyone confirm that a vanilla Tapestry 5.1.0.5 works in GAE now? -- Thiago H. de Paula Figueiredo Independent Java consultant, developer, and instructor http://www.arsmachina.com.br/thiago - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org -- regards, Jun Tsai
Re: Contribute SymbolConstants.SUPPRESS_REDIRECT_FROM_ACTION_REQUESTS does not work
I found that I was wrong. I did not put the contribution right place. I did place it in servlet module, so in portlet the contribution is useless. I fixed by putting it to the portlet module, and now it runs properly. I've modified the source that I download from https://issues.apache.org/jira/browse/TAP5-78 and now I can run portlet with tapestry version 5.0.18 and 5.1.0.5. On Tue, Sep 1, 2009 at 8:18 AM, Xuan Tran Le lexuanttk...@gmail.com wrote: I did debug and found that AppModule is loaded and the contribution is called. It runs properly in servlet mode, but when run in portlet mode it doesn't. On Tue, Sep 1, 2009 at 5:29 AM, Howard Lewis Ship hls...@gmail.comwrote: The only explanation for this is that your AppModule is not being loaded; Tapestry sends debug output at startup to list modules that are loaded; that's the first step. For example, AppModule must be in the correct package for Tapestry to find it. The rules for all this are in the documentation.
Re: users Digest 3 Sep 2009 17:04:35 -0000 Issue 3798
On Sep 4, 2009, at 2:04 AM, users-digest-h...@tapestry.apache.org wrote: From: Howard Lewis Ship hls...@gmail.com Date: September 4, 2009 2:03:57 AM GMT+09:00 To: Tapestry users users@tapestry.apache.org Subject: Add yourself to the Tapestry Users Map I maintain a map of Google Map of Tapestry users: http://maps.google.com/maps/ms?ie=UTF8hl=enmsa=0msid=106662057515738259524.0004696f8216ba268b74az=3 It's fun an informative for me, and for others, to see where the Tapestry users are. For instance, I can see that Germany is a real hot-bed of Tapestry activity (a separate discussion would be why there as opposed to elsewhere?). Howard, here (in Japan) the adoption of technologies without native documentation is something that will never happen (yes, language is a great barrier for non eglish speak countries). Some years ago i was hired for a company just to wrap a middleware framework because the lack of docummentation in japanese (i was treated like a hero for the project manager, or like i was saving her job?). I was surprised when i came here and came to know the facts, project managers and the people who have decision roles (35 ~ 5x years old), will run like they are running from the devil when they have to use technologies that lacks docummentation in native language. Even Spring is outpassed here by another framework called Seasar (japanese framework) because language barriers. I know that there are sourceforge localized sites (english, japanese etc), what i don't understand is why, on these days there are no localized sites for apache technologies? They are accessed all over the world. I do believe that having the Tapestry site translated (as well as the awaited T5 book!) will help ease/boost Tapestry adoption. Regards, Akira.