Re: Iusse in BigDecimal conversion after upgrading from 2.5.10.1 to 2.5.13

2017-10-04 Thread sreekanth
thanks Yasser for all you help and code.

I would like to conclude this as a struts2 upgrade change, as BigDecimal
field value was setting as BigDecimal.ZERO when field value passed as empty
in struts2.5.10.x or < whereas 2.5.13 will set such empty BigDecimal field
as null value (that is the correct behavior according to me as well), so
planning to do a through testing across my project and correct such issues.



--
Sent from: http://struts.1045723.n5.nabble.com/Struts-User-f3426046.html

-
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org



Re: Iusse in BigDecimal conversion after upgrading from 2.5.10.1 to 2.5.13

2017-10-04 Thread Lukasz Lenart
2017-10-04 12:41 GMT+02:00 Yasser Zamani :
>> 2.5.13. But now I also tested 2.5.10.1 and get following warn when try
>> to set empty string value to a BigDecimal:
>>
>> Unexpected Exception caught setting 'myList[0].crAmt' on 'class
>> me.zamani.yasser.ww_convention.actions.MyBigDecimalList: Error setting
>> expression 'myList[0].crAmt' with value ['', ]
>
> This is because of line#93 [1] in Struts 2.5.13:
>
> ```java
> return format.parse(strValue);
> ```

This an expected behaviour, assigning an empty String to BigDecimal
means you want to have "null" - there is no default value as for
primitives (0 for int, false for boolean, etc). I would rather add a
required validator upfront instead of changing the conversion logic.


Regards
-- 
Łukasz
+ 48 606 323 122 http://www.lenart.org.pl/

-
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org



Re: Iusse in BigDecimal conversion after upgrading from 2.5.10.1 to 2.5.13

2017-10-04 Thread Yasser Zamani


On 10/4/2017 10:45 AM, sreekanth wrote:
> thanks Yasser, let me setup a sample too. I already went through fixes
> introduced at WW-4581 as well and ran a test against it and found that's not
> the reason for this behavior rather something related to form field binding.
> 
> Here i'm adding your finding which i too believe the root cause for this new
> behavior.
> 
> *
> 2.5.13. But now I also tested 2.5.10.1 and get following warn when try
> to set empty string value to a BigDecimal:
> 
> Unexpected Exception caught setting 'myList[0].crAmt' on 'class
> me.zamani.yasser.ww_convention.actions.MyBigDecimalList: Error setting
> expression 'myList[0].crAmt' with value ['', ]
> *
> 

This is because of line#93 [1] in Struts 2.5.13:

```java
return format.parse(strValue);
```

Currently it cannot parse empty values to 0 as java's DecimalFormat 
class cannot. Maybe we can change the behavior by replacing any empty 
with "0" in Strut's future versions ?!

Until that time, I think you can extend NumberConverter and override 
it's convertToBigDecimal method and use it instead (see also [2]):

```java
@override
 protected Object convertToBigDecimal(context,value) {
String strValue = String.valueOf(value);
if(null==value || strValue.isNullOrEmpty()) strValue="0";
return super.convertToBigDecimal(context,strValue);
}
```

Hope these help!
Yasser.

[1] 
https://gitbox.apache.org/repos/asf?p=struts.git;a=blob;f=core/src/main/java/com/opensymphony/xwork2/conversion/impl/NumberConverter.java;h=16bbd499e00f03d4a673cd43d90dc261db3849df;hb=f874f9cde56f74c5161b17e645f779805c51a04b#l93
[2] 
https://saifmasadeh.blogspot.com/2012/10/custom-converter-for-bigdecimal-struts2.htm

> 
> 
> --
> Sent from: http://struts.1045723.n5.nabble.com/Struts-User-f3426046.html
> 
> -
> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> For additional commands, e-mail: user-h...@struts.apache.org
> 


Re: Iusse in BigDecimal conversion after upgrading from 2.5.10.1 to 2.5.13

