JSR 168 で Jsf のコマンド ボタンを使用して別のポートレットを呼び出しているときに、URl からパラメーターを受け取ることができません。実際には、URL を生成しているコマンド ボタンから manageBean のメソッドを呼び出し、別のポートレットを呼び出しています。しかし、呼び出されたポートレットの別の manageBean でパラメーターを受け取ることができません。
どこが間違っているのか教えてください。
JSR 168 ポートレット URL パラメータを取得するには; あなたは3つの選択肢のいずれかを持っています(私が知る限り):
Websphere Application Server レベルでフィルターを作成し、クエリ文字列を格納するように動的キャッシュを構成すると、動的キャッシュのサイズを考慮して、URL マッピングを使用しなくても、任意のポートレット生成リンクに添付された任意のパラメーターを取得できます。
「doView」と呼ばれる初期のポートレット ライフサイクル フェーズでパラメータを取得する必要があり、RenderRequest を HttpServletRequest にキャストすることで、getQueryString() メソッドからパラメータを取得できます (getParameter メソッドから取得することはできません)。仕様に記載されていても、RenderRequest を使用することはできません) その後、アプリケーション内の任意のページにディスパッチできます。
3 番目の方法では、URL 生成タグを使用してポートレットへのリンクを生成しようとする場合、そのリンクにパラメーターを追加して、以下と同じ方法で doView に取り込むことができます。
<wps:urlGeneration contentNode="MyApp.app" portletWindowState="Maximized" newWindow="True">
<wps:urlParam name="MyParam" value="Hi There"/>
<a href="<% wpsURL.write(out); %>" target="_blank" >My Link</a>
</wps:urlGeneration>
public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
System.out.println("The parameter is: "+httpServletRequest.getQueryString());
super.doView(request, response);
}
注: デフォルトでは、ポートレット ライフサイクルの完全なコードはパッケージに含まれてcom.ibm.{your project name}
おり、RSA はプロジェクト作成の開始時にそれを使用可能にするかどうかを尋ねます。使用可能にしなかった場合でも作成できます。<portlet-class>
でポートレットの をオーバーライドしますportlet.xml
。