Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.3.15
-
None
-
None
Description
Unfortunately, I haven't figured out the exact cause of the issue; however, the fix provided brings our system back to how it used to work.
When expression is passed in a null, a NPE is thrown @:
int start = expression.indexOf(lookupChars, pos);
Object result = expression; int pos = 0; for (char open : openChars) { int loopCount = 1; //this creates an implicit StringBuffer and shouldn't be used in the inner loop final String lookupChars = open + "{"; while (true) { int start = expression.indexOf(lookupChars, pos); if (start == -1) { loopCount++; start = expression.indexOf(lookupChars); }
Here is the fix I'm using in a locally built class file:
Object result = expression = (expression == null) ? "" : expression; int pos = 0; for (char open : openChars) { int loopCount = 1; //this creates an implicit StringBuffer and shouldn't be used in the inner loop final String lookupChars = open + "{"; while (true) { int start = expression.indexOf(lookupChars, pos); if (start == -1) { loopCount++; start = expression.indexOf(lookupChars); }
I can see about 10 different ways to 'fix' the issue, but this keeps the change to a single line since I don't entirely understand the workflow of what's going on.
FYI, it seems to have something to do with validate="true" on the form and when there are fields to validate which have nested getters, aka:
<@s.hidden key="myFakePatternHolder.pattern.id"/>