myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Julien Houllier (Commented) (JIRA)" <>
Subject [jira] [Commented] (MYFACES-1904) Exception encoding selectOneMenu when value has an intermediate node null
Date Wed, 04 Apr 2012 13:11:23 GMT


Julien Houllier commented on MYFACES-1904:

I work on a Myfaces JSF 1.1 + TomaHawk + Struts Tiles 1 + Ajax4JSFapplication, 
but since Firefox 11 ajax4JSF rendered bad thing at refresh so we decide to migrate to MyFaces
1.2 (1.2.11)+ TomaHawk + Tiles 2 + RichFaces 3.3,  

After long hours to make it work, some screen generates org.apache.jasper.el.JspPropertyNotFoundException,
because of this issue.

I hardly understand why after 4 years a Major issue, which would take few times to patch,
is still open

Any reason ?
I will have to make an empty StringConverter just to be sure my Application work.

> Exception encoding selectOneMenu when value has an intermediate node null
> -------------------------------------------------------------------------
>                 Key: MYFACES-1904
>                 URL:
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 1.2.3
>         Environment: geronimo 2.1.2
>            Reporter: Antoni Reus
> I have a managed bean called "treeManager", with a "selectedNode" property that is null
the first time.
> I have three input components: 2 inputText, and a selectOneMenu, the JSP code is this:
> ...
> <h:outputLabel for="nodeName" value="Nom"/>
> <h:inputText id="nodeName" value="#{}" />
> <h:outputLabel for="nodeDescription" value="Descripció"/>
> <h:inputText id="nodeDescription" value="#{treeManager.selectedNode.description}"
> <h:outputLabel for="ambitType" value="Àmbit"/>
> <h:selectOneMenu id="ambitType" value="#{treeManager.selectedNode.ambit}">
>   <f:selectItem itemLabel="Global" itemValue="global"/>
>   <f:selectItem itemLabel="Organisme" itemValue="organisme"/>
>   <f:selectItem itemLabel="Procediment" itemValue="procediment"/>
> </h:selectOneMenu>
> .... 
> When I try the JSF I get this error.
> |javax.faces.FacesException: Exception while calling encodeEnd on component : {Component-Path
: [Class: org.ajax4jsf.component.AjaxViewRoot,ViewId: /dissenyador/estructures.jsp][Class:
javax.faces.component.html.HtmlPanelGrid,Id: j_id_jsp_305935947_1]}|
> | at javax.faces.component.UIComponentBase.encodeEnd(|
> Caused by: ...
> |Caused by: org.apache.jasper.el.JspPropertyNotFoundException: /dissenyador/estructures.jsp(60,8)
'#{treeManager.selectedNode.ambit}' Target Unreachable, 'selectedNode' returned null|
> | at org.apache.jasper.el.JspValueExpression.getType(|
> | at org.apache.myfaces.shared_impl.renderkit._SharedRendererUtils.findUIOutputConverter(|
> | at org.apache.myfaces.shared_impl.renderkit.RendererUtils.findUIOutputConverter(|
> | at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.findUIOutputConverterFailSafe(|
> | at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.internalRenderSelect(|
> | at org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.renderMenu(|
> | at org.apache.myfaces.shared_impl.renderkit.html.HtmlMenuRendererBase.encodeEnd(|
> | at javax.faces.component.UIComponentBase.encodeEnd(|
> Comments from Simon Kitching on the mailing list:
> Interesting. From the stacktrace it look like the problem is when trying 
> to determine the *type* that this expression returns.
> When actually asking for the value, null is simply returned if the 
> intermediate object is not there.
> But when asking what static type of object would be returned from the 
> bound property, of course there is a real problem if the intermediate 
> node is not there.
> Here's the code from SharedRendererUtils.findUIOutputConverter; the 
> getType call is the problem:
>         Class valueType = vb.getType(facesContext);  // boom when an 
> intermediate node in the EL is null
>         if (valueType == null) return null;
>         if (String.class.equals(valueType)) return null;    //No 
> converter needed for String type
>         if (Object.class.equals(valueType)) return null;    //There is 
> no converter for Object class
> The HtmlRendererUtils.internalRenderSelect uses
>   converter = findUIOutputConverterFailSafe
>  -- which obviously is not quite so "fail safe" :-)
> I'm not quite sure what the converter is being used for during rendering 
> of the select component, but I do know that the rules about converters 
> and select-components are quite complex. The HTML select component must 
> always render strings for its options, but JSF requires typed objects to 
> be passed between the select *component* and the backing beans. So 
> conversions are required to be invoked at various times.
> I think a JIRA issues should definitely be filed for this. If a 
> converter is optional here, then the code should catch this exception 
> and not use a converter. Even if a converter is mandatory (ie an error 
> should be reported if the value-type cannot be determined) then at least 
> the error reporting needs to be improved. And it is definitely a myfaces 
> issue, not a Geronimo one.

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:!default.jspa
For more information on JIRA, see:


View raw message