Tapestry and Dojo and Tapestry 4.1
Hi, I am finishing up (and launching) a project using Tapestry 4.0.2 soon. I am planning to incorporate some Ajax goodness into the next phase of the project. I understand that Tapestry 4.1 incorporate the Dojo Toolkit. I am kind of new to Dojo. Anyone know any example on using Tapestry with Dojo ? and What is the significance of the integration (of Dojo in Tapestry) ? Thanks.
Re: Tapestry and Dojo and Tapestry 4.1
If you have not checked out the helloword example in tacos wiki, at http://tacoscomponents.jot.com/WikiHome you might like take a look at that. Shing --- KE Gan [EMAIL PROTECTED] wrote: Hi, I am finishing up (and launching) a project using Tapestry 4.0.2 soon. I am planning to incorporate some Ajax goodness into the next phase of the project. I understand that Tapestry 4.1 incorporate the Dojo Toolkit. I am kind of new to Dojo. Anyone know any example on using Tapestry with Dojo ? and What is the significance of the integration (of Dojo in Tapestry) ? Thanks. Home page : http://uk.geocities.com/matmsh/index.html ___ The all-new Yahoo! Mail goes wherever you go - free your email address from your Internet provider. http://uk.docs.yahoo.com/nowyoucan.html - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Checkbox required validation not working
Thanks Scott, I'll give your code a try. It might be worth sticking this up on the wiki as well. Thanks again, Adam On 24 Jun 2006, at 16:55, Maura Wilder wrote: no - Original Message - From: Jesse Kuhnert [EMAIL PROTECTED] To: Tapestry users users@tapestry.apache.org Sent: Saturday, June 24, 2006 11:05 AM Subject: Re: Checkbox required validation not working Looks good Scott! I just wanted to say that in the upcoming 4.1 release the required generated client side javascript handles any/all form input types and so will produce meaningful results universally when applied. On 6/24/06, Scott Russell [EMAIL PROTECTED] wrote: Hi Adam, The required validator generates client-side javascript that calls the Tapestry.require_field function. This is the code of that function: Tapestry.require_field = function(event, fieldId, message) { var field = this.find(fieldId); if (field.value.length == 0) event.invalid_field(field, message); } Problem is, for a Checkbox field, the value of the checkbox is either true or false, so is thus never empty. Hence it always passes the require_field test. I wrote my own RequiredCheckbox validator as follows: RequiredCheckbox.java public class RequiredCheckbox extends Required { public void validate(IFormComponent field, ValidationMessages messages, Object object) throws ValidatorException { super.validate(field, messages, object); if ((object == null) || (Boolean.class.isInstance(object) !((Boolean) object).booleanValue())) { String message = buildMessage(messages, field); throw new ValidatorException(message, ValidationConstraint.REQUIRED); } } private String buildMessage(ValidationMessages messages, IFormComponent field) { return messages.formatValidationMessage( getMessage(), ValidationStrings.REQUIRED_FIELD, new Object[] { field.getDisplayName() }); } public void renderContribution(IMarkupWriter writer, IRequestCycle cycle, FormComponentContributorContext context, IFormComponent field) { context.registerForFocus (ValidationConstants.REQUIRED_FIELD); context.includeClasspathScript (/com/myapp/validator/BooleanValidator.js); StringBuffer buffer = new StringBuffer(function(event) { Tapestry.require_boolean_field(event, '); buffer.append(field.getClientId()); buffer.append(', ); buffer.append(TapestryUtils.enquote(buildMessage(context, field))); buffer.append(); }); context.addSubmitHandler(buffer.toString()); } } BooleanValidator.js Tapestry.require_boolean_field = function(event, fieldId, message) { var field = this.find(fieldId); if (!field.checked) event.invalid_field(field, message); } Then you use it in your page file like this: Home.page component id=MustHaveCheckbox type=Checkbox binding name=value value=termsAccepted/ binding name=validators value=validators: $cbValidator/ /component bean name=cbValidator class=com.myapp.validator.RequiredCheckbox set name=message value=message:terms.required/ /bean Hope this helps. regards, Scott On Saturday 24 June 2006 22:22, Adam Henderson wrote: Hi All, I'm doing a simple form that has a checkbox which must be checked in order to submit the form: form jwcid=[EMAIL PROTECTED] clientValidationEnabled=ognl:true TC:input jwcid=[EMAIL PROTECTED] value=ognl:readTC validators=validators:required/ input jwcid=@Submit listener=listener:confirm type=submit name=Submit value=Confirm/ /form but if I can still submit my form without the checkbox being checked, so it looks like no validation is taking place. When the page renders the js generated at the base of the html is: script language=JavaScript type=text/javascript!-- Tapestry.register_form('myForm'); Tapestry.set_focus('tandcCheckbox'); // --/script I'm obviously missing a trick but I can't see what it is? Thanks, Adam. -- Jesse Kuhnert Tacos/Tapestry, team member/developer Open source based consulting work centered around dojo/tapestry/tacos/hivemind. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
friendly URL restart redirects to /app
I followed the instructions on friendly urls for T4, and it works just fine except for one thing. The exception page correctly links to '/restart.do', but when you follow the link it gets redirected to '/app' rather than '/' Is this a bug or didn't I configure it correctly? contribution configuration-id=tapestry.url.ServiceEncoders direct-service-encoder id=direct stateless-extension=direct stateful-extension=sdirect/ page-service-encoder id=page extension=htm service=page/ page-service-encoder id=external extension=external service=external/ asset-encoder id=asset path=/assets/ extension-encoder id=ext extension=do after=*/ /contribution - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: friendly URL restart redirects to /app
This is not directly related to your question but are your pages all named .html? I ask because I saw this: page-service-encoder id=page extension=htm service=page/ I've found a bug in T4 where your extension might be htm, but Tapestry expects all templates to be named .html. Mike Michael Grundvig Electrotank, Inc http://www.electrotank.com - Original Message - From: hv @ Fashion Content [EMAIL PROTECTED] To: users@tapestry.apache.org Sent: Sunday, June 25, 2006 8:16 AM Subject: friendly URL restart redirects to /app I followed the instructions on friendly urls for T4, and it works just fine except for one thing. The exception page correctly links to '/restart.do', but when you follow the link it gets redirected to '/app' rather than '/' Is this a bug or didn't I configure it correctly? contribution configuration-id=tapestry.url.ServiceEncoders direct-service-encoder id=direct stateless-extension=direct stateful-extension=sdirect/ page-service-encoder id=page extension=htm service=page/ page-service-encoder id=external extension=external service=external/ asset-encoder id=asset path=/assets/ extension-encoder id=ext extension=do after=*/ /contribution - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: About the new tapestry logo
I wish picking a new logo could be done a bit more logically along the lines a commercial product would be chosen, before actually voting on the change. Coming up with a good logo can take quite a while and rightly so. I see two possible approches: 1) Make a description of the values direction of the framework and the community in 2-4 sentences. or 2) Define the primary sort of people you want to appeal to. By this I don't mean to say that Tapestry doesn't have a broad appeal, but that tapestry has distinguishing features which appeals to certain groups more so than other frameworks do. Once you have a sort of consensus on that it is much easier to make suggestions on a logo and much easier to argue merrits of one or the other. The must be a couple of professional graphic artists out there that love Tapestry, and can come up with some top notch suggestions. To open it up: Tapestry allows you to make and maintain highly interactive web sites/applications with no or very little knowledge of Java/J2EE. ... I thing Web Designers with strong html/css skills but little server side skills are a group that Tapestry can appeal to more so than most other solutions. Henrik - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: friendly URL restart redirects to /app
All my templates are named .html, so I can actually access the template in parallel with the page service. I don't consider it a bug, and you can change it. ServiceEncoders deal with how URLs are interpreted not how files/resources are named. In Tap3 you would change it in the .application file, I guess you can now change it in hivemodule.xml as well if you want. http://tapestry.apache.org/tapestry4/tapestry/hivedocs/config/hivemind.FactoryDefaults.html In Tap4 there is a new PageSource thing, which I guess means that you can completely change how templates are handled if you like. Henrik Mike Grundvig [EMAIL PROTECTED] skrev i en meddelelse news:[EMAIL PROTECTED] This is not directly related to your question but are your pages all named .html? I ask because I saw this: page-service-encoder id=page extension=htm service=page/ I've found a bug in T4 where your extension might be htm, but Tapestry expects all templates to be named .html. Mike Michael Grundvig Electrotank, Inc http://www.electrotank.com - Original Message - From: hv @ Fashion Content [EMAIL PROTECTED] To: users@tapestry.apache.org Sent: Sunday, June 25, 2006 8:16 AM Subject: friendly URL restart redirects to /app I followed the instructions on friendly urls for T4, and it works just fine except for one thing. The exception page correctly links to '/restart.do', but when you follow the link it gets redirected to '/app' rather than '/' Is this a bug or didn't I configure it correctly? contribution configuration-id=tapestry.url.ServiceEncoders direct-service-encoder id=direct stateless-extension=direct stateful-extension=sdirect/ page-service-encoder id=page extension=htm service=page/ page-service-encoder id=external extension=external service=external/ asset-encoder id=asset path=/assets/ extension-encoder id=ext extension=do after=*/ /contribution - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: friendly URL restart redirects to /app
Short of re-writing some of the internal guts of Tapestry, templates have to end in the .HTML extension (or you have to rename all the internal Tapestry templates to your new extension). That's what I was referring to. I brought this up only so you wouldn't be caught by surprise like I was. Michael Grundvig Electrotank, Inc http://www.electrotank.com - Original Message - From: hv @ Fashion Content [EMAIL PROTECTED] To: users@tapestry.apache.org Sent: Sunday, June 25, 2006 10:07 AM Subject: Re: friendly URL restart redirects to /app All my templates are named .html, so I can actually access the template in parallel with the page service. I don't consider it a bug, and you can change it. ServiceEncoders deal with how URLs are interpreted not how files/resources are named. In Tap3 you would change it in the .application file, I guess you can now change it in hivemodule.xml as well if you want. http://tapestry.apache.org/tapestry4/tapestry/hivedocs/config/hivemind.FactoryDefaults.html In Tap4 there is a new PageSource thing, which I guess means that you can completely change how templates are handled if you like. Henrik Mike Grundvig [EMAIL PROTECTED] skrev i en meddelelse news:[EMAIL PROTECTED] This is not directly related to your question but are your pages all named .html? I ask because I saw this: page-service-encoder id=page extension=htm service=page/ I've found a bug in T4 where your extension might be htm, but Tapestry expects all templates to be named .html. Mike Michael Grundvig Electrotank, Inc http://www.electrotank.com - Original Message - From: hv @ Fashion Content [EMAIL PROTECTED] To: users@tapestry.apache.org Sent: Sunday, June 25, 2006 8:16 AM Subject: friendly URL restart redirects to /app I followed the instructions on friendly urls for T4, and it works just fine except for one thing. The exception page correctly links to '/restart.do', but when you follow the link it gets redirected to '/app' rather than '/' Is this a bug or didn't I configure it correctly? contribution configuration-id=tapestry.url.ServiceEncoders direct-service-encoder id=direct stateless-extension=direct stateful-extension=sdirect/ page-service-encoder id=page extension=htm service=page/ page-service-encoder id=external extension=external service=external/ asset-encoder id=asset path=/assets/ extension-encoder id=ext extension=do after=*/ /contribution - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: friendly URL restart redirects to /app
Would the following be fix the redirect? implementation service-id=tapestry.services.Restart invoke-factory service-id=hivemind.BuilderFactory model=singleton construct class=RestartService set-service property=request service-id=tapestry.globals.HttpServletRequest / set-service property=response service-id=tapestry.globals.HttpServletResponse / set-object property=servletPath value=literal:/ / set-object property=linkFactory value=infrastructure:linkFactory / /construct /invoke-factory /implementation Or contribution configuration-id=hivemind.FactoryDefaults default symbol=org.apache.tapestry.servlet-path value=// /contribution Or change Restart service to act like Home service Henrik hv @ Fashion Content [EMAIL PROTECTED] skrev i en meddelelse news:[EMAIL PROTECTED] I followed the instructions on friendly urls for T4, and it works just fine except for one thing. The exception page correctly links to '/restart.do', but when you follow the link it gets redirected to '/app' rather than '/' Is this a bug or didn't I configure it correctly? contribution configuration-id=tapestry.url.ServiceEncoders direct-service-encoder id=direct stateless-extension=direct stateful-extension=sdirect/ page-service-encoder id=page extension=htm service=page/ page-service-encoder id=external extension=external service=external/ asset-encoder id=asset path=/assets/ extension-encoder id=ext extension=do after=*/ /contribution - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: friendly URL restart redirects to /app
Thanks for the advice, but you are actually wrong. It is quite trivial to change the Tapestry defaults. The default you are talking about can be changed by a meta line in the webapp.application file or by a contribution in your applications hivemodule.xml I see on the dev list that Howard already replied :) Henrik Mike Grundvig [EMAIL PROTECTED] skrev i en meddelelse news:[EMAIL PROTECTED] Short of re-writing some of the internal guts of Tapestry, templates have to end in the .HTML extension (or you have to rename all the internal Tapestry templates to your new extension). That's what I was referring to. I brought this up only so you wouldn't be caught by surprise like I was. Michael Grundvig Electrotank, Inc http://www.electrotank.com - Original Message - From: hv @ Fashion Content [EMAIL PROTECTED] To: users@tapestry.apache.org Sent: Sunday, June 25, 2006 10:07 AM Subject: Re: friendly URL restart redirects to /app All my templates are named .html, so I can actually access the template in parallel with the page service. I don't consider it a bug, and you can change it. ServiceEncoders deal with how URLs are interpreted not how files/resources are named. In Tap3 you would change it in the .application file, I guess you can now change it in hivemodule.xml as well if you want. http://tapestry.apache.org/tapestry4/tapestry/hivedocs/config/hivemind.FactoryDefaults.html In Tap4 there is a new PageSource thing, which I guess means that you can completely change how templates are handled if you like. Henrik Mike Grundvig [EMAIL PROTECTED] skrev i en meddelelse news:[EMAIL PROTECTED] This is not directly related to your question but are your pages all named .html? I ask because I saw this: page-service-encoder id=page extension=htm service=page/ I've found a bug in T4 where your extension might be htm, but Tapestry expects all templates to be named .html. Mike Michael Grundvig Electrotank, Inc http://www.electrotank.com - Original Message - From: hv @ Fashion Content [EMAIL PROTECTED] To: users@tapestry.apache.org Sent: Sunday, June 25, 2006 8:16 AM Subject: friendly URL restart redirects to /app I followed the instructions on friendly urls for T4, and it works just fine except for one thing. The exception page correctly links to '/restart.do', but when you follow the link it gets redirected to '/app' rather than '/' Is this a bug or didn't I configure it correctly? contribution configuration-id=tapestry.url.ServiceEncoders direct-service-encoder id=direct stateless-extension=direct stateful-extension=sdirect/ page-service-encoder id=page extension=htm service=page/ page-service-encoder id=external extension=external service=external/ asset-encoder id=asset path=/assets/ extension-encoder id=ext extension=do after=*/ /contribution - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: friendly URL restart redirects to /app
Restart service clears the session and redirects to the Tapestry Servlet (which is usually /app) It's quite easy to create your own restart service and do other stuff... See http://svn.apache.org/repos/asf/tapestry/tapestry4/branches/4.0/framework/src/java/org/apache/tapestry/engine/RestartService.java From hv @ Fashion Content [EMAIL PROTECTED]: I followed the instructions on friendly urls for T4, and it works just fine except for one thing. The exception page correctly links to '/restart.do', but when you follow the link it gets redirected to '/app' rather than '/' Is this a bug or didn't I configure it correctly? contribution configuration-id=tapestry.url.ServiceEncoders direct-service-encoder id=direct stateless-extension=direct stateful-extension=sdirect/ page-service-encoder id=page extension=htm service=page/ page-service-encoder id=external extension=external service=external/ asset-encoder id=asset path=/assets/ extension-encoder id=ext extension=do after=*/ /contribution - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: friendly URL restart redirects to /app
Yes, Mr. Ship just posted that on the Dev forum. I'm very glad to be incorrect. This will save me a ton of time :) Michael Grundvig Electrotank, Inc http://www.electrotank.com - Original Message - From: hv @ Fashion Content [EMAIL PROTECTED] To: users@tapestry.apache.org Sent: Sunday, June 25, 2006 11:03 AM Subject: Re: friendly URL restart redirects to /app Thanks for the advice, but you are actually wrong. It is quite trivial to change the Tapestry defaults. The default you are talking about can be changed by a meta line in the webapp.application file or by a contribution in your applications hivemodule.xml I see on the dev list that Howard already replied :) Henrik Mike Grundvig [EMAIL PROTECTED] skrev i en meddelelse news:[EMAIL PROTECTED] Short of re-writing some of the internal guts of Tapestry, templates have to end in the .HTML extension (or you have to rename all the internal Tapestry templates to your new extension). That's what I was referring to. I brought this up only so you wouldn't be caught by surprise like I was. Michael Grundvig Electrotank, Inc http://www.electrotank.com - Original Message - From: hv @ Fashion Content [EMAIL PROTECTED] To: users@tapestry.apache.org Sent: Sunday, June 25, 2006 10:07 AM Subject: Re: friendly URL restart redirects to /app All my templates are named .html, so I can actually access the template in parallel with the page service. I don't consider it a bug, and you can change it. ServiceEncoders deal with how URLs are interpreted not how files/resources are named. In Tap3 you would change it in the .application file, I guess you can now change it in hivemodule.xml as well if you want. http://tapestry.apache.org/tapestry4/tapestry/hivedocs/config/hivemind.FactoryDefaults.html In Tap4 there is a new PageSource thing, which I guess means that you can completely change how templates are handled if you like. Henrik Mike Grundvig [EMAIL PROTECTED] skrev i en meddelelse news:[EMAIL PROTECTED] This is not directly related to your question but are your pages all named .html? I ask because I saw this: page-service-encoder id=page extension=htm service=page/ I've found a bug in T4 where your extension might be htm, but Tapestry expects all templates to be named .html. Mike Michael Grundvig Electrotank, Inc http://www.electrotank.com - Original Message - From: hv @ Fashion Content [EMAIL PROTECTED] To: users@tapestry.apache.org Sent: Sunday, June 25, 2006 8:16 AM Subject: friendly URL restart redirects to /app I followed the instructions on friendly urls for T4, and it works just fine except for one thing. The exception page correctly links to '/restart.do', but when you follow the link it gets redirected to '/app' rather than '/' Is this a bug or didn't I configure it correctly? contribution configuration-id=tapestry.url.ServiceEncoders direct-service-encoder id=direct stateless-extension=direct stateful-extension=sdirect/ page-service-encoder id=page extension=htm service=page/ page-service-encoder id=external extension=external service=external/ asset-encoder id=asset path=/assets/ extension-encoder id=ext extension=do after=*/ /contribution - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Tapestry leaks memory in IE and my workaround
Have you posted a JIRA bug report? Cliff Zhao [EMAIL PROTECTED] skrev i en meddelelse news:[EMAIL PROTECTED] Tapestry leaks memory in IE. I'm using Tap 4.0.2. I did some research and like to share it with you. The leaks may be more than I listed here as I did not use client side validation on forms. Tapestry form and DatePicker leak memory IE, here is what I did to remove the leaks. // the following code is to hack IE memory leaks. if (typeof Calendar==function) { var tap_calendar_create=Calendar.prototype.create; Calendar.prototype.create=function() { tap_calendar_create.call(this); dojo.event.browser.addClobberNodeAttrs (this._previousMonth,[onclick]); dojo.event.browser.addClobberNodeAttrs(this._nextMonth,[onclick]); dojo.event.browser.addClobberNodeAttrs (this._todayButton,[onclick]); dojo.event.browser.addClobberNodeAttrs (this._clearButton,[onclick]); dojo.event.browser.addClobberNodeAttrs (this._calDiv,[onselectstart,onkeydown,onmousewheel]); dojo.event.browser.addClobberNodeAttrs(this._table,[onclick]); dojo.event.browser.addClobberNodeAttrs (this._monthSelect,[onchange,onclick]); dojo.event.browser.addClobberNodeAttrs (this._yearSelect,[onchange]); return this._calDiv; }; } if (typeof Tapestry==object) { Tapestry.register_form = function(formId) { var form = this.find(formId); form.events = new FormEventManager(form); dojo.event.browser.addClobberNodeAttrs (form,[events,onsubmit,onreset]); }; } Best Regards, Cliff Zhao - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Tapestry leaks memory in IE and my workaround
It's not really relevant enough to warrent a JIRA issue. This leak would only happen on pages where you are doing XHR type requests...Tap4.1 doesn't use this method of adding events anymore. (I have provided a backwards compatible set of JS functions to mimick the function calls, but they all use dojo to do the actual event connections now.) In fact, there probably won't be any JS in the system that isn't replaced in the next release. Esp anything having to do with forms / validation. On 6/25/06, hv @ Fashion Content [EMAIL PROTECTED] wrote: Have you posted a JIRA bug report? Cliff Zhao [EMAIL PROTECTED] skrev i en meddelelse news:[EMAIL PROTECTED] Tapestry leaks memory in IE. I'm using Tap 4.0.2. I did some research and like to share it with you. The leaks may be more than I listed here as I did not use client side validation on forms. Tapestry form and DatePicker leak memory IE, here is what I did to remove the leaks. // the following code is to hack IE memory leaks. if (typeof Calendar==function) { var tap_calendar_create=Calendar.prototype.create; Calendar.prototype.create=function() { tap_calendar_create.call(this); dojo.event.browser.addClobberNodeAttrs (this._previousMonth,[onclick]); dojo.event.browser.addClobberNodeAttrs(this._nextMonth,[onclick]); dojo.event.browser.addClobberNodeAttrs (this._todayButton,[onclick]); dojo.event.browser.addClobberNodeAttrs (this._clearButton,[onclick]); dojo.event.browser.addClobberNodeAttrs (this._calDiv,[onselectstart,onkeydown,onmousewheel]); dojo.event.browser.addClobberNodeAttrs(this._table,[onclick]); dojo.event.browser.addClobberNodeAttrs (this._monthSelect,[onchange,onclick]); dojo.event.browser.addClobberNodeAttrs (this._yearSelect,[onchange]); return this._calDiv; }; } if (typeof Tapestry==object) { Tapestry.register_form = function(formId) { var form = this.find(formId); form.events = new FormEventManager(form); dojo.event.browser.addClobberNodeAttrs (form,[events,onsubmit,onreset]); }; } Best Regards, Cliff Zhao - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] -- Jesse Kuhnert Tacos/Tapestry, team member/developer Open source based consulting work centered around dojo/tapestry/tacos/hivemind.
Re: Checkbox required validation not working
Thanks Scott, I'll give your code a try. It might be worth sticking this up on the wiki as well. Thanks again, Adam On 24 Jun 2006, at 16:55, Maura Wilder wrote: no - Original Message - From: Jesse Kuhnert [EMAIL PROTECTED] To: Tapestry users users@tapestry.apache.org Sent: Saturday, June 24, 2006 11:05 AM Subject: Re: Checkbox required validation not working Looks good Scott! I just wanted to say that in the upcoming 4.1 release the required generated client side javascript handles any/all form input types and so will produce meaningful results universally when applied. On 6/24/06, Scott Russell [EMAIL PROTECTED] wrote: Hi Adam, The required validator generates client-side javascript that calls the Tapestry.require_field function. This is the code of that function: Tapestry.require_field = function(event, fieldId, message) { var field = this.find(fieldId); if (field.value.length == 0) event.invalid_field(field, message); } Problem is, for a Checkbox field, the value of the checkbox is either true or false, so is thus never empty. Hence it always passes the require_field test. I wrote my own RequiredCheckbox validator as follows: RequiredCheckbox.java public class RequiredCheckbox extends Required { public void validate(IFormComponent field, ValidationMessages messages, Object object) throws ValidatorException { super.validate(field, messages, object); if ((object == null) || (Boolean.class.isInstance(object) !((Boolean) object).booleanValue())) { String message = buildMessage(messages, field); throw new ValidatorException(message, ValidationConstraint.REQUIRED); } } private String buildMessage(ValidationMessages messages, IFormComponent field) { return messages.formatValidationMessage( getMessage(), ValidationStrings.REQUIRED_FIELD, new Object[] { field.getDisplayName() }); } public void renderContribution(IMarkupWriter writer, IRequestCycle cycle, FormComponentContributorContext context, IFormComponent field) { context.registerForFocus (ValidationConstants.REQUIRED_FIELD); context.includeClasspathScript (/com/myapp/validator/BooleanValidator.js); StringBuffer buffer = new StringBuffer(function(event) { Tapestry.require_boolean_field(event, '); buffer.append(field.getClientId()); buffer.append(', ); buffer.append(TapestryUtils.enquote(buildMessage(context, field))); buffer.append(); }); context.addSubmitHandler(buffer.toString()); } } BooleanValidator.js Tapestry.require_boolean_field = function(event, fieldId, message) { var field = this.find(fieldId); if (!field.checked) event.invalid_field(field, message); } Then you use it in your page file like this: Home.page component id=MustHaveCheckbox type=Checkbox binding name=value value=termsAccepted/ binding name=validators value=validators: $cbValidator/ /component bean name=cbValidator class=com.myapp.validator.RequiredCheckbox set name=message value=message:terms.required/ /bean Hope this helps. regards, Scott On Saturday 24 June 2006 22:22, Adam Henderson wrote: Hi All, I'm doing a simple form that has a checkbox which must be checked in order to submit the form: form jwcid=[EMAIL PROTECTED] clientValidationEnabled=ognl:true TC:input jwcid=[EMAIL PROTECTED] value=ognl:readTC validators=validators:required/ input jwcid=@Submit listener=listener:confirm type=submit name=Submit value=Confirm/ /form but if I can still submit my form without the checkbox being checked, so it looks like no validation is taking place. When the page renders the js generated at the base of the html is: script language=JavaScript type=text/javascript!-- Tapestry.register_form('myForm'); Tapestry.set_focus('tandcCheckbox'); // --/script I'm obviously missing a trick but I can't see what it is? Thanks, Adam. -- Jesse Kuhnert Tacos/Tapestry, team member/developer Open source based consulting work centered around dojo/tapestry/tacos/hivemind. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Form Object Weird Update Behavior
I have an object with properties id and name. I have a form that displays editable inputs for the object's name property. This page implements PageBeginRenderListener. I have the following set/get methods: @InitialValue(ognl:new com.foo.Bar()) public abstract Bar getBar(); public abstract void setBar(Bar bar); This form doubles as both a new creation form or edit existing form based on whether the bar.id is not null, as it will be null on new instantiation. In the case of edits, the object is set from a listing page using the setter above. In the page the TextField values are ognl:bar.name and ognl:bar.id. The form submits to the listener onCreateEditBar. Nothing special so far. When editing, I see in my debugger that when the form is first executed from the list page the bar property is set with both the id and the name attributes. The form displays both of these in their respective TextField components. When I submit the form, something weird happens. When I stop at a break point in onCreateEditBar, the id is set, but the name is null. Nowhere in any code I've written is the name getting set to null. However, it is definitely null. So, when it is persisted to the db, I get null names. This seems really weird. Why does the id remain, but the name get removed? Thanks - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Checkbox required validation not working
OK, I've implemeted Scotts code but I'm still not getting any validation. Reg.page component id=tcCheckbox type=Checkbox binding name=value value=readTC/ binding name=validators value=validators:$cbValidator/ /component bean name=cbValidator class=com.azudio.tapestry.validator.RequiredCheckbox set name=message value=literal:Terms Accepted/ /bean I've put some debugging statements into the RequiredCheckbox class but it seems that when the page with the required checkbox is rendered the 'renderContribution' method never gets called, therefore no javascript gets output. Also when if the checkbox is left unchecked and the form submitted the 'validate' method also does not get called, only if its checked does 'validate' get called. Thanks, Adam On 25 Jun 2006, at 13:27, Adam Henderson Azudio wrote: Thanks Scott, I'll give your code a try. It might be worth sticking this up on the wiki as well. Thanks again, Adam On 24 Jun 2006, at 16:55, Maura Wilder wrote: no - Original Message - From: Jesse Kuhnert [EMAIL PROTECTED] To: Tapestry users users@tapestry.apache.org Sent: Saturday, June 24, 2006 11:05 AM Subject: Re: Checkbox required validation not working Looks good Scott! I just wanted to say that in the upcoming 4.1 release the required generated client side javascript handles any/all form input types and so will produce meaningful results universally when applied. On 6/24/06, Scott Russell [EMAIL PROTECTED] wrote: Hi Adam, The required validator generates client-side javascript that calls the Tapestry.require_field function. This is the code of that function: Tapestry.require_field = function(event, fieldId, message) { var field = this.find(fieldId); if (field.value.length == 0) event.invalid_field(field, message); } Problem is, for a Checkbox field, the value of the checkbox is either true or false, so is thus never empty. Hence it always passes the require_field test. I wrote my own RequiredCheckbox validator as follows: RequiredCheckbox.java public class RequiredCheckbox extends Required { public void validate(IFormComponent field, ValidationMessages messages, Object object) throws ValidatorException { super.validate(field, messages, object); if ((object == null) || (Boolean.class.isInstance(object) !((Boolean) object).booleanValue())) { String message = buildMessage(messages, field); throw new ValidatorException(message, ValidationConstraint.REQUIRED); } } private String buildMessage(ValidationMessages messages, IFormComponent field) { return messages.formatValidationMessage( getMessage(), ValidationStrings.REQUIRED_FIELD, new Object[] { field.getDisplayName() }); } public void renderContribution(IMarkupWriter writer, IRequestCycle cycle, FormComponentContributorContext context, IFormComponent field) { context.registerForFocus (ValidationConstants.REQUIRED_FIELD); context.includeClasspathScript (/com/myapp/validator/BooleanValidator.js); StringBuffer buffer = new StringBuffer(function(event) { Tapestry.require_boolean_field(event, '); buffer.append(field.getClientId()); buffer.append(', ); buffer.append(TapestryUtils.enquote(buildMessage(context, field))); buffer.append(); }); context.addSubmitHandler(buffer.toString()); } } BooleanValidator.js Tapestry.require_boolean_field = function(event, fieldId, message) { var field = this.find(fieldId); if (!field.checked) event.invalid_field(field, message); } Then you use it in your page file like this: Home.page component id=MustHaveCheckbox type=Checkbox binding name=value value=termsAccepted/ binding name=validators value=validators: $cbValidator/ /component bean name=cbValidator class=com.myapp.validator.RequiredCheckbox set name=message value=message:terms.required/ /bean Hope this helps. regards, Scott On Saturday 24 June 2006 22:22, Adam Henderson wrote: Hi All, I'm doing a simple form that has a checkbox which must be checked in order to submit the form: form jwcid=[EMAIL PROTECTED] clientValidationEnabled=ognl:true TC:input jwcid=[EMAIL PROTECTED] value=ognl:readTC validators=validators:required/ input jwcid=@Submit listener=listener:confirm type=submit name=Submit value=Confirm/ /form but if I can still submit my form without the checkbox being checked, so it looks like no validation is taking place. When the page renders the js generated at the base of the html is: script language=JavaScript type=text/javascript!-- Tapestry.register_form('myForm'); Tapestry.set_focus('tandcCheckbox'); // --/script I'm obviously missing a trick but I
how to inject PageService
I need to redirecto to a Page in LandingService, so I create a link using PageService. My system seems to go completely belly up when I define this. Is it the wrong way to get a page service link ? Thanks, Henrik service-point id=LandingService interface=org.apache.tapestry.engine.IEngineService invoke-factory construct class=engine.LandingService set-object property=responseRenderer value=infrastructure:responseRenderer/ set-object property=linkFactory value=infrastructure:linkFactory/ set-service property=request service-id=tapestry.globals.HttpServletRequest/ set-service property=response service-id=tapestry.globals.HttpServletResponse/ set-object property=pageService value=service:tapestry.services.Page/ set-object property=homePageName value=app-property:org.apache.tapestry.home-page/ set-object property=notFoundPageName value=app-property:org.apache.tapestry.notfound-page/ set-object property=market value=spring:personal.Market/ set-service property=identity service-id=Identity/ /construct /invoke-factory /service-point - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: how to inject PageService
disregard. It actually worked as long as I declared the setPageService with an IEngineService parameter. hv @ Fashion Content [EMAIL PROTECTED] skrev i en meddelelse news:[EMAIL PROTECTED] I need to redirecto to a Page in LandingService, so I create a link using PageService. My system seems to go completely belly up when I define this. Is it the wrong way to get a page service link ? Thanks, Henrik service-point id=LandingService interface=org.apache.tapestry.engine.IEngineService invoke-factory construct class=engine.LandingService set-object property=responseRenderer value=infrastructure:responseRenderer/ set-object property=linkFactory value=infrastructure:linkFactory/ set-service property=request service-id=tapestry.globals.HttpServletRequest/ set-service property=response service-id=tapestry.globals.HttpServletResponse/ set-object property=pageService value=service:tapestry.services.Page/ set-object property=homePageName value=app-property:org.apache.tapestry.home-page/ set-object property=notFoundPageName value=app-property:org.apache.tapestry.notfound-page/ set-object property=market value=spring:personal.Market/ set-service property=identity service-id=Identity/ /construct /invoke-factory /service-point - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Tapestry 3 to 4.1 to 5
Duh! Yes, as you guys guessed, I meant Hivemind not Hibernate. I think I need to hibernate a little more and get my mind back ... Thanks for your input ... - Original Message - From: kranga [EMAIL PROTECTED] To: Tapestry users users@tapestry.apache.org Sent: Saturday, June 24, 2006 8:05 PM Subject: Tapestry 3 to 4.1 to 5 We have a very large financial services applicaiton built with Tapestry 3 and it meets all the requirements for the project. But in looking ahead, I am trying to get some data to guide technology decisions for the project. My questions are: - Hibernate is used extensively in 4.x and though the principal is that you don't need to worry about Hibernate, the emails on this list make it look like a lot of deviations from defaults require Hibernate. Does anyone know if Hibernate is used outside of Tapestry? Specifically how is its user-base size and popularity when compared with Spring? - I've heard that 5 is not going to be backward compatible with 3. So that would give me absolutely no reason to upgrade to 4.x anytime soon. Is the 4.x to 5 incompatibility true? If so, it also seems like Tapestry is negatively skewed from a business perspective - high barrier to adopt the framework (the learning curve is higher and frankly it is almost impossible to find anyone in the market with Tapestry experience) but it provides a low barrier to exit - if versions are not going to be compatible and require significant effort, then why not evalulate other frameworks out there? - Anyone have experience comparing this with Echo 2? The echo 2 demo on their website does look impressive. Your thoughts are appreciated... KR - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Form Object Weird Update Behavior
BTW, this also happens for new Bar creation. Both id (expected) and name (unexpected) are null. On 6/25/06, Todd Orr [EMAIL PROTECTED] wrote: I have an object with properties id and name. I have a form that displays editable inputs for the object's name property. This page implements PageBeginRenderListener. I have the following set/get methods: @InitialValue(ognl:new com.foo.Bar()) public abstract Bar getBar(); public abstract void setBar(Bar bar); This form doubles as both a new creation form or edit existing form based on whether the bar.id is not null, as it will be null on new instantiation. In the case of edits, the object is set from a listing page using the setter above. In the page the TextField values are ognl:bar.name and ognl:bar.id. The form submits to the listener onCreateEditBar. Nothing special so far. When editing, I see in my debugger that when the form is first executed from the list page the bar property is set with both the id and the name attributes. The form displays both of these in their respective TextField components. When I submit the form, something weird happens. When I stop at a break point in onCreateEditBar, the id is set, but the name is null. Nowhere in any code I've written is the name getting set to null. However, it is definitely null. So, when it is persisted to the db, I get null names. This seems really weird. Why does the id remain, but the name get removed? Thanks - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
AdobeLite for viewing reports
hi all, i have integrated jasper reports within my tapestry web app. for viewing pdf docs i am using the adobe acrobat viewer. now the problem is that adobe is taking up huge amounts of memory on my machine and as a result my tapestry web app becomes un-responsive. as it is java and tomcat take up huge amounts of memory and with adobe my machine is just grinding to a halt and frequently crashing. has somebody integrated a web app with a pdf viewer and do you have the same problems. does anybody know of an alternative pdf viewer (need to use it within my web app though so it should have an ie plugin). i really want to have pdf reports within my tapestry web app. all help appreciated. thanks. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Form Object Weird Update Behavior
To add to the confusion, there is a TextArea called description that has an analog in the Bar object called description. It is a String just like id and name, however it does get set on form submission. I think this is a bug. Has anyone experienced something as strange? On 6/25/06, Todd Orr [EMAIL PROTECTED] wrote: BTW, this also happens for new Bar creation. Both id (expected) and name (unexpected) are null. On 6/25/06, Todd Orr [EMAIL PROTECTED] wrote: I have an object with properties id and name. I have a form that displays editable inputs for the object's name property. This page implements PageBeginRenderListener. I have the following set/get methods: @InitialValue(ognl:new com.foo.Bar()) public abstract Bar getBar(); public abstract void setBar(Bar bar); This form doubles as both a new creation form or edit existing form based on whether the bar.id is not null, as it will be null on new instantiation. In the case of edits, the object is set from a listing page using the setter above. In the page the TextField values are ognl:bar.name and ognl:bar.id. The form submits to the listener onCreateEditBar. Nothing special so far. When editing, I see in my debugger that when the form is first executed from the list page the bar property is set with both the id and the name attributes. The form displays both of these in their respective TextField components. When I submit the form, something weird happens. When I stop at a break point in onCreateEditBar, the id is set, but the name is null. Nowhere in any code I've written is the name getting set to null. However, it is definitely null. So, when it is persisted to the db, I get null names. This seems really weird. Why does the id remain, but the name get removed? Thanks - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Form Object Weird Update Behavior
Hi Todd, It is really strange.. maybe you can give your source so we all can take a look at it.. Gunna Todd Orr [EMAIL PROTECTED] wrote: To add to the confusion, there is a TextArea called description that has an analog in the Bar object called description. It is a String just like id and name, however it does get set on form submission. I think this is a bug. Has anyone experienced something as strange? On 6/25/06, Todd Orr wrote: BTW, this also happens for new Bar creation. Both id (expected) and name (unexpected) are null. On 6/25/06, Todd Orr wrote: I have an object with properties id and name. I have a form that displays editable inputs for the object's name property. This page implements PageBeginRenderListener. I have the following set/get methods: @InitialValue(ognl:new com.foo.Bar()) public abstract Bar getBar(); public abstract void setBar(Bar bar); This form doubles as both a new creation form or edit existing form based on whether the bar.id is not null, as it will be null on new instantiation. In the case of edits, the object is set from a listing page using the setter above. In the page the TextField values are ognl:bar.name and ognl:bar.id. The form submits to the listener onCreateEditBar. Nothing special so far. When editing, I see in my debugger that when the form is first executed from the list page the bar property is set with both the id and the name attributes. The form displays both of these in their respective TextField components. When I submit the form, something weird happens. When I stop at a break point in onCreateEditBar, the id is set, but the name is null. Nowhere in any code I've written is the name getting set to null. However, it is definitely null. So, when it is persisted to the db, I get null names. This seems really weird. Why does the id remain, but the name get removed? Thanks - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] - Yahoo! Sports Fantasy Football 06 - Go with the leader. Start your league today!
Re: About the new tapestry logo
We need redesign another one? a much better one? A good logo is that the most of tapestry's user like. IMO. ?? Sun, 25 Jun 2006 14:45:20 +0800??liigo [EMAIL PROTECTED] : All informations was from tapestry's users' mailing list: I do not like the new tapestry logo: http://www.nabble.com/I-do-not-like-the-new-tapestry-logo-t1619951.html#a4389501 Re: new logo for Tapestry (just my opinion and my idea pic, don't mad OK): http://www.nabble.com/Re%3A-new-logo-for-Tapestry-%28just-my-opinion-and-my-idea-pic%2C-don%27t-mad-OK%29-t1634451.html#a4426683 All proposed logos so far: http://www.nabble.com/All-proposed-logos-so-far-t1646389.html#a4459317 Comes From: http://www.nabble.com/Jakarta-Tapestry-f302.html http://www.nabble.com/forum/Search.jtp?forum=302local=yquery=logo - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]