我有一个导航portlet,它可以收集所有学生,当学生点击时我发送一个带有被点击学生ID的活动到其他portlet。发送和接收事件不是问题,工作正常。我不能得到的是如何处理对象的id。
如何更新接收事件的portlet以显示他们收到的Object的数据。由于我只获取了id,所以第一个是在DB中搜索并获取alle数据,然后更新portlet视图。
这里是我的EventHandler:
hskaId是我需要的Object的id。
public class ReceivedFeedbackEventHandler implements BridgeEventHandler{
@Override
public EventNavigationResult handleEvent(FacesContext facesContext, Event event) {
EventNavigationResult eventNavigationResult = null;
String eventQName = event.getQName().toString();
if (eventQName.equals("{http://liferay.com/events}ipc.studentSelected")) {
System.out.print("EVENT RECIVED STUDENT");
String hskaId = (String) event.getValue();
}
if(eventQName.equals("{http://liferay.com/events}ipc.projectSelected")) {
System.out.print("EVENT RECIVED PROJECT");
}
return eventNavigationResult;
}
}
在Portlet的ManagedBean中,我调用它来获取hskaId的所有学生。在哪里" hskaId"如果收到的事件价值消失的话,现在就站起来。
Student student = StudentLocalServiceUtil.findByProjectId("hskaId");
如何将收到的事件值提供给ManagedBean并更新视图?
这是一个交叉路口:Link
答案 0 :(得分:3)
您需要通过ManagedBean
以编程方式获取ELContext
。
这是你应该怎么做的:
String elExpression = "#{studentsModelBean}";
ELContext elContext = facesContext.getELContext();
ValueExpression valueExpression = facesContext.getApplication().getExpressionFactory().createValueExpression(elContext, elExpression, StudentsModelBean.class);
StudentsModelBean studentsModelBean = (StudentsModelBean) valueExpression.getValue(elContext);
String hskaId = (String) event.getValue();
studentsModelBean.setStudent(hskaId);
String fromAction = null;
String outcome = "ipc.studentSelected";
eventNavigationResult = new EventNavigationResult(fromAction, outcome);
有一个工作的例子是在Liferay Faces Customers and Bookings portlet demo中完成的。