[ https://issues.apache.org/jira/browse/WW-4301?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Lukasz Lenart updated WW-4301: ------------------------------ Description: I found this issue when using server-side processing with JQuery Datatables and attempting to populate. Say I have this getter/field on my action: {code:java} public List<List<String>> getListOfLists() { return listOfLists; } {code} My struts.xml is defined as follows: {code:xml} <action name="GetData" method="loadData" class="com.example.web.action.WebAction"> <result type="json" > <param name="ignoreHierarchy">false</param> <param name="includeProperties">listOfLists\[\d+\]\[\d+\]</param> </result> </action> {code} However, the include patterns that are constructed within JSONUtil are not accurate. Instead of making the expected pattern that would work: {noformat} listOfLists listOfLists\[\d+\] listOfLists\[\d+\]\[\d+\] {noformat} Only the following are created: {noformat} listOfLists\[\d+\] listOfLists\[\d+\]\[\d+\] {noformat} Because the first "listOfLists" is not created, the property is excluded in the results. This all happens because of line 463 in JSONUtil: {code:java} addPattern(results, patternExpr.substring(0, patternExpr.lastIndexOf(includePatternData.get(ARRAY_BEGIN_STRING).get(type))), type); {code} Since we're going at the last index of the ARRAY_BEGIN_STRING string, it's skipping the first index. This could be updated to be smarter to build the include patterns as expected. was: I found this issue when using server-side processing with JQuery Datatables and attempting to populate. Say I have this getter/field on my action: public List<List<String>> getListOfLists() { return listOfLists; } My struts.xml is defined as follows: <action name="GetData" method="loadData" class="com.example.web.action.WebAction"> <result type="json" > <param name="ignoreHierarchy">false</param> <param name="includeProperties">listOfLists\[\d+\]\[\d+\]</param> </result> </action> However, the include patterns that are constructed within JSONUtil are not accurate. Instead of making the expected pattern that would work: listOfLists listOfLists\[\d+\] listOfLists\[\d+\]\[\d+\] Only the following are created: listOfLists\[\d+\] listOfLists\[\d+\]\[\d+\] Because the first "listOfLists" is not created, the property is excluded in the results. This all happens because of line 463 in JSONUtil: addPattern(results, patternExpr.substring(0, patternExpr.lastIndexOf(includePatternData.get(ARRAY_BEGIN_STRING).get(type))), type); Since we're going at the last index of the ARRAY_BEGIN_STRING string, it's skipping the first index. This could be updated to be smarter to build the include patterns as expected. > includeProperties Does Not Work with a List of Lists > ---------------------------------------------------- > > Key: WW-4301 > URL: https://issues.apache.org/jira/browse/WW-4301 > Project: Struts 2 > Issue Type: Bug > Components: Plugin - JSON > Affects Versions: 2.3.16 > Reporter: Andrew Bernhagen > Priority: Minor > Labels: json > Fix For: 2.3.x > > Original Estimate: 24h > Remaining Estimate: 24h > > I found this issue when using server-side processing with JQuery Datatables > and attempting to populate. > Say I have this getter/field on my action: > {code:java} > public List<List<String>> getListOfLists() { > return listOfLists; > } > {code} > My struts.xml is defined as follows: > {code:xml} > <action name="GetData" method="loadData" > class="com.example.web.action.WebAction"> > <result type="json" > > <param name="ignoreHierarchy">false</param> > <param > name="includeProperties">listOfLists\[\d+\]\[\d+\]</param> > </result> > </action> > {code} > However, the include patterns that are constructed within JSONUtil are not > accurate. Instead of making the expected pattern that would work: > {noformat} > listOfLists > listOfLists\[\d+\] > listOfLists\[\d+\]\[\d+\] > {noformat} > Only the following are created: > {noformat} > listOfLists\[\d+\] > listOfLists\[\d+\]\[\d+\] > {noformat} > Because the first "listOfLists" is not created, the property is excluded in > the results. > This all happens because of line 463 in JSONUtil: > {code:java} > addPattern(results, patternExpr.substring(0, > patternExpr.lastIndexOf(includePatternData.get(ARRAY_BEGIN_STRING).get(type))), > type); > {code} > Since we're going at the last index of the ARRAY_BEGIN_STRING string, it's > skipping the first index. This could be updated to be smarter to build the > include patterns as expected. -- This message was sent by Atlassian JIRA (v6.2#6252)