我有一个Navigation portlet,它显示所有的学生,当一个学生被单击时,我发送一个带有被单击学生id的事件给其他portlet。发送和接收事件不是问题,这很好。我不明白的是,如何处理对象的id。
如何更新接收事件的portlet以显示它们接收到的Object的数据?由于我只获取id,因此第一步是在DB中搜索并获取所有数据,然后更新portlet视图。
这里是我的EventHandler:
hskaId是我需要的对象的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
您需要通过ELContext
以编程方式获得ManagedBean
。
你应该这样做:
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 booking portlet演示中有一个工作示例。