[
https://issues.apache.org/jira/browse/MYFACES-2099?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12711980#action_12711980
]
Matthias Weßendorf commented on MYFACES-2099:
---------------------------------------------
can you add this to myfaces 2.0 ?
> Detection of empty selection in UISelectOne through RenderUtils.NOTHING is
> faulty
> ---------------------------------------------------------------------------------
>
> Key: MYFACES-2099
> URL: https://issues.apache.org/jira/browse/MYFACES-2099
> Project: MyFaces Core
> Issue Type: Bug
> Affects Versions: 1.1.7-SNAPSHOT, 1.2.6-SNAPSHOT
> Environment: All
> Reporter: Andreas Watermeyer
> Assignee: Leonardo Uribe
> Fix For: 1.1.7-SNAPSHOT, 1.2.7-SNAPSHOT
>
>
> RendererUtils.getConvertedUIOutputValue() throws an IllegalArgumentException
> because it does not recognize RendererUtils.NOTHING (see stacktrace below).
> Problem is the following code, taken from
> RendererUtils.getConvertedUIOutputValue():
> public static Object getConvertedUIOutputValue(FacesContext facesContext,
> UIOutput output,
> Object submittedValue)
> throws ConverterException {
> if (submittedValue != null && !(submittedValue instanceof String)) {
> if (RendererUtils.NOTHING.equals(submittedValue)) {
> return null;
> }
> throw new IllegalArgumentException("Submitted value of type
> String for component : " +
> getPathToComponent(output) + "expected");
> }
> Problem: In my case "submittedValue" *is* an instance of
> RendererUtils.NOTHING. However, this is not recognized by the above code
> because it was serialized.
> As one can see at the declaration of RendererUtils.NOTHING, it is
> intentionally Serializable. Unfortunately the detection of the value works
> only for not-serialized values.
> Possible solution: Implement RendererUtils.NOTHING.equals() to recognize
> serialized versions of RendererUtils.NOTHING.
> Application Background (Further explanation of the context):
> During "apply request values" the component gets RendererUtils.NOTHING
> assigned as "submittedValue". Usually the submitted value is resetted in the
> "process validations" phase. But in this case "process validations" is never
> executed because FacesContext.renderResponse() is called earlier. So, the
> submitted value (= RendererUtils.NOTHING) remains in the component, gets
> serialized. On the next round trip the component doesnt receive a "process
> decodes" because it is disabled, but "process validations" is called on the
> component, which fails with the attached stack trace.
> ---------
> Stacktrace:
> java.lang.IllegalArgumentException: Submitted value of type String for
> component : {.....} expected
>
> org.apache.myfaces.shared_impl.renderkit.RendererUtils.getConvertedUIOutputValue(RendererUtils.java:591)
>
> org.apache.myfaces.shared_impl.renderkit.html.HtmlMenuRendererBase.getConvertedValue(HtmlMenuRendererBase.java:126)
> javax.faces.component.UIInput.getConvertedValue(UIInput.java:396)
> javax.faces.component.UIInput.validate(UIInput.java:350)
> javax.faces.component.UIInput.processValidators(UIInput.java:184)
>
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
>
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
>
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
>
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
>
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
>
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
>
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
>
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
> javax.faces.component.UIForm.processValidators(UIForm.java:73)
>
> javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:627)
> javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:149)
>
> org.apache.myfaces.lifecycle.ProcessValidationsExecutor.execute(ProcessValidationsExecutor.java:32)
>
> org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:95)
>
> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:70)
> javax.faces.webapp.FacesServlet.service(FacesServlet.java:139)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.