2017-10-04 Thread sreekanth
thanks Yasser, let me setup a sample too. I already went through fixes
introduced at WW-4581 as well and ran a test against it and found that's not
the reason for this behavior rather something related to form field binding.

Here i'm adding your finding which i too believe the root cause for this new
behavior.

*
2.5.13. But now I also tested 2.5.10.1 and get following warn when try 
to set empty string value to a BigDecimal: 

Unexpected Exception caught setting 'myList[0].crAmt' on 'class 
me.zamani.yasser.ww_convention.actions.MyBigDecimalList: Error setting 
expression 'myList[0].crAmt' with value ['', ]
*



--
Sent from: http://struts.1045723.n5.nabble.com/Struts-User-f3426046.html

-
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org



Re: Iusse in BigDecimal conversion after upgrading from 2.5.10.1 to 2.5.13

2017-10-04 Thread Yasser Zamani


On 10/4/2017 9:19 AM, sreekanth wrote:
> thanks Yasser, that info was great, so do you think so the way struts2 binds
> BigDecimal changed between these two versions ?

I found the difference at [1]. That is in order to fix WW-4581 [2].

[1] 
https://gitbox.apache.org/repos/asf?p=struts.git;a=commitdiff;h=f874f9cde56f74c5161b17e645f779805c51a04b
[2] https://issues.apache.org/jira/browse/WW-4581

>  and also if possible kindly
> share your sample project in github so that i can fork it and check myself
> faster.
> 

My sample is inside a big project like a big Struts lab ;) but the 
config is simple as below:

```java
package me.zamani.yasser.ww_convention.actions;

import java.math.BigDecimal;

/**
  * Created by user on 10/3/2017.
  */
public class A {
 public String getStrVal() {
 return strVal;
 }

 public void setStrVal(String strVal) {
 this.strVal = strVal;
 }

 public BigDecimal getDrAmt() {
 return drAmt;
 }

 public void setDrAmt(BigDecimal drAmt) {
 this.drAmt = drAmt;
 }

 public BigDecimal getCrAmt() {
 return crAmt;
 }

 public void setCrAmt(BigDecimal crAmt) {
 this.crAmt = crAmt;
 }

 String strVal;
 BigDecimal drAmt;
 BigDecimal crAmt;
 }
```

```java
package me.zamani.yasser.ww_convention.actions;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;

import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;

@Results({
 @Result(name = Action.SUCCESS, location = 
"/WEB-INF/content/myBigDecimalList.jsp"/*, type = "freemarker"*/)
})
public class MyBigDecimalList extends ActionSupport {

 public List getMyList() {
 return myList;
 }

 public void setMyList(List myList) {
 this.myList = myList;
 }

 private List myList;

 
@org.apache.struts2.convention.annotation.Action(value="myBigDecimalList")
 public String execute() throws Exception {
 A a = new A();
 a.setStrVal("my str val");
 a.setCrAmt(new 
BigDecimal("0.0120816681711721685132943093776702880859375"));
 a.setDrAmt(new 
BigDecimal("0.0220816681711721685132943093776702880859375"));
 myList=new ArrayList<>();
 myList.add(a);
 NumberFormat format = NumberFormat.getNumberInstance(getLocale());
 //NumberFormat.set
 format.setMaximumFractionDigits(40);
 return Action.SUCCESS;
 }
}

```

```jsp
<%@taglib prefix="s" uri="/struts-tags"%>
<%--
   Created by IntelliJ IDEA.
   User: user
   Date: 8/18/2017
   Time: 12:36 AM
   To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


 AdvancedWildcardAction1






 



```

Hope these help!
Yasser.

> 
> 
> --
> Sent from: http://struts.1045723.n5.nabble.com/Struts-User-f3426046.html
> 
> -
> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> For additional commands, e-mail: user-h...@struts.apache.org
> 


