I am getting this same problem, i.e. the population of my combo is all fine, but when i submit I get a validation error with a message "Value is not a valid option".

Is there a work around?

Thanks,

Emmanuel

On 10/6/05, Thomas A. Valletta (JIRA) <[email protected]> wrote:
    [ http://issues.apache.org/jira/browse/MYFACES-669?page=comments#action_12331525 ]

Thomas A. Valletta commented on MYFACES-669:
--------------------------------------------

So I have tracked this same issue.  The converter is getting a java.lang.String instead of the expected object after a page is submitted.  This seems to be occurring because the HtmlRendererUtils.decodeUISelectOne() sets the submitted value to the value of paramMap.get(clientId).  Code from MyFaces 1.1:

        ...
        Map paramMap = facesContext.getExternalContext()
                .getRequestParameterMap();
        String clientId = component.getClientId(facesContext);
        if (paramMap.containsKey(clientId)) {
            //request parameter found, set submitted value
            ((EditableValueHolder) component).setSubmittedValue(paramMap
                    .get(clientId));
        } else {
        ...

but then if you step through the encodeEnd:

HtmlSelectOneMenu(UIComponentBase).encodeEnd(FacesContext) line: 331
HtmlMenuRenderer(HtmlMenuRendererBase).encodeEnd(FacesContext, UIComponent) line: 54
HtmlRendererUtils.renderMenu(FacesContext, UISelectOne, boolean) line: 251
HtmlRendererUtils.internalRenderSelect(FacesContext, UIComponent, boolean, int, boolean) line: 295
HtmlRendererUtils.getSubmittedOrSelectedValuesAsSet (boolean, UIComponent, FacesContext, Converter) line: 327

you find this code in the HtmlRendererUtils.getSubmittedOrSelectedValuesAsSet that calls the getConvertedStringValue on the lookup which is set to the same submitted value.

            ...
            UISelectOne uiSelectOne = (UISelectOne) uiComponent;
            Object lookup = uiSelectOne.getSubmittedValue();
            if (lookup == null)
            {
                lookup = uiSelectOne.getValue();
            }
            if(RendererUtils.NOTHING.equals(lookup))
            {
                lookupSet = Collections.EMPTY_SET;
            }
            else
            {
                String lookupString = RendererUtils.getConvertedStringValue(facesContext, uiComponent, converter, lookup);
                lookupSet = Collections.singleton(lookupString);
            }
            ...

So the getConvertedStringValue calls the converter and passes in the string from the paramMap.  This will probably cause any number of errors in your converter.

Tom

> Validation error
> ----------------
>
>          Key: MYFACES-669
>          URL: http://issues.apache.org/jira/browse/MYFACES-669
>      Project: MyFaces
>         Type: Bug
>   Components: General
>     Versions: 1.1.0
>  Environment: XP, IE, jboss-4.0.2
>     Reporter: hovan

>
> I got the validation error today by trying to do the 'smart thing'. Basically i have the list of objects and display as the combo box. What i do before work very fine because all thing is string. This time i try to populate directly my objects to the combo box by specify the converter. The result is OK, i got what i want but when i submit the form i got the Validation error. The code simple like this:
> <h:selectOneMenu id="S1" value = "#{csCardRequestHandler.suffixesModel[0].selectedValue}"
>                       disabled="#{csCardRequestHandler.suffixesModel[0].disableSelect}">
>                       <f:selectItems value="#{csCardRequestHandler.suffixesModel[0].availableItems}"/>
>                       <f:converter converterId="com.ps.cardservices.SuffixFieldConverter"/>
>                       <!--f:validator validatorId="com.ps.cardservices.NullValidator"/-->
>               </h:selectOneMenu>
> Then i thought because of my custom converter so i try to specify the NullValidator just do nothing, still it keeps saying 'ValidatorError'
> One more thing i love to report, on my converter method:
> public String getAsString(FacesContext context, UIComponent component, Object object) throws ConverterException;
> While some tim i get the object as java.lang.String instead of my object type?
> Regards,
> hovan.

--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


Reply via email to