Using the JSF converter in h: selectOneMenu results in a validation error: value is invalid

I have this SelectOneMenu:

<h:selectOneMenu value="#{orderController.requestVO.requestSituation}">
    <f:converter converterId="ComboConverter"/>
    <f:selectItems value="#{orderController.requestSituation}" var="requestSituation"
                                                   itemLabel="#{requestSituation.description}" itemValue="#{requestSituation}" />
</h:selectOneMenu>

requestSituationis ArrayListfilled RequestSituationVO It is filled correctly by generating this HTML:

<select name="j_idt14:j_idt20" size="1">
        <option value="13">Pedido Recusado</option>
    <option value="11">Pedido Validado</option>
    <option value="12" selected="selected">Pedido Confirmado</option>
    <option value="12" selected="selected">Pedido Faturado</option>
</select>

I have it Converter, and that's where I got confused, I read a lot, and I know what it should do, but not how it works.

There he is:

@FacesConverter(value = "ComboConverter", forClass = RequestSituationVO.class)
public class ComboConverter implements Converter
{

    private static RequestSituationVO requestSituationVO = new RequestSituationVO();

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value)
    {
        requestSituationVO.setId(Integer.valueOf(value));
        requestSituationVO = (RequestSituationVO) new RequestSituationBO().getRequestSituation(requestSituationVO).toArray()[0];
        return (RequestSituationVO) requestSituationVO;
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value)
    {
        requestSituationVO = (RequestSituationVO) value;
        String teste = String.valueOf(requestSituationVO.getId());
        return teste;
    }
}

When I submit my page, I think it SelectOneMenuwill automatically set the value for the method requestSituationfrom requestVO. But when I send a message, I get a message Value not validthat refers to mine SelectOneMenu.

I need to set the selected value to mine RequestSituationVOso that I can send it to the Business method.

+3
source share
2

. , ,

'com.example.RequestSituationVO@hashcode' 'null Converter'

. , Object#equals() true . JSF , . :

  • equals() RequestSituationVO .
  • #{orderController.requestSituation} submit.

, . , RequestSituationVO Integer id, , :

@Override
public boolean equals(Object other) {
    return (other instanceof RequestSituationVO) && (id != null)
        ? id.equals(((RequestSituationVO) other).id)
        : (other == this);
}

@Override
public int hashCode() {
    return (id != null)
        ? (this.getClass().hashCode() + id.hashCode())
        : super.hashCode();
}

equals() , . , , #{orderController.requestSituation} submit. , bean - . , , bean.

.

+10

, equals hashCode RequestSituation.
, JSF .

equals, , ,
. (The value is not valid.)

+3

All Articles