Re: Iusse in BigDecimal conversion after upgrading from 2.5.10.1 to 2.5.13

2017-10-03 Thread sreekanth
thanks Yasser, that info was great, so do you think so the way struts2 binds
BigDecimal changed between these two versions ? and also if possible kindly
share your sample project in github so that i can fork it and check myself
faster.



--
Sent from: http://struts.1045723.n5.nabble.com/Struts-User-f3426046.html

-
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org



Re: Iusse in BigDecimal conversion after upgrading from 2.5.10.1 to 2.5.13

2017-10-03 Thread Yasser Zamani


On 10/4/2017 8:07 AM, sreekanth wrote:
> thanks Yasser, may i know with which version of struts you have tested it
> 2.5.10.1 or 2.5.13 ?
> 

2.5.13. But now I also tested 2.5.10.1 and get following warn when try 
to set empty string value to a BigDecimal:

Unexpected Exception caught setting 'myList[0].crAmt' on 'class 
me.zamani.yasser.ww_convention.actions.MyBigDecimalList: Error setting 
expression 'myList[0].crAmt' with value ['', ]

Also, 2.5.10.1 does not round my values during creating the s:hidden tag.

> 
> 
> --
> Sent from: http://struts.1045723.n5.nabble.com/Struts-User-f3426046.html
> 
> -
> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> For additional commands, e-mail: user-h...@struts.apache.org
> 


Re: Iusse in BigDecimal conversion after upgrading from 2.5.10.1 to 2.5.13

2017-10-03 Thread sreekanth
thanks Yasser, may i know with which version of struts you have tested it
2.5.10.1 or 2.5.13 ?



--
Sent from: http://struts.1045723.n5.nabble.com/Struts-User-f3426046.html

-
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org



Re: Iusse in BigDecimal conversion after upgrading from 2.5.10.1 to 2.5.13

2017-10-03 Thread Yasser Zamani


On 10/3/2017 10:33 PM, sreekanth wrote:
> Thanks Yasser, if my previous doubts get cleared then probably i can assume
> there is behavioral change in binding empty value. If thats not the case
> then will try to replicate as you have mentioned.
> 

In my yesterday test application, empty string value converts to null. 
The locale is en_US.

> 
> 
> --
> Sent from: http://struts.1045723.n5.nabble.com/Struts-User-f3426046.html
> 
> -
> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> For additional commands, e-mail: user-h...@struts.apache.org
> 


Re: Iusse in BigDecimal conversion after upgrading from 2.5.10.1 to 2.5.13

2017-10-03 Thread sreekanth
Thanks Yasser, if my previous doubts get cleared then probably i can assume
there is behavioral change in binding empty value. If thats not the case
then will try to replicate as you have mentioned. 



--
Sent from: http://struts.1045723.n5.nabble.com/Struts-User-f3426046.html

-
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org



Re: Iusse in BigDecimal conversion after upgrading from 2.5.10.1 to 2.5.13

2017-10-03 Thread sreekanth
Hi Lukasz, 
 what bothering me is, we haven't changed this particular jsp
since an year or more and its working fine till  2.5.10.x. I have the
following doubt, if it can be answered then i can assume whats going wrong
in my code.

What was the behaviour of struts 2.5.10.1 while converting an empty value ?
was it converting to null or was it converting to BigDecimal ZERO ? 





--
Sent from: http://struts.1045723.n5.nabble.com/Struts-User-f3426046.html

-
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org



Re: Iusse in BigDecimal conversion after upgrading from 2.5.10.1 to 2.5.13

2017-10-03 Thread Yasser Zamani


On 10/3/2017 9:56 PM, sreekanth wrote:
> The value not getting set at all, its coming as null. By the time i will also
> see if i can provide some log as you mentioned.
> 

I tested similar action with a list of A where A has two BigDecimals; 
posted values (myList[x].y] getting set here however they're rounded but 
are setted. please use following resources to find the cause there:

