Привет! Я создал собственный конвертер в jsf для поля со списком, используя h: selectOneMenu,
мой код поддержки бина в следующем
@ManagedBean(name="studentMgBean")
public class StudentMBean {
..............
............
.....
public StudentVO getMyStudent(Integer studentId) {
return this.myStudents.get(studentId);
}
private List<SelectItem> studentList;
// getter setter of studentList
private Map<Integer,StudentVO> myStudents;
private StudentVO selectedStudent;
// getter setter of selectedStudent
@PostConstruct
public void loadStudents(){
..........
........
if(this.getStudentList() == null){
this.setStudentList(new ArrayList<SelectItem>());
}else{
this.getStudentList().clear();
}
this.myStudents = new HashMap<Integer, StudentVO>();
while(rs.next()){
vo = new StudentVO(String.valueOf(rs.getInt("studentId")),
rs.getString("studentName"), rs.getString("contactNo"));
selectItem = new SelectItem(vo.getStudentId(), vo.getStudentName());
this.getStudentList().add(selectItem);
this.myStudents.put(Integer.parseInt(vo.getStudentId()),vo);
}
}
}
это мой конвертер,
@FacesConverter(value="studentComboConv")
public class StudentComboBoxConverter implements Converter{
@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
FacesContext ctx = null;
ValueExpression vex = null;
StudentMBean studentMgmtBean = null;
StudentVO studentVO = null;
.........
........
......
vex = ctx.getApplication().getExpressionFactory()
.createValueExpression(ctx.getELContext(),"#{studentMgBean}", StudentMBean.class);
studentMgmtBean = (StudentMBean) vex.getValue(ctx.getELContext());
studentVO = studentMgmtBean.getMyStudent(Integer.parseInt(value));
...........
........
.....
return studentVO;
}
и это мой jsp, где я применяю свой конвертер в поле со списком
<td align="left">SELECT STUDENT</td>
<td align="right">
<h:selectOneMenu value="#{studentMgBean.selectedStudent}" id="cmbo" converter="studentComboConv">
<f:selectItems value="#{studentMgBean.studentList}" />
</h:selectOneMenu>
.....
....
..
Теперь мой вопрос: что эта строка делает в моем конвертере
vex = ctx.getApplication().getExpressionFactory()
.createValueExpression(ctx.getELContext(),"#{studentMgBean}", StudentMBean.class);
studentMgmtBean = (StudentMBean) vex.getValue(ctx.getELContext());
Что делает ctx.getElContext ()?