Re: T5: built-in numeric validator
The Tapestry NumericValidator seems to rely on whether Double.valueOf(String) will throw an exception, which it does for '1k'. How are you configuring and using your validator? On Tue, Mar 29, 2011 at 5:19 PM, Adam Zimowski zimowsk...@gmail.com wrote: It is server side. Looks like if input starts with a digit, Tapestry is happy :) Adam On Tue, Mar 29, 2011 at 5:05 PM, Howard Lewis Ship hls...@gmail.com wrote: Seems like a bug to me! Surprising, though. Is this server-side or client-side validation? On Tue, Mar 29, 2011 at 2:49 PM, Adam Zimowski zimowsk...@gmail.com wrote: For numeric fields, Tapestry validates correctly non-numeric input. However, input such as: 1k 1\ etc.. passes the validation. Am I missing something? Adam - 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! (971) 678-5210 http://howardlewisship.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: T5: built-in numeric validator
My client side validation is disabled. This happens on my shopping cart page where I have multiple forms (inside a loop) with indexed trackers ( MapInteger, ValidationTracker. You can find complete code for the ShoppingCart page which exhibits this behavior in another thread which I posted recently: T5: form validation with pre-existing errors The actual numeric field which exhibits this is defined in the template as: t:textfield t:id=quantity t:context=index label=prop:quantityLabel validate=required size=2/ @Component(parameters = {tracker=tracker}) private Form cartForm; @Persist(PersistenceConstants.FLASH) private MapInteger, ValidationTracker indexedTrackers; public ValidationTracker getTracker() { if(indexedTrackers == null) return new ValidationTrackerImpl(); return indexedTrackers.get(index); } public void setTracker(ValidationTracker aTracker) { if(indexedTrackers == null) { if(log.isTraceEnabled()) log.trace(crating indexed trackers map); indexedTrackers = new HashMapInteger, ValidationTracker(); } if(log.isTraceEnabled()) { log.trace(setting tracker for index: + index); } indexedTrackers.put(index, aTracker); } In addition, this field carries a mixin: @Component(id=ID_QUANTITY_FIELD, parameters ={AttachError.message=fieldError}) @MixinClasses(value=AttachError.class) private TextField quantityField; @MixinAfter public class AttachError { @Parameter(required = true, allowNull = true) private String message; @Environmental private ValidationTracker tracker; @InjectContainer private Field field; void setupRender() { if (message != null) { tracker.recordError(field, message); } } } public String getFieldError() { String error = null; ValidationTracker tracker = getTracker(); if(tracker != null tracker.getError(quantityField) != null) { return null; } CartItemBean cib = findCartItem(cartDisplayItem.getLineNumber()); // look up error in CartItemBean and if found return it, or return null; return error; } Let me know, perhaps I am doing something wrong.. Adam On Thu, Mar 31, 2011 at 9:03 AM, Chris Norris thechrisproject.li...@gmail.com wrote: The Tapestry NumericValidator seems to rely on whether Double.valueOf(String) will throw an exception, which it does for '1k'. How are you configuring and using your validator? On Tue, Mar 29, 2011 at 5:19 PM, Adam Zimowski zimowsk...@gmail.com wrote: It is server side. Looks like if input starts with a digit, Tapestry is happy :) Adam On Tue, Mar 29, 2011 at 5:05 PM, Howard Lewis Ship hls...@gmail.com wrote: Seems like a bug to me! Surprising, though. Is this server-side or client-side validation? On Tue, Mar 29, 2011 at 2:49 PM, Adam Zimowski zimowsk...@gmail.com wrote: For numeric fields, Tapestry validates correctly non-numeric input. However, input such as: 1k 1\ etc.. passes the validation. Am I missing something? Adam - 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! (971) 678-5210 http://howardlewisship.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - 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: T5: built-in numeric validator
Sorry, I was completely wrong. I was looking at a NumericValidator that we wrote, not a Tapestry one. On Thu, Mar 31, 2011 at 9:43 AM, Adam Zimowski zimowsk...@gmail.com wrote: My client side validation is disabled. This happens on my shopping cart page where I have multiple forms (inside a loop) with indexed trackers ( MapInteger, ValidationTracker. You can find complete code for the ShoppingCart page which exhibits this behavior in another thread which I posted recently: T5: form validation with pre-existing errors The actual numeric field which exhibits this is defined in the template as: t:textfield t:id=quantity t:context=index label=prop:quantityLabel validate=required size=2/ @Component(parameters = {tracker=tracker}) private Form cartForm; @Persist(PersistenceConstants.FLASH) private MapInteger, ValidationTracker indexedTrackers; public ValidationTracker getTracker() { if(indexedTrackers == null) return new ValidationTrackerImpl(); return indexedTrackers.get(index); } public void setTracker(ValidationTracker aTracker) { if(indexedTrackers == null) { if(log.isTraceEnabled()) log.trace(crating indexed trackers map); indexedTrackers = new HashMapInteger, ValidationTracker(); } if(log.isTraceEnabled()) { log.trace(setting tracker for index: + index); } indexedTrackers.put(index, aTracker); } In addition, this field carries a mixin: @Component(id=ID_QUANTITY_FIELD, parameters ={AttachError.message=fieldError}) @MixinClasses(value=AttachError.class) private TextField quantityField; @MixinAfter public class AttachError { @Parameter(required = true, allowNull = true) private String message; @Environmental private ValidationTracker tracker; @InjectContainer private Field field; void setupRender() { if (message != null) { tracker.recordError(field, message); } } } public String getFieldError() { String error = null; ValidationTracker tracker = getTracker(); if(tracker != null tracker.getError(quantityField) != null) { return null; } CartItemBean cib = findCartItem(cartDisplayItem.getLineNumber()); // look up error in CartItemBean and if found return it, or return null; return error; } Let me know, perhaps I am doing something wrong.. Adam On Thu, Mar 31, 2011 at 9:03 AM, Chris Norris thechrisproject.li...@gmail.com wrote: The Tapestry NumericValidator seems to rely on whether Double.valueOf(String) will throw an exception, which it does for '1k'. How are you configuring and using your validator? On Tue, Mar 29, 2011 at 5:19 PM, Adam Zimowski zimowsk...@gmail.com wrote: It is server side. Looks like if input starts with a digit, Tapestry is happy :) Adam On Tue, Mar 29, 2011 at 5:05 PM, Howard Lewis Ship hls...@gmail.com wrote: Seems like a bug to me! Surprising, though. Is this server-side or client-side validation? On Tue, Mar 29, 2011 at 2:49 PM, Adam Zimowski zimowsk...@gmail.com wrote: For numeric fields, Tapestry validates correctly non-numeric input. However, input such as: 1k 1\ etc.. passes the validation. Am I missing something? Adam - 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! (971) 678-5210 http://howardlewisship.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - 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 - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: T5: built-in numeric validator
No problem. Howard mentioned this may be a Tapestry bug. I'm in no immediate rush as my project isn't going live until next year, so hopefully by then it gets fixed. Adam On Thu, Mar 31, 2011 at 10:51 AM, Chris Norris thechrisproject.li...@gmail.com wrote: Sorry, I was completely wrong. I was looking at a NumericValidator that we wrote, not a Tapestry one. On Thu, Mar 31, 2011 at 9:43 AM, Adam Zimowski zimowsk...@gmail.com wrote: My client side validation is disabled. This happens on my shopping cart page where I have multiple forms (inside a loop) with indexed trackers ( MapInteger, ValidationTracker. You can find complete code for the ShoppingCart page which exhibits this behavior in another thread which I posted recently: T5: form validation with pre-existing errors The actual numeric field which exhibits this is defined in the template as: t:textfield t:id=quantity t:context=index label=prop:quantityLabel validate=required size=2/ @Component(parameters = {tracker=tracker}) private Form cartForm; @Persist(PersistenceConstants.FLASH) private MapInteger, ValidationTracker indexedTrackers; public ValidationTracker getTracker() { if(indexedTrackers == null) return new ValidationTrackerImpl(); return indexedTrackers.get(index); } public void setTracker(ValidationTracker aTracker) { if(indexedTrackers == null) { if(log.isTraceEnabled()) log.trace(crating indexed trackers map); indexedTrackers = new HashMapInteger, ValidationTracker(); } if(log.isTraceEnabled()) { log.trace(setting tracker for index: + index); } indexedTrackers.put(index, aTracker); } In addition, this field carries a mixin: @Component(id=ID_QUANTITY_FIELD, parameters ={AttachError.message=fieldError}) @MixinClasses(value=AttachError.class) private TextField quantityField; @MixinAfter public class AttachError { @Parameter(required = true, allowNull = true) private String message; @Environmental private ValidationTracker tracker; @InjectContainer private Field field; void setupRender() { if (message != null) { tracker.recordError(field, message); } } } public String getFieldError() { String error = null; ValidationTracker tracker = getTracker(); if(tracker != null tracker.getError(quantityField) != null) { return null; } CartItemBean cib = findCartItem(cartDisplayItem.getLineNumber()); // look up error in CartItemBean and if found return it, or return null; return error; } Let me know, perhaps I am doing something wrong.. Adam On Thu, Mar 31, 2011 at 9:03 AM, Chris Norris thechrisproject.li...@gmail.com wrote: The Tapestry NumericValidator seems to rely on whether Double.valueOf(String) will throw an exception, which it does for '1k'. How are you configuring and using your validator? On Tue, Mar 29, 2011 at 5:19 PM, Adam Zimowski zimowsk...@gmail.com wrote: It is server side. Looks like if input starts with a digit, Tapestry is happy :) Adam On Tue, Mar 29, 2011 at 5:05 PM, Howard Lewis Ship hls...@gmail.com wrote: Seems like a bug to me! Surprising, though. Is this server-side or client-side validation? On Tue, Mar 29, 2011 at 2:49 PM, Adam Zimowski zimowsk...@gmail.com wrote: For numeric fields, Tapestry validates correctly non-numeric input. However, input such as: 1k 1\ etc.. passes the validation. Am I missing something? Adam - 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! (971) 678-5210 http://howardlewisship.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - 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
Re: T5: built-in numeric validator
Well perhaps you can teach me a few things. I'm trying to figure out by what mechanism tapestry would be validating this. We generally specify our custom NumericValidator on numeric fields. Is there some sort of automatic validation that can occur? I don't see much mention of it on this page: http://tapestry.apache.org/input-validation.html On Thu, Mar 31, 2011 at 10:54 AM, Adam Zimowski zimowsk...@gmail.com wrote: No problem. Howard mentioned this may be a Tapestry bug. I'm in no immediate rush as my project isn't going live until next year, so hopefully by then it gets fixed. Adam On Thu, Mar 31, 2011 at 10:51 AM, Chris Norris thechrisproject.li...@gmail.com wrote: Sorry, I was completely wrong. I was looking at a NumericValidator that we wrote, not a Tapestry one. On Thu, Mar 31, 2011 at 9:43 AM, Adam Zimowski zimowsk...@gmail.com wrote: My client side validation is disabled. This happens on my shopping cart page where I have multiple forms (inside a loop) with indexed trackers ( MapInteger, ValidationTracker. You can find complete code for the ShoppingCart page which exhibits this behavior in another thread which I posted recently: T5: form validation with pre-existing errors The actual numeric field which exhibits this is defined in the template as: t:textfield t:id=quantity t:context=index label=prop:quantityLabel validate=required size=2/ @Component(parameters = {tracker=tracker}) private Form cartForm; @Persist(PersistenceConstants.FLASH) private MapInteger, ValidationTracker indexedTrackers; public ValidationTracker getTracker() { if(indexedTrackers == null) return new ValidationTrackerImpl(); return indexedTrackers.get(index); } public void setTracker(ValidationTracker aTracker) { if(indexedTrackers == null) { if(log.isTraceEnabled()) log.trace(crating indexed trackers map); indexedTrackers = new HashMapInteger, ValidationTracker(); } if(log.isTraceEnabled()) { log.trace(setting tracker for index: + index); } indexedTrackers.put(index, aTracker); } In addition, this field carries a mixin: @Component(id=ID_QUANTITY_FIELD, parameters ={AttachError.message=fieldError}) @MixinClasses(value=AttachError.class) private TextField quantityField; @MixinAfter public class AttachError { @Parameter(required = true, allowNull = true) private String message; @Environmental private ValidationTracker tracker; @InjectContainer private Field field; void setupRender() { if (message != null) { tracker.recordError(field, message); } } } public String getFieldError() { String error = null; ValidationTracker tracker = getTracker(); if(tracker != null tracker.getError(quantityField) != null) { return null; } CartItemBean cib = findCartItem(cartDisplayItem.getLineNumber()); // look up error in CartItemBean and if found return it, or return null; return error; } Let me know, perhaps I am doing something wrong.. Adam On Thu, Mar 31, 2011 at 9:03 AM, Chris Norris thechrisproject.li...@gmail.com wrote: The Tapestry NumericValidator seems to rely on whether Double.valueOf(String) will throw an exception, which it does for '1k'. How are you configuring and using your validator? On Tue, Mar 29, 2011 at 5:19 PM, Adam Zimowski zimowsk...@gmail.com wrote: It is server side. Looks like if input starts with a digit, Tapestry is happy :) Adam On Tue, Mar 29, 2011 at 5:05 PM, Howard Lewis Ship hls...@gmail.com wrote: Seems like a bug to me! Surprising, though. Is this server-side or client-side validation? On Tue, Mar 29, 2011 at 2:49 PM, Adam Zimowski zimowsk...@gmail.com wrote: For numeric fields, Tapestry validates correctly non-numeric input. However, input such as: 1k 1\ etc.. passes the validation. Am I missing something? Adam - 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! (971) 678-5210 http://howardlewisship.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail:
Re: T5: built-in numeric validator
:) I don't think I'm in position to teach Tapestry to others, I'm still learning myself But, using Eclipse I looked at class hierarchy for: org.apache.tapestry5.AbstractValidator and see that Tapestry provides only the following out of the box: Email, Max, MaxLength, Min, MinLength, None, Regexp and Required So, just by guessing, I'd venture to say that Tapestry uses Regexp validator to test if numeric field contains indeed a numeric value. I'd also suspect that if there is a bug, it's probably in the regular expression passed to Regexp validator on numeric field test, not the validator itself. Again, I'm still learning myself, so somebody that actually knows for sure would have to confirm, but that's be my guess. Adam On Thu, Mar 31, 2011 at 10:59 AM, Chris Norris thechrisproject.li...@gmail.com wrote: Well perhaps you can teach me a few things. I'm trying to figure out by what mechanism tapestry would be validating this. We generally specify our custom NumericValidator on numeric fields. Is there some sort of automatic validation that can occur? I don't see much mention of it on this page: http://tapestry.apache.org/input-validation.html On Thu, Mar 31, 2011 at 10:54 AM, Adam Zimowski zimowsk...@gmail.com wrote: No problem. Howard mentioned this may be a Tapestry bug. I'm in no immediate rush as my project isn't going live until next year, so hopefully by then it gets fixed. Adam On Thu, Mar 31, 2011 at 10:51 AM, Chris Norris thechrisproject.li...@gmail.com wrote: Sorry, I was completely wrong. I was looking at a NumericValidator that we wrote, not a Tapestry one. On Thu, Mar 31, 2011 at 9:43 AM, Adam Zimowski zimowsk...@gmail.com wrote: My client side validation is disabled. This happens on my shopping cart page where I have multiple forms (inside a loop) with indexed trackers ( MapInteger, ValidationTracker. You can find complete code for the ShoppingCart page which exhibits this behavior in another thread which I posted recently: T5: form validation with pre-existing errors The actual numeric field which exhibits this is defined in the template as: t:textfield t:id=quantity t:context=index label=prop:quantityLabel validate=required size=2/ @Component(parameters = {tracker=tracker}) private Form cartForm; @Persist(PersistenceConstants.FLASH) private MapInteger, ValidationTracker indexedTrackers; public ValidationTracker getTracker() { if(indexedTrackers == null) return new ValidationTrackerImpl(); return indexedTrackers.get(index); } public void setTracker(ValidationTracker aTracker) { if(indexedTrackers == null) { if(log.isTraceEnabled()) log.trace(crating indexed trackers map); indexedTrackers = new HashMapInteger, ValidationTracker(); } if(log.isTraceEnabled()) { log.trace(setting tracker for index: + index); } indexedTrackers.put(index, aTracker); } In addition, this field carries a mixin: @Component(id=ID_QUANTITY_FIELD, parameters ={AttachError.message=fieldError}) @MixinClasses(value=AttachError.class) private TextField quantityField; @MixinAfter public class AttachError { @Parameter(required = true, allowNull = true) private String message; @Environmental private ValidationTracker tracker; @InjectContainer private Field field; void setupRender() { if (message != null) { tracker.recordError(field, message); } } } public String getFieldError() { String error = null; ValidationTracker tracker = getTracker(); if(tracker != null tracker.getError(quantityField) != null) { return null; } CartItemBean cib = findCartItem(cartDisplayItem.getLineNumber()); // look up error in CartItemBean and if found return it, or return null; return error; } Let me know, perhaps I am doing something wrong.. Adam On Thu, Mar 31, 2011 at 9:03 AM, Chris Norris thechrisproject.li...@gmail.com wrote: The Tapestry NumericValidator seems to rely on whether Double.valueOf(String) will throw an exception, which it does for '1k'. How are you configuring and using your validator? On Tue, Mar 29, 2011 at 5:19 PM, Adam Zimowski zimowsk...@gmail.com wrote: It is server side. Looks like if input starts with a digit, Tapestry is happy :) Adam On Tue, Mar 29, 2011 at 5:05 PM, Howard Lewis Ship hls...@gmail.com wrote: Seems like a bug to me! Surprising, though. Is this server-side or client-side validation? On Tue, Mar 29, 2011 at 2:49 PM, Adam Zimowski zimowsk...@gmail.com wrote: For numeric fields, Tapestry validates correctly non-numeric input. However, input such as: 1k 1\
Re: T5: built-in numeric validator
Now I'm all curious. After looking through FieldValidatorDefaultSource, FieldValidatorSource and the ValidationContstraintGenerator implementations, I'm not sure how a numeric field would automatically be validated as such. The Regexp validator is only reference in TapestryModule, which allows you to explicitly use it, but you're talking about something automatic. I'm wondering what lead you to believe it would be automatically generated in the first place? Though Howard's suggestion that it isn't working right seems to imply that it should be doing that... On Thu, Mar 31, 2011 at 11:04 AM, Adam Zimowski zimowsk...@gmail.com wrote: :) I don't think I'm in position to teach Tapestry to others, I'm still learning myself But, using Eclipse I looked at class hierarchy for: org.apache.tapestry5.AbstractValidator and see that Tapestry provides only the following out of the box: Email, Max, MaxLength, Min, MinLength, None, Regexp and Required So, just by guessing, I'd venture to say that Tapestry uses Regexp validator to test if numeric field contains indeed a numeric value. I'd also suspect that if there is a bug, it's probably in the regular expression passed to Regexp validator on numeric field test, not the validator itself. Again, I'm still learning myself, so somebody that actually knows for sure would have to confirm, but that's be my guess. Adam On Thu, Mar 31, 2011 at 10:59 AM, Chris Norris thechrisproject.li...@gmail.com wrote: Well perhaps you can teach me a few things. I'm trying to figure out by what mechanism tapestry would be validating this. We generally specify our custom NumericValidator on numeric fields. Is there some sort of automatic validation that can occur? I don't see much mention of it on this page: http://tapestry.apache.org/input-validation.html On Thu, Mar 31, 2011 at 10:54 AM, Adam Zimowski zimowsk...@gmail.com wrote: No problem. Howard mentioned this may be a Tapestry bug. I'm in no immediate rush as my project isn't going live until next year, so hopefully by then it gets fixed. Adam On Thu, Mar 31, 2011 at 10:51 AM, Chris Norris thechrisproject.li...@gmail.com wrote: Sorry, I was completely wrong. I was looking at a NumericValidator that we wrote, not a Tapestry one. On Thu, Mar 31, 2011 at 9:43 AM, Adam Zimowski zimowsk...@gmail.com wrote: My client side validation is disabled. This happens on my shopping cart page where I have multiple forms (inside a loop) with indexed trackers ( MapInteger, ValidationTracker. You can find complete code for the ShoppingCart page which exhibits this behavior in another thread which I posted recently: T5: form validation with pre-existing errors The actual numeric field which exhibits this is defined in the template as: t:textfield t:id=quantity t:context=index label=prop:quantityLabel validate=required size=2/ @Component(parameters = {tracker=tracker}) private Form cartForm; @Persist(PersistenceConstants.FLASH) private MapInteger, ValidationTracker indexedTrackers; public ValidationTracker getTracker() { if(indexedTrackers == null) return new ValidationTrackerImpl(); return indexedTrackers.get(index); } public void setTracker(ValidationTracker aTracker) { if(indexedTrackers == null) { if(log.isTraceEnabled()) log.trace(crating indexed trackers map); indexedTrackers = new HashMapInteger, ValidationTracker(); } if(log.isTraceEnabled()) { log.trace(setting tracker for index: + index); } indexedTrackers.put(index, aTracker); } In addition, this field carries a mixin: @Component(id=ID_QUANTITY_FIELD, parameters ={AttachError.message=fieldError}) @MixinClasses(value=AttachError.class) private TextField quantityField; @MixinAfter public class AttachError { @Parameter(required = true, allowNull = true) private String message; @Environmental private ValidationTracker tracker; @InjectContainer private Field field; void setupRender() { if (message != null) { tracker.recordError(field, message); } } } public String getFieldError() { String error = null; ValidationTracker tracker = getTracker(); if(tracker != null tracker.getError(quantityField) != null) { return null; } CartItemBean cib = findCartItem(cartDisplayItem.getLineNumber()); // look up error in CartItemBean and if found return it, or return null; return error; } Let me know, perhaps I am doing something wrong.. Adam On Thu, Mar 31, 2011 at 9:03 AM, Chris Norris thechrisproject.li...@gmail.com wrote: The Tapestry NumericValidator seems to rely
Re: T5: built-in numeric validator
I'm wondering what lead you to believe it would be automatically Because if I define a TextField bound to numeric property without any validation of my own whatsoever, Tapestry will validate non-numeric input for me. Adam On Thu, Mar 31, 2011 at 1:24 PM, Chris Norris thechrisproject.li...@gmail.com wrote: Now I'm all curious. After looking through FieldValidatorDefaultSource, FieldValidatorSource and the ValidationContstraintGenerator implementations, I'm not sure how a numeric field would automatically be validated as such. The Regexp validator is only reference in TapestryModule, which allows you to explicitly use it, but you're talking about something automatic. I'm wondering what lead you to believe it would be automatically generated in the first place? Though Howard's suggestion that it isn't working right seems to imply that it should be doing that... On Thu, Mar 31, 2011 at 11:04 AM, Adam Zimowski zimowsk...@gmail.com wrote: :) I don't think I'm in position to teach Tapestry to others, I'm still learning myself But, using Eclipse I looked at class hierarchy for: org.apache.tapestry5.AbstractValidator and see that Tapestry provides only the following out of the box: Email, Max, MaxLength, Min, MinLength, None, Regexp and Required So, just by guessing, I'd venture to say that Tapestry uses Regexp validator to test if numeric field contains indeed a numeric value. I'd also suspect that if there is a bug, it's probably in the regular expression passed to Regexp validator on numeric field test, not the validator itself. Again, I'm still learning myself, so somebody that actually knows for sure would have to confirm, but that's be my guess. Adam On Thu, Mar 31, 2011 at 10:59 AM, Chris Norris thechrisproject.li...@gmail.com wrote: Well perhaps you can teach me a few things. I'm trying to figure out by what mechanism tapestry would be validating this. We generally specify our custom NumericValidator on numeric fields. Is there some sort of automatic validation that can occur? I don't see much mention of it on this page: http://tapestry.apache.org/input-validation.html On Thu, Mar 31, 2011 at 10:54 AM, Adam Zimowski zimowsk...@gmail.com wrote: No problem. Howard mentioned this may be a Tapestry bug. I'm in no immediate rush as my project isn't going live until next year, so hopefully by then it gets fixed. Adam On Thu, Mar 31, 2011 at 10:51 AM, Chris Norris thechrisproject.li...@gmail.com wrote: Sorry, I was completely wrong. I was looking at a NumericValidator that we wrote, not a Tapestry one. On Thu, Mar 31, 2011 at 9:43 AM, Adam Zimowski zimowsk...@gmail.com wrote: My client side validation is disabled. This happens on my shopping cart page where I have multiple forms (inside a loop) with indexed trackers ( MapInteger, ValidationTracker. You can find complete code for the ShoppingCart page which exhibits this behavior in another thread which I posted recently: T5: form validation with pre-existing errors The actual numeric field which exhibits this is defined in the template as: t:textfield t:id=quantity t:context=index label=prop:quantityLabel validate=required size=2/ @Component(parameters = {tracker=tracker}) private Form cartForm; @Persist(PersistenceConstants.FLASH) private MapInteger, ValidationTracker indexedTrackers; public ValidationTracker getTracker() { if(indexedTrackers == null) return new ValidationTrackerImpl(); return indexedTrackers.get(index); } public void setTracker(ValidationTracker aTracker) { if(indexedTrackers == null) { if(log.isTraceEnabled()) log.trace(crating indexed trackers map); indexedTrackers = new HashMapInteger, ValidationTracker(); } if(log.isTraceEnabled()) { log.trace(setting tracker for index: + index); } indexedTrackers.put(index, aTracker); } In addition, this field carries a mixin: @Component(id=ID_QUANTITY_FIELD, parameters ={AttachError.message=fieldError}) @MixinClasses(value=AttachError.class) private TextField quantityField; @MixinAfter public class AttachError { @Parameter(required = true, allowNull = true) private String message; @Environmental private ValidationTracker tracker; @InjectContainer private Field field; void setupRender() { if (message != null) { tracker.recordError(field, message); } } } public String getFieldError() { String error = null; ValidationTracker tracker = getTracker(); if(tracker != null tracker.getError(quantityField) != null) { return null; } CartItemBean cib =
Re: T5: built-in numeric validator
Seems like a bug to me! Surprising, though. Is this server-side or client-side validation? On Tue, Mar 29, 2011 at 2:49 PM, Adam Zimowski zimowsk...@gmail.com wrote: For numeric fields, Tapestry validates correctly non-numeric input. However, input such as: 1k 1\ etc.. passes the validation. Am I missing something? Adam - 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! (971) 678-5210 http://howardlewisship.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org
Re: T5: built-in numeric validator
It is server side. Looks like if input starts with a digit, Tapestry is happy :) Adam On Tue, Mar 29, 2011 at 5:05 PM, Howard Lewis Ship hls...@gmail.com wrote: Seems like a bug to me! Surprising, though. Is this server-side or client-side validation? On Tue, Mar 29, 2011 at 2:49 PM, Adam Zimowski zimowsk...@gmail.com wrote: For numeric fields, Tapestry validates correctly non-numeric input. However, input such as: 1k 1\ etc.. passes the validation. Am I missing something? Adam - 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! (971) 678-5210 http://howardlewisship.com - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org - To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org