2016-07-14 11 views
0

Ich habe 2 Datenbanktabellen, die miteinander verwandt sind;Wie verhindert man, dass f: selectItems leere Zeilen anzeigt?

Mitarbeiter und Kontakt

Ich möchte ein Dropdown-Menü für Mitarbeiter erstellen und anzuzeigen Mitarbeiter Vornamen und Nachnamen, die eine Spalte in der Contact-Tabelle sind.

<h:selectOneMenu id="employeeDropdown" value="#{employeeController.activeEmployee}"> 
     <s:selectItems id="activeEmployeeList" value="#{employeeController.activeEmployees}" var="emp" itemValue = "#{emp}" label="#{emp.contact.firstName}" /> 
</h:selectOneMenu> 

Die Kontakt Tabelle erlaubt die erste Namensspalte und Nachname Spalte leer zu sein, da es leer einige der angezeigte Wert auf den selectItems sind leere Strings erlaubt.

Wie kann ich verhindern, dass diese leeren Vornamen oder leeren Nachnamen angezeigt/gerendert werden?

+0

Zu der Zeit, wenn Sie List oder List of SelectItem zu dieser Zeit erstellen, können Sie das leere Feld, das als Datensatz in der Liste hinzugefügt werden soll, überprüfen und ignorieren. –

+0

Zwei Lösungen, 1. in dem Moment, in dem Sie sie aus db laden, verwenden Sie einen Flächenkonverter für dieses Dropdown, so dass Sie nur nicht leere Werte zurückgeben. –

Antwort

0

Wie @ Subodh-Joshi sagte, Sie in der getActiveEmployees Methode der EmployeeController die Mitarbeiter ohne Vor- oder Nachnamen filtern:

public List<Employee> getActiveEmployees() { 
    List<Employee> employees = ... // get the active employees list 
    List<Employee> validEmployees = new ArrayList<Employee>(); 

    for (Employee employee : employees) { 
     if ((employee.getFirstName() != null && !employee.getFirstName().trim().isEmpty()) && (employee.getLastName() != null && !employee.getLastName().trim().isEmpty())) { 
      validEmployees.add(employee); 
     } 
    } 

    return validEmployees; 
} 

Oder besser als das, Sie List<SelectItem> zurückkehren können:

public List<SelectItem> getActiveEmployees() { 
    List<Employee> employees = ... // get the active employees list 
    List<SelectItem> validEmployees = new ArrayList<SelectItem>(); 

    for (Employee employee : employees) { 
     if ((employee.getFirstName() != null && !employee.getFirstName().trim().isEmpty()) && (employee.getLastName() != null && !employee.getLastName().trim().isEmpty())) { 
      validEmployees.add(new SelectItem(employee, employee.getContact.getFirstName())); 
     } 
    } 

    return validEmployees; 
} 

Bei Rückgabe eines List von SelectItem müssen die Attribute itemValue und itemLabelf:selectItems nicht verwendet werden.