Jsf bean动作的ActionResponse对象

时间:2012-12-28 15:32:50

标签: jsf weblogic

当我从jsf portlet点击jsf页面的提交按钮时,会调用jsf bean的mymethod。

<h:commandButton id="id1" action="#{Mybean.mymethod}" value="Click" />

public String mymethod() {

    FacesContext fc = FacesContext.getCurrentInstance();
    Object obj = fc.getExternalContext().getResponse();

    if (obj instanceof ActionResponse){
    System.out.println("ActionResponse !");
}   else if (obj instanceof RenderResponse) {
    System.out.println("RenderResponse !");
}
}

但是没有一种类型满足Response对象。它有什么样的反应? 因为我想确定它是否是ActionResponse,那么我需要设置setEvent方法。 我猜它应该是ActionResponse类型吗?我不知道为什么不是。

&LT; -Modified-&GT;

现在我收到了行动回复。可能是因为我有jsf 1.2而不是1.1而且我在不同的系统中。

对于Portlet A,我在bean中设置了如下事件,

ar.setEvent("showResults", "true"); //ar is ActionResponse

然后在Portlet B的Portlet类中,我按如下方式进行,

public class IPC extends GenericFacesPortlet {

protected void doView(RenderRequest request, RenderResponse response)
throws PortletException, IOException
{
if (request.getAttribute("showResults") == "true") {
request.setAttribute("javax.portlet.faces.viewId", "/JsfB_alt.jsp");
}
super.doView(request, response);

}

@ProcessEvent
public void processIPCEvent(EventRequest eRequest, EventResponse eResponse)
    throws PortletException, IOException
  {
     Event event = eRequest.getEvent();
    if(event.getName().equals("showResults")){
System.out.println("Event encountered !");

    eRequest.setAttribute("showResults", "true");
}

}
}

因此,当我通过设置事件单击Portlet A中的按钮时,我想要做的是从Portlet B的默认视图从/JsfB.jsp更改为/JsfB_alt.jsp。

但事件没有被听,因为我可以看到“遇到的事件”没有被打印出来。

我甚至尝试使用@Override将processIPCEvent更改为processEvent,但仍然没有调用它。我希望在有任何事件时会自动调用,对吧? 我觉得在ar.setEvent()中设置事件有问题 你觉得怎么样?

仅供参考,我使用的是weblogic服务器10.3和jsf 1.2

请说明可能出现的问题。

2 个答案:

答案 0 :(得分:0)

由于您的应用程序中使用了portlet bridge实现,因此可能

由于编写JSF实现以使用servlet API,因此它们不能在portlet中开箱即用。因此,当context is created portlet response可能会适应servlet response时。上下文仅返回在创建时传递给它的对象。

在我使用的桥(IBM实现)中,这些包装器也实现了portlet接口,但我不知道这样做的必要条件。

如果您想要更明智的答案,可能需要说明您的平台,库及其版本。

答案 1 :(得分:0)

我在portlet.xml中使用<event-definition> and <supported-processing-event>定义为java事件(jsr),现在我可以听它了。