I'd say the issue exist in
org.apache.myfaces.shared_impl.renderkit.getConvertedStringValue(FacesContext
context, UIComponent component, Converter converter, Object value). In the
case of rendering a selectRadio and the underlying model property type is an
Enum, this method is called with the converter be an instance of
javax.faces.convert.EnumConverter and the value be an instance of
java.lang.String. Then, ideally, it may just return the value (No conversion
is needed). But it delegates to
javax.faces.convert.EnumConverter.getAsString(..) which expects the value to
be an instance of the Enum, thus the following exception is thrown.

javax.faces.convert.ConverterException: form:clientIdType: 'CardNumber' must
be convertible to an enum.
        at
javax.faces.convert.EnumConverter.getAsString(EnumConverter.java:82)
        at
org.apache.myfaces.shared_impl.renderkit.RendererUtils.getConvertedStringValue(RendererUtils.java:640)
        at
org.apache.myfaces.shared_impl.renderkit.html.HtmlRadioRendererBase.renderGroupOrItemRadio(HtmlRadioRendererBase.java:200)
        at
org.apache.myfaces.shared_impl.renderkit.html.HtmlRadioRendererBase.encodeEnd(HtmlRadioRendererBase.java:106)
        at
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:486)
        at
org.apache.myfaces.shared_impl.renderkit.RendererUtils.renderChild(RendererUtils.java:527)
        at
org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.renderChildren(HtmlGridRendererBase.java:296)
        at
org.apache.myfaces.shared_impl.renderkit.html.HtmlGridRendererBase.encodeEnd(HtmlGridRendererBase.java:131)
        at
javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:486)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:618)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:614)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:614)
        at javax.faces.component.UIComponent.encodeAll(UIComponent.java:614)
        at
org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1117)
        at
org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:231)
        at
org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:122)
        at
org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:207)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:191)


My code snippets:

In clientId.xhtml
        <h:selectOneRadio id="clientIdType" value="#{model.clientIdType}">
          <f:selectItem itemValue="CardNumber"
itemLabel="#{msgs['labelCardNumber.full']}:" />
          <f:selectItem itemValue="UserId"
itemLabel="#{msgs['labelUserId.full']}:" />
        </h:selectOneRadio>

In MyModel.java
    private ClientIdType clientIdType;

    public ClientIdType getClientIdType() {
        return clientIdType;
    }

    public void setClientIdType(ClientIdType clientIdType) {
        this.clientIdType = clientIdType;
    }

In ClientIdType.java
public enum ClientIdType {
    CardNumber("labelCardNumber.short", "labelCardNumber.full"),
    UserId("labelUserId.short", "labelUserId.full");

    private final String shortLabelId;
    private final String fullLabelId;

    private ClientIdType(String shortLabelId, String fullLabelId) {
        this.shortLabelId = shortLabelId;
        this.fullLabelId = fullLabelId;
    }

    public String getShortLabelId() {
        return shortLabelId;
    }

    public String getFullLabelId() {
        return fullLabelId;
    }
}

-- 
View this message in context: 
http://old.nabble.com/MyFaces-2.0.0---Problem-of-rendering-Enum-tp28681934p28681934.html
Sent from the MyFaces - Users mailing list archive at Nabble.com.

Reply via email to