válido valor validación validaciones validacion reconocer podido mensajes fecha error definir conversión como jsf jpa primefaces

jsf - valor - no se ha podido reconocer como fecha primefaces



El valor del error de validación no es válido (1)

La forma en que especificó el itemValue de <f:selectItems> e implementado el getAsString() del convertidor no es correcto.

Cuando se envía el valor seleccionado, JSF convertirá cityID en City mediante getAsObject() del convertidor. Entonces, JSF validará la City contra el itemValue de <f:selectItems> para ver si realmente es parte de la lista (esto es para evitar hackers que modifique / altere las solicitudes con un valor diferente). Sin embargo, dado que itemValue es cityID que es un Integer la comparación falla para cada elemento de la lista. De ahí el Value not valid error Value not valid .

Necesita cambiar itemValue para que sea City lugar y cambie getAsString() para devolver el cityID :

<p:selectOneMenu id="city" value="#{kkmBean.client.address.city}" style="width: 263px;" converter="cityConveter" required="true" requiredMessage="You must choose one city"> <f:selectItems value="#{kkmBean.cityList}" var="city" itemLabel="#{city.cityName}" itemValue="#{city}"/> </p:selectOneMenu>

y

@Override public String getAsString(FacesContext context, UIComponent component, Object value) { City city = (City) value; return city.getCityID() != null ? String.valueOf(city.getCityID()) : null; }

Resumido: el tipo de itemValue debe ser exactamente el mismo que el tipo del value desplegable y el convertidor debe convertir exactamente entre ese tipo y cadena.

Ver también:

Esta pregunta ya tiene una respuesta aquí:

Sé que este es un error común, y que hay muchas preguntas al respecto, pero debo crear uno nuevo.

Aquí está mi página jsf:

<h:form id="clientCreatingForm"> <p:selectOneMenu id="city" value="#{kkmBean.client.address.city}" style="width: 263px;" converter="cityConveter" required="true" requiredMessage="You must choose one city"> <f:selectItems value="#{kkmBean.cityList}" var="city" itemLabel="#{city.cityName}" itemValue="#{city.cityID}"/> </p:selectOneMenu> <p:commandButton value="Save client" type="button" onclick="confirm.show()" style="margin-top: 20px; margin-left: 30px; width: 180px;" /> <p:commandButton value="Reset fields" type="reset" style="margin-top: 20px; margin-left: 30px; width: 180px;"/> <p:confirmDialog message="Are you sure, you want to save client?" header="Save client" severity="info" widgetVar="confirm"> <p:commandButton value="Yes, I am sure." oncomplete="confirm.hide()" action="#{kkmBean.saveClient}" update=":warnings" style="font-size: 12px;"/> <p:commandButton value="No, I don''t!" onclick="confirm.hide()" type="button" style="font-size: 12px;"/> </p:confirmDialog> </h:form>

Aquí está el frijol administrado:

@ManagedBean(name = "kkmBean") @SessionScoped public class CreatingClientManager implements Serializable { /** Creates a new instance of CreatingClientManager */ public KreiranjeKorisnikaManager() { client= new Client(); client.setAddress(new Address()); cityList = new LinkedList<City>(); cityList = Communication.getInstance().getCitySessionBeanRemote().getCities(); } private Client client; private List<City> cityList; public String startCreatingClent() { return "creating-client"; } /** * @return the client */ public Klijent getClient() { return client; } /** * @param client the client to set */ public void setClient(Client client) { this.Client = client; } /** * @return the cityList */ public List<Grad> getCityList() { return cityList; } /** * @param cityList the cityList to set */ public void setCityList(List<City> cityList) { this.cityList = cityList; } public String saveClient() { System.out.println("i am in saveClient method"); String message = Communication.getInstance().getClientSessionBeanRemote.saveClient(client); FacesContext context = FacesContext.getCurrentInstance(); kontekst.addMessage(message, new FacesMessage(FacesMessage.SEVERITY_INFO, "Success: ", message)); return null; } }

Y finalmente convertidor:

@FacesConverter(forClass=City.class, value="cityConverter") public class CityConverter implements Converter { @Override public Object getAsObject(FacesContext context, UIComponent component, String value) { Integer cityID = Integer.valueOf(value); CreatingClientManager kkm = (CreatingClientManager) ((HttpSession)context.getExternalContext().getSession(true)).getAttribute("kkmBean"); List<Grad> cityList = kkm.getCityList(); for (int i = 0; i < cityList.size(); i++) { City city = cityList.get(i); if(city.getCityID().equals(cityID)) { System.out.println(city.getCityName()); return city; } } return null; } @Override public String getAsString(FacesContext context, UIComponent component, Object value) { return value.toString(); } }

Por supuesto, el problema está en selectOneMenu. Cuando envío el formulario, recibí este molesto error.

Estaba depurando el convertidor y la línea antes de graduarme de regreso, imprimo grad.getImeGrada () y todo está bien, se imprime el nombre (Ime) de la ciudad encontrada (grad). ¿Me estoy perdiendo de algo?

ps Lo siento en mi inglés, espero que entiendas cuál es mi problema.

Casi olvidé mencionar que anulo los métodos equals y hashCode, y estoy seguro de que está bien.