收到事件后的Portlet IPC



我有一个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演示中有一个工作示例。

相关内容

  • 没有找到相关文章

最新更新