[ https://issues.apache.org/jira/browse/MYFACES-1904?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13246241#comment-13246241 ]
Julien Houllier commented on MYFACES-1904: ------------------------------------------ Hi, 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: https://issues.apache.org/jira/browse/MYFACES-1904 > 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="#{treeManager.selectedNode.name}" /> > <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(UIComponentBase.java:610)| > 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(JspValueExpression.java:61)| > | at > org.apache.myfaces.shared_impl.renderkit._SharedRendererUtils.findUIOutputConverter(_SharedRendererUtils.java:58)| > | at > org.apache.myfaces.shared_impl.renderkit.RendererUtils.findUIOutputConverter(RendererUtils.java:391)| > | at > org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.findUIOutputConverterFailSafe(HtmlRendererUtils.java:393)| > | at > org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.internalRenderSelect(HtmlRendererUtils.java:316)| > | at > org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils.renderMenu(HtmlRendererUtils.java:288)| > | at > org.apache.myfaces.shared_impl.renderkit.html.HtmlMenuRendererBase.encodeEnd(HtmlMenuRendererBase.java:57)| > | at > javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:607)| > 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: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira