On 6/24/2019 8:51 PM, Prasanth Pasala wrote:
> I have built a test project to just test the Map variables. In the
> validate method it does give a String object (for value of map). But
> seems like a field error is also added. If I try to use the map in
> validate method I would get a class cast exception, but if I don't do
> anything with the map values then the input page is displayed with
> invalid field value error.
> 
> So I guess the issue is that my validate method is trying to validate
> the values in the map and that causes the exception, as the map has
> String values in it.
> 
> I have to update the validation methods to check if the value is of type
> Double or not. Is this how it is supposed to work?

I also like to not see that value in Map but maybe it's required for
some reason - I didn't check. But you may use following workaround:

if (!hasFieldErrors() || !getFieldErrors().contains(myFieldName) {
    // my extra customized validation logic for myFieldName
}

>  I would have thought> that a field error would be added and the String value 
> would not be
> added to the Map as the code is expecting Doubles.

Me too! Could you please put a break-point at your app's [1] and see
what happens next for that field?

Regards.

[1]
https://github.com/apache/struts/blob/651eac2c57396aa11ee65002006b3123dd69cbb4/core/src/main/java/com/opensymphony/xwork2/conversion/impl/XWorkConverter.java#L445



> 
> Thanks,
> Prasanth
> 
> On 6/24/19 1:42 AM, Yasser Zamani wrote:
>> Hi,
>>
>> I think putting breakpoints at [1] and [2] and seeing if you reach
>> there and what happens next can help proceeding this issue.
>>
>> Thanks in advance!
>>
>> Regards.
>>
>> [1]
>> https://github.com/apache/struts/blob/651eac2c57396aa11ee65002006b3123dd69cbb4/core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultObjectTypeDeterminer.java#L114
>>
>> [2]
>> https://github.com/apache/struts/blob/651eac2c57396aa11ee65002006b3123dd69cbb4/core/src/main/java/com/opensymphony/xwork2/interceptor/ConversionErrorInterceptor.java#L118
>>
>>
>>
>>> -----Original Message-----
>>> From: Prasanth <dbad...@pangburngroup.com>
>>> Sent: Friday, June 21, 2019 6:27 PM
>>> To: user@struts.apache.org
>>> Subject: Re: Invalid Field Value when using Map
>>>
>>> Hi Yasser,
>>>
>>> The conversion error occurs when the field is not a map. I have a
>>> form with
>>> int/long fields, if the user enters non numeric value the form
>>> display error.
>>>
>>> The actions are validation aware and the control does come to validation
>>> method. It is in the validation method that I usually get exceptions 
>>> as the code is
>>> expecting to have a Double but the type of the object in the map is a
>>> String. I
>>> have tried to check in the validate method if the object is of type
>>> Double and if it
>>> is not a Double add a field error. When I do that OGNL seems to have
>>> an issue
>>> when displaying the input form with the values in the map. Seems like
>>> OGNL is
>>> now expecting a Double value and is not able to handle a String
>>> object being
>>> present in the map. The JSP stops at the field which has String value.
>>>
>>> So even if I add additional validations to make sure all values in
>>> the map are
>>> Doubles it would still cause a problem as Struts would not be able to
>>> display the
>>> input form.
>>>
>>> Thanks,
>>> Prasanth
>>>
>>> On 6/21/19 1:23 AM, Yasser Zamani wrote:
>>>> Oh interesting!
>>>>
>>>> Have you seen [1]? e.g. conversion error interceptor should be present
>>>> in your interceptor stack. To debug, for example put a number field
>>>> which is not a map and see if conversion error appears - I think you
>>>> should also have fieldErrors tag in your jsp.
>>>>
>>>> It seems your action also should be ValidationAware. Put a break-point
>>>> at [2] and see if your code reaches there and what happens next.
>>>>
>>>> Regards.
>>>>
>>>> [1]
>>>> https://struts.apache.org/core-developers/type-conversion.html#collect
>>>> ion-and-map-support
>>>> [2]
>>>> https://github.com/apache/struts/blob/651eac2c57396aa11ee65002006b3123
>>>>
>>> dd69cbb4/core/src/main/java/com/opensymphony/xwork2/interceptor/Conver
>>>> sionErrorInterceptor.java#L116
>>>>
>>>> On 6/19/2019 10:35 PM, Prasanth Pasala wrote:
>>>>> Hi Yasser,
>>>>>
>>>>> I think at run time you can add any type of objects you want to the
>>>>> map.
>>>>> The checks are only at compile time on the data types of objects
>>>>> added to Maps.
>>>>>
>>>>> Thanks,
>>>>> Prasanth
>>>>>
>>>>> On 6/19/19 1:29 AM, Yasser Zamani wrote:
>>>>>> Hi Prasanth,
>>>>>>
>>>>>> I'm surprised how you get non digit characters in your map while
>>>>>> both key and value are not String!
>>>>>>
>>>>>> Regards.
>>>>>>
>>>>>>> -----Original Message-----
>>>>>>> From: Prasanth <dbad...@pangburngroup.com>
>>>>>>> Sent: Monday, June 17, 2019 8:52 PM
>>>>>>> To: Struts Users Mailing List <user@struts.apache.org>
>>>>>>> Subject: Invalid Field Value when using Map
>>>>>>>
>>>>>>> Hi,
>>>>>>>
>>>>>>> I have a form that uses maps to store data as shown below. When the
>>>>>>> user enters valid numbers it works as expected, but when user
>>>>>>> enters non digit characters in the text field a String object is
>>>>>>> saved in the map rather than showing a "Invalid field value for
>>>>>>> field <field name>" message which is done for basic data types like
>>>>>>> int/long/double. Is this something that struts has not implemented
>>>>>>> for maps yet, as the annotations provide the expected data type?
>>>>>>>
>>>>>>>        @Element(value=java.lang.Double.class)
>>>>>>>        private HashMap<Long, Double> deferralAmountValue = new
>>>>>>> HashMap<Long,Double>();
>>>>>>>        @Element(value=java.lang.Double.class)
>>>>>>>        private HashMap<Long, Double> deferralPercentValue = new
>>>>>>> HashMap<Long,Double>();
>>>>>>>
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Prasanth
>>>>>> --------------------------------------------------------------------
>>>>>> - To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
>>>>>> For additional commands, e-mail: user-h...@struts.apache.org
>>>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
>>>> For additional commands, e-mail: user-h...@struts.apache.org
>>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
>> For additional commands, e-mail: user-h...@struts.apache.org
>>
> 
> 

Reply via email to