>我有 2 个相互关联的数据库表;
员工和联系方式
我想为员工创建一个下拉菜单,并显示员工的名字和姓氏,它们是联系人表中的一列。
<h:selectOneMenu id="employeeDropdown" value="#{employeeController.activeEmployee}">
<s:selectItems id="activeEmployeeList" value="#{employeeController.activeEmployees}" var="emp" itemValue = "#{emp}" label="#{emp.contact.firstName}" />
</h:selectOneMenu>
联系人表允许名字列和姓氏列为空,因为它允许空字符串,选择项上显示的某些值为空。
如何防止显示/呈现这些空名字或空姓氏?
就像@subodh-joshi说的那样,你可以用getActiveEmployees
方法过滤EmployeeController
没有名字或姓氏的员工:
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;
}
或者更好的是,您可以返回一个List<SelectItem>
:
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;
}
返回SelectItem
的List
则无需使用f:selectItems
的itemValue
和itemLabel
属性。