1

jsf ポートレットから 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 タイプである必要があると思いますよね? なぜそうではないのだろうか。

<-変更->

今、私はアクションレスポンスを取得しています。1.1 ではなく jsf 1.2 を使用していて、別のシステムにいることが原因である可能性があります。

ポートレット A の場合、次のように Bean にイベントを設定しました。

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

次に、ポートレット B のポートレット クラスでは、次のようにしています。

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");
}

}
}

そこで私がやろうとしているのは、イベントを設定してポートレット A のボタンをクリックしたときに、ポートレット B のデフォルト ビューを /JsfB.jsp から /JsfB_alt.jsp に変更することです。

しかし、「発生したイベント」が印刷されていないことがわかるため、イベントはリッスンされません。

@Override を使用して processIPCEvent を processEvent に変更しようとしましたが、まだ呼び出されていません。イベントが発生したときに自動的に呼び出されることを願っていますよね?ar.setEvent() でのイベントの設定に問題があると思います。どう思いますか?

参考までに、私は weblogic サーバー 10.3 と jsf 1.2 を使用しています。

何が問題なのか提案してください。

4

2 に答える 2

0

これは、アプリケーションで使用されているポートレットブリッジの実装が原因である可能性があります。

JSF実装はサーブレットAPIで動作するように記述されているため、ポートレットの箱から出して動作することはありません。したがって、コンテキストが作成されると、ポートレットの応答はサーブレットの応答に適合される可能性があります。コンテキストは、作成時に渡されたオブジェクトを返すだけです。

私が使用したブリッジ(IBM実装)では、これらのラッパーもポートレットインターフェースを実装していますが、そうする必要があることを認識していません。

より多くの情報に基づいた回答が必要な場合は、プラットフォーム、ライブラリ、およびそれらのバージョンを記載することをお勧めします。

于 2012-12-28T16:10:26.753 に答える
0

<event-definition> and <supported-processing-event>portlet.xml でJava イベント (jsr) を使用して定義したところ、リッスンできるようになりました。

于 2013-01-01T14:21:50.780 に答える