Well shoot - after further testing it seems the issue is still present. I isolated the issue in a simple mvn webapp (see link below). Essentially Struts conversion fails when: 1) setting form input element to a List<Integer>, 2) there is only one checkbox in the list, 3) the checkbox is not checked when the form is submitted. The situation arises for me when I need to display a list of checkboxes, but I can't use <s:checkboxlist/> tag because the page requires a more advanced html layout. Thus I am forced to display the checkbox list using an <s:iterator/> and the <s:checkbox/> tag. If the displayed list so happens to have only one element, and the user doesn't check it, the conversion fails.
I am using now Struts Version 2.5.13. *Test Struts Webb App* *Download*: https://www.dropbox.com/s/x27o9a8qky9nwta/listTest.zip?dl=0 *Action*: mvn jetty:run *Url*: http://localhost:8080/ListConverterTest.action On Fri, Sep 29, 2017 at 10:56 AM, Burton Rhodes <[email protected]> wrote: > Sorry for the delay. I have upgraded to the newest version and everything > seems to be working. Thanks! > > On Mon, Sep 25, 2017 at 2:34 AM, Lukasz Lenart <[email protected]> > wrote: > >> 2017-09-25 5:04 GMT+02:00 Burton Rhodes <[email protected]>: >> > When extending the StrutsTypeConverter, is there anyway to figure out if >> > the "toClass" is a List<Integer> or a List<String>? I have found that >> when >> > converting data from a submitted webpage that has a value of a List in a >> > single variable, the standard struts conversion fails. For example: >> > <s:hidden name="integerList" value="%{integerList}" /> display as >> <s:hidden >> > name="integerList" value="[1,2,3,4,5]" />. When the form submits, this >> > value will not convert properly back into the List. In addition, the >> > conversion fails if you have a list of checkboxes and the user only >> checks >> > one - hence only a single variable being converted to a List. >> > >> > I have solved this issue by creating a MyListConverter, but I have to >> > declare the converter on each action in a [-conversion.properties] file >> > which is now becoming a bit cumbersome since this is such a common >> > occurrence. I have also declared some on my model/entity beans, but >> > still.... I would love to have a more global "List" converter, such as: >> > >> > [xwork-conversion.properties] >> > java.util.List=com.afs.web.converter.MyListConverter >> > >> > Thus any List that is encountered, I could attempt "my conversion" and >> send >> > up the chain of command if the resulting List is not of List<Integer> or >> > List<String>. >> > >> > [Psuedo_Code] >> > public class MyListConverter extends StrutsTypeConverter { >> > public Object convertFromString(Map context, String[] values, Class >> > toClass) { >> > // Is toClass List<Integer>, then try "my" conversion >> > >> > // Else is toClass List<String?, then try "my" conversion >> > >> > // Else return performFallbackConversion(context, o, toClass); >> > } >> > } >> > >> > Any ideas? Or am I going about this incorrectly? >> >> What version of Struts do you use? I think this was resolved in 2.5.13 >> or 2.5.12 - I meant conversion of list of built-in types (ints, >> doubles, etc), to convert your own type just register it (as for the >> List above). >> >> >> Regards >> -- >> Ćukasz >> + 48 606 323 122 http://www.lenart.org.pl/ >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> >

