[ http://issues.apache.org/jira/browse/TOMAHAWK-18?page=comments#action_12449551 ] Simon Kitching commented on TOMAHAWK-18: ----------------------------------------
Just wanted to note that the project I am currently working on also got bitten by this bug and we currently have a workaround for this, based on the above regex. > HtmlMessageRenderer's replacement of input ID with input label fails when > label is not escaped > ---------------------------------------------------------------------------------------------- > > Key: TOMAHAWK-18 > URL: http://issues.apache.org/jira/browse/TOMAHAWK-18 > Project: MyFaces Tomahawk > Issue Type: Bug > Components: Message(s) > Reporter: Ken Weiner > > If you try to use <t:message> with an input component that has a label that > is not escaped properly (has a '$' or some other special regex character), > the rendering of the message component fails with the following error: > The following exception is thrown: > java.lang.IndexOutOfBoundsException: No group 1 > at java.util.regex.Matcher.group(Matcher.java:463) > at java.util.regex.Matcher.appendReplacement(Matcher.java:730) > at java.util.regex.Matcher.replaceAll(Matcher.java:806) > at java.lang.String.replaceAll(String.java:2000) > at > org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.getDetail(HtmlMessageRenderer.java:107) > ... > This happens when replaceAll() is called in the following places: > org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.getSummary() > ... > msgSummary = msgSummary.replaceAll(findInputId(facesContext, > msgClientId),inputLabel); (line 72) > ... > org.apache.myfaces.renderkit.html.ext.HtmlMessageRenderer.getDetail() > ... > msgDetail = msgDetail.replaceAll(findInputId(facesContext, > msgClientId),inputLabel); (line 108) > ... > If the inputLabel string contains a '$', then it breaks. > I think the proper fix would be to replace all regex special characters in > inputLabel with their escaped sequences right before calling replaceAll(). > For example: > inputLabel = inputLabel.replaceAll("\\\\", > "\\\\\\\\").replaceAll("\\$", "\\\\\\$"); > I don't know regex well enough to know what all the special characters are or > if there is some method that can be called to do this escaping for us. I'd > be happy to submit a patch if someone could help me determine what the proper > fix would be. Thanks. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
