xmlns selectitems org example java jsf-2 primefaces autocomplete omnifaces

java - selectitems - selectonemenu primefaces



Compatibilidad con POJO para primencias autocompletar utilizando omnifaces (2)

Perdón, pasé por alto una línea de la documentación de ListConverter. Me olvidé de alimentar al ListConverter con la lista original como se menciona a continuación.

<o:converter converterId="omnifaces.ListConverter" list="#{mybean.lstStatus}" />

Lo hice trabajando agregando la línea de código anterior.

El xhtml final se verá a continuación ..

<p:autoComplete id="iterator3" value="#{mybean.objLuStatus}" forceSelection="true" dropdown="true" var="entity" itemLabel="#{entity.strDescColVal}" placeholder="----- Select One -----" itemValue="#{entity}" completeMethod="#{mybean.completeList}"> <f:ajax render="selected_status" /> <o:converter converterId="omnifaces.ListConverter" list="#{mybean.lstStatus}" /> </p:autoComplete>

Gracias al equipo de omnifaces por proporcionar una utilidad tan útil ...

Estoy tratando de usar el componente autocompletar de las primas en mi proyecto, para evitar escribir un convertidor específico para cada objeto de la lista, estoy tratando de usar omnifaces como lo sugerí aquí y aquí, ''BalusC'', traté de replicar exactamente de la misma manera, pero no pude capaz de obtener este trabajo. por favor revise el siguiente fragmento de código y consejo si me falta algo aquí

La primera parte del código [f: selectOneMenu] funciona absolutamente bien sin ningún problema

XHTML

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:ui="http://xmlns.jcp.org/jsf/facelets" xmlns:p="http://primefaces.org/ui" xmlns:f="http://xmlns.jcp.org/jsf/core"> <ui:composition template="WEB-INF/layout/layout.xhtml"> <ui:define name="content"> <h:form> <h:outputText id="selected_status" value="#{mybean.objLuStatus.strDescColVal}" /> <!-- h:selectOneMenu Working fine --> <h:selectOneMenu id="iterator2" value="#{mybean.objLuStatus}" converter="omnifaces.SelectItemsConverter"> <f:selectItem itemLabel="Choose item" noSelectionOption="true" /> <f:selectItems value="#{mybean.lstStatus}" var="entity" itemLabel="#{entity.strDescColVal}" itemValue="#{entity}" /> <f:ajax render="selected_status" /> </h:selectOneMenu> <!-- p:autoComplete is NOT Working --> <p:autoComplete id="iterator3" value="#{mybean.objLuStatus}" converter="omnifaces.ListConverter" dropdown="true" var="entity" itemLabel="#{entity.strDescColVal}" placeholder="----- Select One -----" itemValue="#{entity}" completeMethod="#{mybean.completeList}"> <f:ajax render="selected_status" /> </p:autoComplete> <h:commandButton value="Submit" action="#{mybean.post}" /> </h:form> </ui:define> </ui:composition> </html>

Managed Bean

import java.io.Serializable; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; import com.ntr.foundation.model.LuStatus; @ManagedBean(name = "mybean") @ViewScoped public class MyManagedBean extends BaseManagedBean implements Serializable { List<LuStatus> lstStatus; LuStatus objLuStatus; @PostConstruct public void init() { lstStatus = new ArrayList<LuStatus>(); lstStatus.add(new LuStatus("1", "Draft", "DraftLong")); lstStatus.add(new LuStatus("2", "Approved", "ApprovedLong")); } public List<LuStatus> getLstStatus() { return lstStatus; } public void setLstStatus(List<LuStatus> lstStatus) { this.lstStatus = lstStatus; } public void post() { System.out.println("returned value " + objLuStatus); } public LuStatus getObjLuStatus() { return objLuStatus; } public void setObjLuStatus(LuStatus objLuStatus) { this.objLuStatus = objLuStatus; } public List<LuStatus> completeList(String strQuery) { return lstStatus; } }

Pero estoy obteniendo el error debajo ...

Gracias por adelantado..

Caused by: java.lang.NullPointerException at org.omnifaces.converter.ListConverter.getAsObject(ListConverter.java:39) [omnifaces-1.7.jar:1.7] at org.primefaces.component.autocomplete.AutoCompleteRenderer.getConvertedValue(AutoCompleteRenderer.java:600) [primefaces-4.0.jar:4.0] at javax.faces.component.UIInput.getConvertedValue(UIInput.java:1046) [jsf-api-2.2.4.jar:2.2] at javax.faces.component.UIInput.validate(UIInput.java:976) [jsf-api-2.2.4.jar:2.2]


Yo tuve el mismo problema. No pude usar omnifaces.ListConverter for autocomplete.BalCus podría responder eso.

Pero para auto-complete , pruebe el siguiente generic converter .

import java.util.Map; import java.util.Map.Entry; import java.util.UUID; import java.util.WeakHashMap; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.convert.Converter; import javax.faces.convert.FacesConverter; @FacesConverter(value = "entityConverter") public class EntityConverter implements Converter { private static Map<Object, String> entities = new WeakHashMap<Object, String>(); @Override public String getAsString(FacesContext context, UIComponent component, Object entity) { synchronized (entities) { if (!entities.containsKey(entity)) { String uuid = UUID.randomUUID().toString(); entities.put(entity, uuid); return uuid; } else { return entities.get(entity); } } } @Override public Object getAsObject(FacesContext context, UIComponent component, String uuid) { for (Entry<Object, String> entry : entities.entrySet()) { if (entry.getValue().equals(uuid)) { return entry.getKey(); } } return null; } }