<p:autocomplete> Multiples relacionados
Last updated
Last updated
public class Carrera {
@Id
private Integer idcarrera;
private String descripcion;
private String activo;
@Referenced(documment = "Facultad",
field = "idfacultad", javatype = "Integer", lazy = false,
repository = "com.avbravo.commonejb.repository.FacultadRepository")
Facultad facultad;
@Embedded
List<UserInfo> userInfo;
public Carrera() {
}
//set/get
}public class Facultad {
@Id
private Integer idfacultad;
private String descripcion;
private String activo;
@Embedded
List<UserInfo> userInfo;
public Facultad() {
}
//set/get
}multiple="true"
<p:ajax event="itemSelect" listener="#{solicitudController.handleSelect}"
update=":form:content" />
<p:ajax event="itemUnselect" listener="#{solicitudController.itemUnselect}"
update=":form:content"
/> <p:outputLabel value="#{msg['field.facultad']}" />
<p:autoComplete dropdown="false"
multiple="true"
scrollHeight="250"
size="15"
emptyMessage="#{app['info.nohayregistros']}"
value="#{solicitudController.facultadList}"
completeMethod="#{solicitudController.completeFiltradoFacultad}"
var="p"
required="true"
itemLabel="#{p.descripcion}"
itemValue="#{p}" forceSelection="true">
<f:converter binding="#{facultadConverter}"/>
<f:attribute name="field" value="descripcion"/>
<f:attribute name="fielddropdown" value="false"/>
<f:attribute name="fieldquerylenth" value="1"/>
<p:ajax event="itemSelect" listener="#{solicitudController.handleSelect}"
update=":form:content" />
<p:ajax event="itemUnselect" listener="#{solicitudController.itemUnselect}"
update=":form:content" />
<f:facet name="itemtip">
<h:panelGrid columns="1" cellpadding="5">
<h:outputText value="#{msg['field.descripcion']} #{p.descripcion}" />
</h:panelGrid>
</f:facet>
</p:autoComplete>
<p:outputLabel value="#{msg['field.carrera']}" />
<p:autoComplete dropdown="false"
id="carrera"
multiple="true"
scrollHeight="250"
size="15"
emptyMessage="#{app['info.nohayregistros']}"
value="#{solicitudController.carreraList}"
completeMethod="#{solicitudController.completeFiltradoCarrera}"
var="p"
required="true"
itemLabel="#{p.descripcion}"
itemValue="#{p}" forceSelection="true">
<f:converter binding="#{carreraConverter}"/>
<f:attribute name="field" value="descripcion"/>
<f:attribute name="fielddropdown" value="false"/>
<f:attribute name="fieldquerylenth" value="1"/>
<p:ajax event="itemSelect" listener="#{solicitudController.handleSelect}"
update=":form:content" />
<p:ajax event="itemUnselect" listener="#{solicitudController.itemUnselect}"
update=":form:content" />
<f:facet name="itemtip">
<h:panelGrid columns="1" cellpadding="5">
<h:outputText value="#{msg['field.descripcion']} #{p.descripcion}" />
</h:panelGrid>
</f:facet>
avbravo
</p:autoComplete>@Named
@ViewScoped
public class SolicitudController implements Serializable, IController {
// <editor-fold defaultstate="collapsed" desc="fields">
private static final long serialVersionUID = 1L;
List<Facultad> suggestionsFacultad = new ArrayList<>();
List<Carrera> suggestionsCarrera = new ArrayList<>();
List<Unidad> suggestionsUnidad = new ArrayList<>();```java
// <editor-fold defaultstate="collapsed" desc="completeFiltradoFacultad(String query)">
public List<Facultad> completeFiltradoFacultad(String query) {
suggestionsFacultad = new ArrayList<>();
List<Facultad> temp = new ArrayList<>();
try {
Boolean found = false;
query = query.trim();
if (query.length() < 1) {
return suggestionsFacultad;
}
String field = (String) UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()).getAttributes().get("field");
temp = facultadRepository.findRegexInText(field, query, true, new Document(field, 1));
if (facultadList == null || facultadList.isEmpty()) {
if (!temp.isEmpty()) {
suggestionsFacultad = temp;
}
} else {
if (!temp.isEmpty()) {
temp.stream().forEach(f -> addFacultad(f));
}
}
} catch (Exception e) {
JsfUtil.errorMessage("completeFiltradoFacultad() " + e.getLocalizedMessage());
}
return suggestionsFacultad;
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="completeFiltradoCarrera(String query)">
public List<Carrera> completeFiltradoCarrera(String query) {
suggestionsCarrera = new ArrayList<>();
List<Carrera> temp = new ArrayList<>();
try {
Boolean found = false;
query = query.trim();
if (query.length() < 1) {
return suggestionsCarrera;
}
String field = (String) UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()).getAttributes().get("field");
temp = carreraRepository.findRegexInText(field, query, true, new Document(field, 1));
temp = removeByNotFoundFacultad(temp);
if (carreraList == null || carreraList.isEmpty()) {
if (!temp.isEmpty()) {
suggestionsCarrera = temp;
}
} else {
if (!temp.isEmpty()) {
temp.stream().forEach(c -> addCarrera(c));
}
}
} catch (Exception e) {
JsfUtil.errorMessage("completeFiltradoCarrera() " + e.getLocalizedMessage());
}
return suggestionsCarrera;
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="removeByNotFoundFacultad(List<Carrera> carreraList)">
private List<Carrera> removeByNotFoundFacultad(List<Carrera> carreraList) {
List<Carrera> list = new ArrayList<>();
try {
//1.recorre las facultades
//2.filtra las carreras de esa facultad
//3.crea una lista
//4. luego va agregando esa lista a la otra por cada facultad
if (facultadList == null || facultadList.isEmpty()) {
return list;
}
facultadList.forEach((f) -> {
List<Carrera> temp = carreraList.stream()
.parallel()
.filter(p -> p.getFacultad().getIdfacultad().equals(f.getIdfacultad()))
.collect(Collectors.toCollection(ArrayList::new));
temp.forEach((c) -> {
list.add(c);
});
});
} catch (Exception e) {
JsfUtil.errorMessage("removeByNotFoundFacultad() " + e.getLocalizedMessage());
}
return list;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="itemUnselect">
public void itemUnselect(UnselectEvent event) {
try {
if (carreraList != null && !carreraList.isEmpty()) {
carreraList = removeByNotFoundFacultad(carreraList);
}
} catch (Exception ex) {
JsfUtil.errorMessage("itemUnselec() " + ex.getLocalizedMessage());
}
}// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="foundFacultad(Integer idfacultad)">
private Boolean foundFacultad(Integer idfacultad) {
Boolean _found = true;
try {
Facultad facultad = facultadList.stream() // Convert to steam
.filter(x -> x.getIdfacultad() == idfacultad) // we want "jack" only
.findAny() // If 'findAny' then return found
.orElse(null);
if (facultad == null) {
_found = false;
}
} catch (Exception e) {
JsfUtil.errorMessage("foundFacultad() " + e.getLocalizedMessage());
}
return _found;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="foundCarrera(Integer idcarrera)">
private Boolean foundCarrera(Integer idcarrera) {
Boolean _found = true;
try {
Carrera carrera = carreraList.stream()
.filter(x -> x.getIdcarrera() == idcarrera)
.findAny()
.orElse(null);
if (carrera == null) {
_found = false;
}
} catch (Exception e) {
JsfUtil.errorMessage("foundCarrera() " + e.getLocalizedMessage());
}
return _found;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="addFacultad(Facultad facultad)">
private Boolean addFacultad(Facultad facultad) {
try {
if (!foundFacultad(facultad.getIdfacultad())) {
suggestionsFacultad.add(facultad);
}
} catch (Exception e) {
JsfUtil.errorMessage("addFacultad()" + e.getLocalizedMessage());
}
return false;
}
// </editor-fold>
// <editor-fold defaultstate="collapsed" desc="addCarrera(Carrera carrera)">
private Boolean addCarrera(Carrera carrera) {
try {
if (!foundCarrera(carrera.getIdcarrera())) {
suggestionsCarrera.add(carrera);
}
} catch (Exception e) {
JsfUtil.errorMessage("addCarrera()" + e.getLocalizedMessage());
}
return false;
}
// </editor-fold>