Я использую 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>
Java
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;
}
}