Portlet IPC收到活动后

时间:2015-06-10 08:14:22

标签: jsf events event-handling ipc portlet

我有一个导航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

1 个答案:

答案 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中完成的。