You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by Jacob Hookom <ja...@hookom.net> on 2006/07/14 03:55:36 UTC
Re: selectOneMenu error
It looks like you have a good usecase setup for showing the error, but I
don't think the selectOneRadio component should enforce the use of a
converter if the value is not a string-- EL can handle putting anything
to a String without explicit converters.
[cc'ing MyFaces Dev]
-- Jacob
Mike Lewis wrote:
> Hi all
>
> I've got a simple form that contains a selectOneMenu and
> selectOneRadio with required="true" attributes and a commandButton.
> The page also contains 3 links to the same form:
>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
> <html xmlns="http://www.w3.org/1999/xhtml"
> xmlns:ui="http://java.sun.com/jsf/facelets"
> xmlns:h="http://java.sun.com/jsf/html"
> xmlns:f="http://java.sun.com/jsf/core">
> <head>
> <title>
> Choose a Pet
> </title>
> <link rel="stylesheet" type="text/css" href="styles.css"/>
> </head>
> <body>
> <p>
> Choose a Pet
> </p>
> <p>
> <form jsfc="h:form" id="petForm">
>
> Pet Type
> <h:selectOneMenu id="type" value="#{testController.type}"
> required="true">
> <f:selectItems value="#{testController.typeItems}"/>
> </h:selectOneMenu>
> <br/>
>
> Pet Color
> <h:selectOneRadio id="color" layout="lineDirection"
> value="#{testController.color}" required="true">
> <f:selectItems value="#{testController.colorItems}"/>
> </h:selectOneRadio>
> <br/>
>
> <p>
> <input jsfc="h:commandButton" id="submit" type="submit"
> value="Submit" action="showTestForm"/>
> </p>
> </form>
> </p>
>
> <p>
> <span jsfc="h:messages" id="errorMessages"
> errorClass="errorMessage" showDetail="true" showSummary="false"/>
> </p>
>
> <a href="testForm.jsf">plain reload</a><br/>
> <a jsfc="h:outputLink" href="testForm.jsf">outputLink reload</a><br/>
> <form jsfc="h:form" id="linkForm">
> <a jsfc="h:commandLink" href="testForm.jsf"
> action="showTestForm">commandLink reload</a>
> </form>
>
> </body>
> </html>
>
> When I submit the form with no selections made, the form is
> redisplayed with error messages as expected. Now if I click on the
> "plainReload" or "outputLink" hyperlinks, I get the following error:
>
> Value is no String and component petForm:colorwith path:
> {Component-Path : [Class: javax.faces.component.UIViewRoot,ViewId:
> /testForm.xhtml][Class: javax.faces.component.html.HtmlForm,Id:
> petForm][Class: javax.faces.component.html.HtmlSelectOneRadio,Id:
> color]} does not have a Converter
>
> Opening the Component Tree tab on the error page I get the following:
>
> <UIViewRoot locale="en" renderKitId="HTML_BASIC" rendered="true"
> transient="false" viewId="/testForm.xhtml">
>
> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
> "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
>
> <html xmlns=" http://www.w3.org/1999/xhtml"> <head> <title> Choose
> a Pet </title> <link rel="stylesheet" type="text/css"
> href="styles.css"/> </head> <body> <p> Choose a Pet </p> <p>
>
> <HtmlForm enctype="application/x-www-form-urlencoded" id="petForm"
> rendered="true" submitted="false" transient="false">
>
> Pet Type
>
> <HtmlSelectOneMenu disabled="false" id="type"
> immediate="false" localValueSet="false" readonly="false"
> rendered="true" required="true" submittedValue=""
> transient="false" valid="true">
>
> <UISelectItems id="_id3" rendered="true" transient="false"/>
>
> </HtmlSelectOneMenu>
>
> <br/> Pet Color
>
> <HtmlSelectOneRadio border="-2147483648" disabled="false"
> id="color" immediate="false" layout="lineDirection"
> localValueSet="false" readonly="false" rendered="true"
> required="true"
> submittedValue="org.apache.myfaces.shared_impl.renderkit.RendererUtils$1@836727"
> transient="false" valid="true">
>
> <UISelectItems id="_id5" rendered="true" transient="false"/>
>
> </HtmlSelectOneRadio>
>
> <br/> <p>
>
> <HtmlCommandButton action="showTestForm" disabled="false"
> id="submit" immediate="false" readonly="false" rendered="true"
> transient="false" type="submit" value="Submit"/>
>
> </p>
>
> </HtmlForm>
>
> </p> <p>
>
> <HtmlMessages errorClass="errorMessage" globalOnly="false"
> id="errorMessages" layout="list" rendered="true" showDetail="true"
> showSummary="false" tooltip="false" transient="false"/>
>
> </p> <a href="testForm.jsf">reload</a><br/>
>
> <HtmlOutputLink id="_id10" rendered="true" transient="false">
>
> reload
>
> </HtmlOutputLink>
>
> <br/>
>
> <HtmlForm enctype="application/x-www-form-urlencoded"
> id="linkForm" rendered="true" submitted="false" transient="false">
>
> <HtmlCommandLink action="showTestForm" id="_id13"
> immediate="false" rendered="true" transient="false">
>
> another reload
>
> </HtmlCommandLink>
>
> </HtmlForm>
>
> </body> </html>
>
> </UIViewRoot>
>
> The culprit appears to be the value of the selectOneRadio component
> which is an instance of
> org.apache.myfaces.shared_impl.renderkit.RendererUtils instead of null.
>
> This doesn't occur with the commandLink but it does if you re-enter
> the url in the browser's command textbox so there's no safe workaround
> that I can see.
>
> Sorry for the noise if this is a myfaces/JSF error.
>
> Thanks,
> Mike
--
--------------------------
Sent from my FrankenBerry Wireless Handheld