When I implement p:autoComplete without the selectListener property, the value of the component doesn't persist in the managed bean. It's a bug or it's my code?
This is my code
XHTML (a part of it)
Code: Select all
<h:outputText value="País:" styleClass="text" />
<p:autoComplete value="#{persona.paísSelected}"
var="país" itemLabel="#{país.país}" itemValue="#{país}"
completeMethod="#{persona.autocompletePaíses}" converter="países"
maxResults="8" selectListener="#{persona.handleSelect}"
forceSelection="true" onSelectUpdate="growl" />
Code: Select all
package ar.com.fatarco.model.converters;
import ar.com.fatarco.model.dao.PersonaDAO;
import ar.com.fatarco.model.entities.País;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
/**
*
* @author pitutos
*/
public class PaísConverter implements Converter {
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
try {
return PersonaDAO.getPaís(value);
} catch (SQLException ex) {
Logger.getLogger(PaísConverter.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value) {
if (value != null || !value.equals("")) {
País país = (País) value;
return país.getPaís();
}
return "";
}
}
Code: Select all
package ar.com.fatarco.controllers;
import ar.com.fatarco.model.dao.PersonaDAO;
import ar.com.fatarco.model.entities.País;
import ar.com.fatarco.model.entities.Persona;
import ar.com.fatarco.model.entities.Provincia;
import ar.com.fatarco.model.entities.TipoDocumento;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.event.SelectEvent;
/**
*
* @author pitutos
*/
@ManagedBean(name="persona")
@ViewScoped
public class PersonaController implements Serializable {
private Persona persona;
private List<TipoDocumento> tiposDocumentos;
private List<País> países;
private List<Provincia> provincias;
private País paísSelected;
private Provincia provinciaSelected;
/** Creates a new instance of PersonaController */
public PersonaController() {
persona = new Persona();
populateTiposDocumentos();
}
public Persona getPersona() {
return persona;
}
public void setPersona(Persona persona) {
this.persona = persona;
}
private void populateTiposDocumentos() {
try {
tiposDocumentos = PersonaDAO.getTiposDocumentos();
} catch (SQLException ex) {
Logger.getLogger(PersonaController.class.getName()).log(Level.SEVERE, null, ex);
}
}
public List<País> autocompletePaíses(String paísQuery) {
try {
return PersonaDAO.getPaíses(paísQuery);
} catch (SQLException ex) {
Logger.getLogger(PersonaController.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
public List<Provincia> autocompleteProvincias(String provinciaQuery) {
try {
int idPaís = paísSelected.getIdPaís();
return PersonaDAO.getProvincias(idPaís, provinciaQuery);
} catch (SQLException ex) {
Logger.getLogger(PersonaController.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
public List<TipoDocumento> getTiposDocumentos() {
return tiposDocumentos;
}
public List<País> getPaíses() {
return países;
}
public List<Provincia> getProvincias() {
return provincias;
}
public País getPaísSelected() {
return paísSelected;
}
public void setPaísSelected(País paísSelected) {
this.paísSelected = paísSelected;
}
public Provincia getProvinciaSelected() {
return provinciaSelected;
}
public void setProvinciaSelected(Provincia provinciaSelected) {
this.provinciaSelected = provinciaSelected;
}
public void handleSelect(SelectEvent event) {
// TODO: No persiste el valor si esta propiedad
}
}