[1] https://struts.apache.org/docs/devmode.html
[2] 
https://struts.apache.org/getting-started/how-to-create-a-struts2-web-application.html
 
(Step 4 - Add Logging; set levels to WARN)

> 
> 
> --
> Sent from: http://struts.1045723.n5.nabble.com/Struts-User-f3426046.html
> 
> -
> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> For additional commands, e-mail: user-h...@struts.apache.org
> 


Re: Iusse in BigDecimal conversion after upgrading from 2.5.10.1 to 2.5.13

2017-10-03 Thread Lukasz Lenart
2017-10-03 20:03 GMT+02:00 sreekanth :
> Thanks Lukasz, can you please point me some wiki page or what change i have
> to do to make my existing code working ?

Hm... as far I recall there is no special settings, just use format
according to user locale, eg.: US locale 1.000,12, DE locale 1 000,12


Regards
-- 
Łukasz
+ 48 606 323 122 http://www.lenart.org.pl/

-
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org



Re: Iusse in BigDecimal conversion after upgrading from 2.5.10.1 to 2.5.13

2017-10-03 Thread sreekanth
The value not getting set at all, its coming as null. By the time i will also
see if i can provide some log as you mentioned.



--
Sent from: http://struts.1045723.n5.nabble.com/Struts-User-f3426046.html

-
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org



Re: Iusse in BigDecimal conversion after upgrading from 2.5.10.1 to 2.5.13

2017-10-03 Thread Yasser Zamani


On 10/3/2017 8:26 PM, sreekanth wrote:
> Hi,
>  We have a List object which is getting set at JSP (element added
> dynamically in front end), while saving this form the object's value for
> BigDecimal fields are getting null.
> 
> eg:
> 
> Class A {
> String strVal;
> BigDecimal drAmt;
> BigDecimal crAmt;
> }
> 
> in jsp
> 
> 
> 
> 
> 
> while we submit the form *strVal* is getting binded properly but both *drAmt
> and crAmt* not getting set.

Do they not being setted at all or they being setted but with a rounded 
value? If not setted at all, I recommend setting devmode to true and 
configuring log4j2 level to WARN and then examining the output for any 
related WARN. If you have problem with rounded values posted back, then 
I think you can `setMaximumFractionDigits` to a larger number in current 
locale.

> 
> When i revert the upgrade back to 2.5.10.1 then it started working.
> 
> 
> 
> --
> Sent from: http://struts.1045723.n5.nabble.com/Struts-User-f3426046.html
> 
> -
> To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
> For additional commands, e-mail: user-h...@struts.apache.org
> 


Re: Iusse in BigDecimal conversion after upgrading from 2.5.10.1 to 2.5.13

2017-10-03 Thread sreekanth
Thanks Lukasz, can you please point me some wiki page or what change i have
to do to make my existing code working ?



--
Sent from: http://struts.1045723.n5.nabble.com/Struts-User-f3426046.html

-
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org



Re: Iusse in BigDecimal conversion after upgrading from 2.5.10.1 to 2.5.13

2017-10-03 Thread Lukasz Lenart
2017-10-03 18:56 GMT+02:00 sreekanth :
> Hi,
> We have a List object which is getting set at JSP (element added
> dynamically in front end), while saving this form the object's value for
> BigDecimal fields are getting null.
>
> eg:
>
> Class A {
> String strVal;
> BigDecimal drAmt;
> BigDecimal crAmt;
> }
>
> in jsp
> 
> 
> 
>
>
> while we submit the form *strVal* is getting binded properly but both *drAmt
> and crAmt* not getting set.

As from Struts version 2.3.12, the built-in converter is Locale aware
which means it will convert String to BigDecimal according to user
locale.


Regards
-- 
Łukasz
+ 48 606 323 122 http://www.lenart.org.pl/

-
To unsubscribe, e-mail: user-unsubscr...@struts.apache.org
For additional commands, e-mail: user-h...@struts.apache.org