[ https://issues.apache.org/jira/browse/MYFACES-2991?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12966066#action_12966066 ]
Jakob Korherr commented on MYFACES-2991: ---------------------------------------- I checked this scenario in the spec and the renderkit-docs but unfortunately could not find a description. However, I also checked it against Mojarra and they disable the button in this case and also log a warning. Furthermore we already do the same if we get a null-href on h:link and actually it makes the most sence this way. Thus I applied the null-href handling from h:link to h:button (just disable the component). In addition I added some code on HtmlRendererUtils.getOutcomeTargetHref() to log a warning if no NavigationCase can be determined. > NPE from rendering button with missing resource URL > --------------------------------------------------- > > Key: MYFACES-2991 > URL: https://issues.apache.org/jira/browse/MYFACES-2991 > Project: MyFaces Core > Issue Type: Bug > Components: General > Affects Versions: 2.0.3-SNAPSHOT > Reporter: David Jencks > Assignee: Jakob Korherr > Attachments: MYFACES-2991.patch > > > I ran into this with the tck in geronimo. The test appears to be trying to > render a button that is just created and not part of a view to test the EL > bits of encodeBegin. There's no resource info associated with this button so > the resource URL is null, and trying to encode it throws an NPE. Some > comments in the code seem to indicate that something else should be > happening. In any case this can be fixed by testing for a null resourceURL > and not trying to encode null. > Code involved and comments that make be wonder what should be happening are in > HtmlOutcomeTargetButtonRendererBase line 115: > String href = facesContext.getExternalContext().encodeResourceURL( > HtmlRendererUtils.getOutcomeTargetLinkHref(facesContext, > (UIOutcomeTarget) uiComponent)); > ServletExternalContextImpl line 325: > @Override > public String encodeResourceURL(final String url) > { > checkNull(url, "url"); > checkHttpServletRequest(); > return ((HttpServletResponse) _servletResponse).encodeURL(url); > } > HtmlRendererUtils line 1771: > public static String getOutcomeTargetLinkHref( > FacesContext facesContext, UIOutcomeTarget component) throws > IOException { > ... > // when navigation case is null, force the "link" to be rendered as > text > if (navigationCase == null) { > return null; > } > ... > Result appears to be that when there is no navigation case the first method > will throw an NPE, although the comment in getOutcomeTargetLinkHref seems to > indicate something else should happen. > I haven't yet figured out how to add an appropriate renderer to the mock > renderkit to write a unit test showing the problem. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.