[ 
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.

Reply via email to