You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Leonardo Uribe (JIRA)" <de...@myfaces.apache.org> on 2009/05/16 00:05:45 UTC

[jira] Commented: (MYFACES-1891) ClassCastException in converter when Hiding / Showing unselected selectOneRadio

    [ https://issues.apache.org/jira/browse/MYFACES-1891?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12709990#action_12709990 ] 

Leonardo Uribe commented on MYFACES-1891:
-----------------------------------------

The problem described before is a variant of the original exception.

The solution is a little bit different from the proposed on the modified RendererUtils file (but the file helps to find what's wrong, thanks Patrick for the patch). It is add this code to getConvertedStringValue (look the last return):

    public static String getConvertedStringValue(FacesContext context,
                                                 UIComponent component, Converter converter, Object value) {
        if (converter == null) {
            if (value == null) {
                return "";
            }
            else if (value instanceof String) {
                return (String) value;
            } else if (RendererUtils.NOTHING.equals(value)) {
                return "";
            } else {
                throw new IllegalArgumentException(
                    "Value is no String (class=" + value.getClass().getName() + ", value=" + value + ") and component "
                        + component.getClientId(context) + "with path: "
                        + getPathToComponent(component)
                        + " does not have a Converter");
            }
        }

        if (RendererUtils.NOTHING.equals(value))
        {
            return converter.getAsString(context, component, "");
        }
        else
        {
            return converter.getAsString(context, component, value);
        }
    }

If a converter is used and RendererUtils.NOTHING is set, we should call converter.getAsString with empty string as value (right now RendererUtils.NOTHING is passed, but it must not, because this var is used when no selection is set by the user and then pass it as null value).

The fix should be done for both 1.1 and 1.2 branches

> ClassCastException in converter when Hiding / Showing unselected selectOneRadio
> -------------------------------------------------------------------------------
>
>                 Key: MYFACES-1891
>                 URL: https://issues.apache.org/jira/browse/MYFACES-1891
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 1.2.3
>         Environment: MyFaces 1.2.3, Spring WebFlow 2.0.2, RichFaces 3.2.1, Tomahawk 1.1.6, Facelets 1.1.15.B1, Tomcat 6.0.16
>            Reporter: Patrick Schmidt
>            Assignee: Leonardo Uribe
>             Fix For: 1.1.6
>
>         Attachments: example.zip, MYFACES-1891-custom-converter.patch, RendererUtils.patch, RendererUtils_1.2.6_patched.java
>
>
> See the attached example.
> When the block with the selectOneRadio ist shown, then hidden and then shown again a ClassCastException occurs in the Converter. The selectOneRadio has as submittedValue org.apache.myfaces.shared_impl.renderkit.RendererUtils$1, for which the conversion is done.
> javax.faces.FacesException: Exception while calling encodeEnd on component : {Component-Path : [Class: org.ajax4jsf.component.AjaxViewRoot,ViewId: /WEB-INF/pages/schnellerfassung/dea/dea.xhtml][Class: javax.faces.component.html.HtmlForm,Id: form][Class: org.apache.myfaces.custom.div.Div,Id: hideableBlock][Class: javax.faces.component.html.HtmlSelectOneRadio,Id: selectOneRadio]}
> 	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:610)
> 	at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:286)
> 	at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:262)
> 	at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:284)
> 	at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:262)
> 	at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:284)
> 	at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:125)
> 	at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxChildren(AjaxChildrenRenderer.java:68)
> 	at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:116)
> 	at org.ajax4jsf.renderkit.AjaxContainerRenderer.encodeAjax(AjaxContainerRenderer.java:123)
> 	at org.ajax4jsf.component.AjaxViewRoot.encodeAjax(AjaxViewRoot.java:673)
> 	at org.ajax4jsf.component.AjaxViewRoot.encodeChildren(AjaxViewRoot.java:544)
> 	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:239)
> 	at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
> 	at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
> 	at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:189)
> 	at org.springframework.faces.webflow.JsfView.render(JsfView.java:92)
> 	at org.springframework.webflow.engine.ViewState.render(ViewState.java:240)
> 	at org.springframework.webflow.engine.ViewState.resume(ViewState.java:199)
> 	at org.springframework.webflow.engine.Flow.resume(Flow.java:535)
> 	at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:261)
> 	at org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:153)
> 	at org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:173)
> 	at org.springframework.webflow.mvc.servlet.FlowController.handleRequest(FlowController.java:172)
> 	at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
> 	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
> 	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:809)
> 	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
> 	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> 	at com.metzler.ec.web.filter.RendererFilter.doFilter(RendererFilter.java:183)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> 	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:154)
> 	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:260)
> 	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:366)
> 	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:493)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> 	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:359)
> 	at org.springframework.security.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
> 	at org.springframework.security.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
> 	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
> 	at org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101)
> 	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
> 	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
> 	at org.springframework.security.providers.anonymous.AnonymousProcessingFilter.doFilterHttp(AnonymousProcessingFilter.java:105)
> 	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
> 	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
> 	at org.springframework.security.ui.rememberme.RememberMeProcessingFilter.doFilterHttp(RememberMeProcessingFilter.java:116)
> 	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
> 	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
> 	at org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter.doFilterHttp(SecurityContextHolderAwareRequestFilter.java:91)
> 	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
> 	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
> 	at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:268)
> 	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
> 	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
> 	at org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:268)
> 	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
> 	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
> 	at org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:87)
> 	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
> 	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
> 	at org.springframework.security.ui.SessionFixationProtectionFilter.doFilterHttp(SessionFixationProtectionFilter.java:61)
> 	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
> 	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
> 	at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:229)
> 	at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
> 	at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:371)
> 	at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:174)
> 	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
> 	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
> 	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
> 	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
> 	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
> 	at java.lang.Thread.run(Thread.java:595)
> Caused by: javax.faces.convert.ConverterException: java.lang.ClassCastException: org.apache.myfaces.shared_impl.renderkit.RendererUtils$1
> 	at javax.faces.convert.IntegerConverter.getAsString(IntegerConverter.java:85)
> 	at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getConvertedStringValue(RendererUtils.java:628)
> 	at org.apache.myfaces.shared_impl.renderkit.html.HtmlRadioRendererBase.encodeEnd(HtmlRadioRendererBase.java:91)
> 	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:607)
> 	... 87 more
> Caused by: java.lang.ClassCastException: org.apache.myfaces.shared_impl.renderkit.RendererUtils$1
> 	at javax.faces.convert.IntegerConverter.getAsString(IntegerConverter.java:81)
> 	... 90 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.