我在我的应用程序中使用PrimeFaces 5.1我使用高级下拉菜单显示学生姓名。我的问题是,如果相同的高级下拉选项用于教授,员工和部门的详细信息。现在我为
中的每个转换器使用单独的类**Object value1 =resolver.getValue(facesContext.getELContext(), null, "Student");
Student service = (Student) value1;**
线。 我的疑问是如何替换类名以动态地为所有转换器使用它?
XHTML
<p:selectOneMenu value="#{Student.studentName}" var="bean"
converter="StudentConvertor" >
<f:selectItems value="#{Student.studentNameList}" var="stuVar"
itemLabel="#{stuVar.studName}" itemValue="#{stuVar}"/>
<p:column>
<h:outputText value="#{bean.studName}"/>
</p:column>
<p:ajax event="change" update="studentPanel"
listener="#{Student.studentChangeAction}"/>
</p:selectOneMenu>
爪哇
public class StudentConvertor implements Converter
{
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value)
{
if ((value != null) && (value.trim().length() > 0))
{
try
{
FacesContext facesContext = FacesContext.getCurrentInstance();
ELResolver resolver = facesContext.getApplication().getELResolver();
Object value1 = resolver.getValue(facesContext.getELContext(), null, "Student");
Student service = (Student) value1;
if (service != null)
{
for (Integer studentId : service.getStudentNameList())
{
if (Integer.parseInt(value) == studentId)
{
return studentId;
}
}
}
return null;
}
catch (NumberFormatException e)
{
throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "Conversion Error", "Not a valid value."));
}
}
return null;
}
@Override
public String getAsString(FacesContext context, UIComponent component, Object value)
{
if (value != null)
{
return String.valueOf(((String) value).getStudentId());
}
return null;
}
}
答案 0 :(得分:0)
如果您想要显示所有三个类的相同信息,请说出Id和Name,您可以尝试使用继承:
public class Item{
private Integer Id;
private String name;
//get + set for both
}
public class Student extends Item{}
public class Staff Item{}
public class Department extends Item{}
然后将您的服务方法更改为:
public List<Item> getStudentList();
public List<Item> getStaffList();
public List<Item> getDepartmentList();
最后,在你的xhtml中:
<f:selectItems value="#{Student.studentNameList}" var="item"
itemLabel="#{item.name}" itemValue="#{item.id}"/>
<f:selectItems value="#{Staff.staffNameList}" var="item"
itemLabel="#{item.name}" itemValue="#{item.id}"/>
<f:selectItems value="#{Department.departmentNameList}" var="item"
itemLabel="#{item.name}" itemValue="#{item.id}"/>