1

I keep getting this error addAddress:states: Validation Error: Value is not valid when using <p:selectOneMenu. I tried using the id and got rid of the converter, its doing the same. I tried debugging. Found that the converted is running twice and the last time it is checking blank value and returning null/false. What am I doing wrong? If need any more details let me know?

Code is as follows

Converter

    @FacesConverter(value = "statemasterconverter", forClass = Statemaster.class)
public class StateConverter implements Converter {
    public String getAsString(FacesContext context, UIComponent component,
            Object value) {
        return ConversionHelper.getAsString(value);
    }

    public Object getAsObject(FacesContext context, UIComponent component,
            String value) {
        return ConversionHelper.getAsObject(Statemaster.class, value);
    }
}

Conversion Helper

public final class ConversionHelper {

    private ConversionHelper() {
    }

    @SuppressWarnings("unchecked")
    public static <T> T getAsObject(Class<T> returnType, String value) {
        BigDecimal id = BigDecimal.ZERO;
        if (returnType == null) {
            throw new NullPointerException(
                    "Trying to getAsObject with a null return type.");
        }
        if (value == null) {
            throw new NullPointerException(
                    "Trying to getAsObject with a null value.");
        }

        try {
            id = BigDecimal.valueOf(Long.parseLong(value));
        } catch (NumberFormatException nfe) {
            return null;
        }

        Session session = HibernateUtil.getSessionFactory().openSession();
        try {
            T r = (T) session.load(returnType, id);
            if (r != null)
                Hibernate.initialize(r);
            return r;
        } catch (HibernateException e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
        return null;
    }

    public static String getAsString(Object value) {
        if (value instanceof Gendermaster) {
            Gendermaster result = (Gendermaster) value;
            return String.valueOf(result.getGenderid());
        } else if (value instanceof Salutationmaster) {
            Salutationmaster result = (Salutationmaster) value;
            return String.valueOf(result.getSalutationid());
        } else if (value instanceof Countrymaster) {
            Countrymaster result = (Countrymaster) value;
            return String.valueOf(result.getCountryid());
        } else if (value instanceof Statemaster) {
            Statemaster result = (Statemaster) value;
            return String.valueOf(result.getStateid());
        }
        return null;
    }
}

the xhtml code

                    <p:row>
                        <p:column>
                        Country
                    </p:column>
                        <p:column>
                            <p:selectOneMenu id="country"
                                value="#{customerBean.country.countryid}" required="true">
                                <f:selectItem itemLabel="Select Country" itemValue="" />
                                <f:selectItems value="#{customerBean.countrydropdown}"
                                    var="countrymaster"
                                    itemLabel="#{countrymaster.countryname} - #{countrymaster.countrycodeNn}"
                                    itemValue="#{countrymaster.countryid}" />
                                <p:ajax update="states"
                                    listener="#{customerBean.updateStates()}" />
                            </p:selectOneMenu>
                        </p:column>
                    </p:row>
                    <p:row>
                        <p:column>
                        State
                    </p:column>
                        <p:column>
                            <p:selectOneMenu id="states" required="true"
                                value="#{customerBean.state}" converter="statemasterconverter">
                                <f:selectItem itemValue="" itemLabel="Select State" />
                                <f:selectItems value="#{customerBean.statedropdown}"
                                    var="statemaster"
                                    itemLabel="#{statemaster.statename} - #{statemaster.statecode}"
                                    itemValue="#{statemaster}" />
                            </p:selectOneMenu>
                        </p:column>
                    </p:row>

                        <p:commandButton id="saveBtn" value="Save Salutation"
                            update="msgs"
                                style="float: left;" icon="ui-icon-disk"
                                actionListener="#{customerBean.saveAddress()}" ajax="true" />
                        </p:column>
Presip
  • 46
  • 4

1 Answers1

-1

Use event="valueChange" in Ajax. and try to updated whole form by update="@form". if above code is not work then try update=":id:id" update tag search id within the tag. let consider this code.

<h:form id="myForm">
    <h:sometag id="ineer1">
        <p:ajax update="ineer3"/>// it is **not work**
        <p:ajax update=":myForm:ineer2:ineer2"/>// it is **work**
    </h:sometag>
    <h:sometag id="ineer2">
        <h:someoutfield id="ineer3"/>
     </h:sometag>
<h:/form> 

it is working at my end if not work then let me know. Happy to help :)

ankush yadav
  • 422
  • 3
  • 13