myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Anton Zukovskij (JIRA)" <...@myfaces.apache.org>
Subject [jira] [Created] (MYFACES-3931) RelocatableResourceHandler tag + inner f:facet = NullPointerException
Date Wed, 08 Oct 2014 12:28:33 GMT
Anton Zukovskij created MYFACES-3931:
----------------------------------------

             Summary: RelocatableResourceHandler tag + inner f:facet = NullPointerException
                 Key: MYFACES-3931
                 URL: https://issues.apache.org/jira/browse/MYFACES-3931
             Project: MyFaces Core
          Issue Type: Bug
          Components: General
    Affects Versions: 2.2.5, 2.1.12
         Environment: Primefaces compatibility issue (discovered with primfaces component,
but reproducible on standalone myfaces app)
            Reporter: Anton Zukovskij


When primefaces h:head renderer is used with inner f:facet (first\middle\last) like follows:
{code}
<h:head>
    <f:facet name="first">
	 <h:outputScript name="jquery.js"/>
    </f:facet>
</h:head>
{code}
Application crashes with NPE during some AJAX requests on  ComponentTagHandlerDelegate:337
{code}
ComponentSupport.removeFacet(ctx, parent, c, facetName);
{code}
*This is caused by:*
# ComponentTagHandlerDelegate:190 - Resolves facet name from non-relocated parent (_HtmlHead)
# ComponentTagHandlerDelegate:327 - Changes parent to re-located element UIPanel(j_idhead__f_first),
resolved with HtmlOutputScriptHandler
#ComponentTagHandlerDelegate:337 - Uses re-located parent with non-relocated parents facet
name, facet isn't found, NPE is thrown.

*Solution:*
Refresh facetName when parent is changed, see diff:
{code}
--- a/myfaces-2.1.12/myfaces-impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/ComponentTagHandlerDelegate.java
Wed Oct 08 15:18:20 2014 +0300
+++ b/myfaces-2.1.12/myfaces-impl/src/main/java/org/apache/myfaces/view/facelets/tag/jsf/ComponentTagHandlerDelegate.java
Wed Oct 08 15:18:33 2014 +0300
@@ -325,6 +325,7 @@
                     {
                         // Replace parent with the relocated parent.
                         parent = c.getParent();
+                        facetName = this.getFacetName(ctx, parent); // refresh facet name
according to new parent
                     }
                 }
                 if (facetName == null)
{code}

*Note:* Exception handling for such cases can be improved, as application crashes during render
phase no response is rendered and MyFaces ExceptionHandler is unable to add exception into
AJAX response - this way no exception is logged or returned, empty screen is rendered without
any errors.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message