I was actually hoping that enough information would present itself. I will try 
to write this up and add it to the wiki. I may have a question or two more.

Thank you for the help

Ted


On Aug 22, 2013, at 12:59 PM, Ramsey Gurley <[email protected]> wrote:

> Maybe someone should copy this thread to the wiki :D It's more documentation 
> on ERXValidation than you'll find there.
> 
> Unrelated note: If you are working with dollar values, use a BigDecimal. 
> Doubles and floats are a bad choice for financial math in Java.
> 
> Short answer: 
> 
> @@escapedValue@@
> 
> Long answer:
> 
> ERXValidation uses the ERXSimpleTemplateParser for its string templates. The 
> ERXSimpleTemplateParser uses context objects to provide those @@ values. The 
> parser can accept two context objects, the primary, and a fall back.
> 
> In the case of ERXValidation, the primary context object is the 
> ERXValidationException itself. The secondary context, if one exists, is the 
> ERXValidationException.context(). In ERDirectToWeb, this is the d2wContext. 
> If you aren't using direct to web, you can provide your own context by 
> providing an ERXValidationFactory defaultDelegate at startup and implementing 
> the ExceptionDelegateInterface on it.
> 
> You will notice, ERXValidationException already has an escapedValue() method. 
> So, assuming your validation exception is the type of exception that would 
> have a value, then you can use this method to display the value back to the 
> user. If you just use @@value@@ instead, you could open yourself up to XSS 
> exploits.
> 
> Regarding your validateQuoteAmount() method, I would not swallow that 
> exception. I would generate an ERXValidationException from it.
> 
> If you look at the constants defined in ERXValidationException you will see a 
> number of predefined validation exception types. In your case, that is 
> probably InvalidNumberException if the parser decides it is not a number, and 
> InvalidValueException if the number is out of some predefined acceptable 
> range.
> 
> So, you could replace your method with something like
> 
>       public Object validateQuoteAmount(Object aValue) throws 
> ValidationException {
>               
>           DecimalFormat df = new DecimalFormat("#.##");
>           Double returnValue;
>               try {
>                       returnValue = Double.valueOf(df.format(aValue));
>               } catch (NumberFormatException e) {
>                       ERXValidationFactory factory = 
> ERXValidationFactory.defaultFactory();
>                       ERXValidationException ex = 
> factory.createCustomException(
>                               this, "quoteAmount", aValue, 
> ERXValidationException.InvalidNumberException);
>                       throw ex;
>               }
>           
>           return returnValue;
>         }
> 
> Then you would provide a validation key like
> 
> "Quote.quoteAmount.InvalidNumberException" = "You must enter a dollar amount 
> in the format 123.00. You entered <b>@@escapedValue@@</b>.";
> 
> in each language that you support.
> 
> Ramsey
> 
> On Aug 22, 2013, at 7:15 AM, Theodore Petrosky wrote:
> 
>> So I can create ValidationTemplate.strings
>> 
>> "Quote.quoteAmount"="You must enter a dollar amount in the format 123.00 
>> (you entered weird characters)!";
>> 
>> is there  a key that I can access what was typed? 
>> @@enteredQuoteAmountValue@@ 
>> 
>> so I can add it to the error message?
>> 
>> 
>> 
>> also,
>> if I input 234.66666666666 in the field my app crashes with:
>> 
>> Error:       com.webobjects.eoaccess.EOGeneralAdaptorException: The 
>> attribute quoteAmount has a scale of 2, but the value 123.666666666 has a 
>> scale of 9: Rounding necessary
>> Reason:      The attribute quoteAmount has a scale of 2, but the value 
>> 123.666666666 has a scale of 9: Rounding necessary
>> 
>> so I created a validation method:
>> 
>>        public Object validateQuoteAmount(Object aValue) throws 
>> ValidationException {
>>                  
>>          Double returnValue = 0.0;
>>          try {
>>            DecimalFormat df = new DecimalFormat("#.##");
>>            returnValue = Double.valueOf(df.format(aValue));
>>            
>>          } catch (Exception e) {
>>            // TODO Auto-generated catch block
>>            e.printStackTrace();
>>          }
>>          
>>          return returnValue;
>>        }
>> 
>> is there a better way?
>> 
>> Ted
>> 
>> 
>> On Aug 21, 2013, at 1:42 PM, Ramsey Gurley <[email protected]> wrote:
>> 
>>> http://thecodinglove.com/post/49933241299/when-i-start-using-a-3rd-party-lib-and-notice-there-is
>>> 
>>> ERXValidationFactory.templateForEntityPropertyType determines what keys are 
>>> considered for most validation messages. In order, they are
>>> 
>>> entity.property.type
>>> entity.property
>>> property.type
>>> property
>>> type
>>> 
>>> So let's say you have an EO named Document with a mandatory title 
>>> attribute. Leaving that blank would result in a NullPropertyException type 
>>> validation error. So, your keys would be from most specific to least:
>>> 
>>> Document.title.NullPropertyException
>>> Document.title
>>> title.NullPropertyException
>>> title
>>> NullPropertyException
>>> 
>>> Typically, the least specific key is already defined in Wonder's 
>>> ValidationTemplate.strings in the frameworks.
>>> 
>>> "NullPropertyException" = "Please provide @@indefiniteArticleForProperty@@ 
>>> <b>@@displayNameForProperty@@</b>.";
>>> 
>>> You can override these with the more specific keys.
>>> 
>>> In this specific case, the validation template string is actually defined 
>>> elsewhere. It's the result of an EOGeneralAdaptorException being converted 
>>> into a standard validation exception in the ERXSQLHelper. You can find it 
>>> in the PostgresqlSQLHelper.handleDatabaseException method.
>>> 
>>> On Aug 21, 2013, at 10:22 AM, Christoph Wick wrote:
>>> 
>>>> Is there a documentation about the possible keys for that? What kinds of 
>>>> keys can I put into a ValidationTemplates.string?
>>>> 
>>>> Thx, C.U.CW
>>>> -- 
>>>> What are the three enemies of a programmer? Sunlight, oxygen, and the 
>>>> appalling roar of the birds.
>>>> 
>>>> On 14.08.2013, at 04:07, Theodore Petrosky <[email protected]> wrote:
>>>> 
>>>>> wow, that's beautiful
>>>>> 
>>>>> 
>>>>> 
>>>>> On Aug 13, 2013, at 8:45 PM, Paul Hoadley <[email protected]> wrote:
>>>>> 
>>>>>> Hi Ted,
>>>>>> 
>>>>>> On 14/08/2013, at 10:03 AM, Theodore Petrosky <[email protected]> wrote:
>>>>>> 
>>>>>>> I added an index and unique constraint to my User. loginName column. 
>>>>>>> 
>>>>>>> I see in the logs that when I try to violate the uniqueness my d2w does 
>>>>>>> the correct thing and complain however this is the error:
>>>>>>> 
>>>>>>> Could not save your changes: CustomMethodException
>>>>>>> 
>>>>>>> I do see in the logs:
>>>>>>> 
>>>>>>> ERROR: duplicate key value violates unique constraint "loginname_idx"
>>>>>>> 
>>>>>>> did I miss something in a rule to pass the better worded error message 
>>>>>>> to the user?
>>>>>> 
>>>>>> Create Resources/English.lproj/ValidationTemplate.strings and add:
>>>>>> 
>>>>>> {
>>>>>>  "UniqueConstraintException.loginname_idx" = "Please choose a different 
>>>>>> username.";
>>>>>> }
>>>>>> 
>>>>>> Does that work?
>>>>>> 
>>>>>> 
>>>>>> -- 
>>>>>> Paul Hoadley
>>>>>> http://logicsquad.net/
>>>>>> 
>>>>>> 
>>>>>> 
>>>>> 
>>>>> 
>>>>> _______________________________________________
>>>>> Do not post admin requests to the list. They will be ignored.
>>>>> Webobjects-dev mailing list      ([email protected])
>>>>> Help/Unsubscribe/Update your Subscription:
>>>>> https://lists.apple.com/mailman/options/webobjects-dev/wicki%40me.com
>>>>> 
>>>>> This email sent to [email protected]
>>>> 
>>>> 
>>>> _______________________________________________
>>>> Do not post admin requests to the list. They will be ignored.
>>>> Webobjects-dev mailing list      ([email protected])
>>>> Help/Unsubscribe/Update your Subscription:
>>>> https://lists.apple.com/mailman/options/webobjects-dev/rgurley%40smarthealth.com
>>>> 
>>>> This email sent to [email protected]
>>> 
>>> 
>>> _______________________________________________
>>> Do not post admin requests to the list. They will be ignored.
>>> Webobjects-dev mailing list      ([email protected])
>>> Help/Unsubscribe/Update your Subscription:
>>> https://lists.apple.com/mailman/options/webobjects-dev/tedpet5%40yahoo.com
>>> 
>>> This email sent to [email protected]
>> 
> 

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to