收到事件后的 Portlet IPC

Portlet IPC after received Event

我有一个显示所有学生的导航 portlet,当一个学生被点击时,我会向其他 portlet 发送一个带有被点击学生 ID 的事件。发送和接收事件不是问题,可以正常工作。我不明白的是如何处理对象的 ID。

如何更新接收事件的 portlet 以显示它们接收到的对象的数据。由于我只得到id,第一步是在数据库中搜索并获取所有数据,然后更新portlets视图。

这是我的事件处理程序:

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 Bookings portlet demo 中有一个这样的工作示例。