1

目標は、次のコードを使用してポートレットへの URL を作成することです。

ExternalContext ctx = FacesContext.getCurrentInstance().getExternalContext();
RenderResponse response = (RenderResponse)ctx.getResponse();
PortletURL portletUrl = response.createRenderURL();
String url = portletUrl .toString();

しかし、バッキング Bean の JSF-actionListener メソッドでこれを呼び出すと、代わりに a が返されるので、a を取得しClassCastExceptionます。ctx.getResponse()javax.portlet.ActionResponse

Portlet クラスRenderResponseのメソッドから a にアクセスできることはわかっています。doViewしかし、バッキング Bean でどのようにアクセスできますか?

4

2 に答える 2

1

ユーザーをポートレットに誘導するリンクを電子メールに挿入したいと考えています。WebSphere Portal 6.1 を使用しています。

通常、レンダリング URL は、ポートレット ライフサイクルのその時点では使用できません。

  1. URL マッピング機能の使用を検討する
  2. URL エンジン サービスでサーブレットを使用してリダイレクトを実行することを検討する

どちらの場合も、Portal によって通常生成される巨大なエンコードされた URL は必要ありません。のようなものhttp://host/foo/barをエントリ ポイントとして使用します。

私は本番環境で2番目のアプローチを使用しました。簡単に検索できるように、ターゲット ページとポートレット インスタンスに一意の名前が追加されます。これらは、XMLAccess スクリプトを介してページ構成に追加されます。バージョン 6.1 の管理ユーザー インターフェイスからは使用できません。

于 2012-08-03T13:27:27.563 に答える
0

現在、次のアプローチを使用しています。これにより、ワークロードのオーバーヘッドが (ごくわずかに) 発生しますが、うまく機能します。

  • メソッドRenderResponseで をつかみますdoView
  • PortletURL portletUrl = response.createRenderURL();ポートレット セッションでこのオブジェクトを使用および保存します (すべての要求で、私は知っています)。
  • アクションリスナーメソッドで、PortletURLオブジェクトを取得し、必要なパラメーターを追加して、URL をレンダリングします。
于 2012-08-07T09:00:48.573 に答える