オラフの答えはあなたに良いスタートを与えます。portal-ext.propertiesクラスパスに呼び出されたファイルをコンテンツとともに配置するだけportlet.event.distribution=ALLです。これにより、イベントが別のページにある場合でも、イベントを処理するすべてのポートレットがイベントを確実に受信できるようになります。
ページを切り替えるために:イベントを処理するインターフェースを作成することをお勧めします。このインターフェースは基本的に、portlet.xmlファイルのevent-definition-tagsをコードで表現したものです。これには、インターフェースとportlet.xmlが同期していることを確認するだけでよいという利点もあります。インターフェイスが残りのソースコードと同期していない場合、これは多くの場合、ランタイムエラー(イベントへの誤ったパラメータタイプなど)ではなく、コンパイル時エラーになります。
interface Events
{
public static final String EVENT_NAME_X ="eventX"; // as defined in portlet.xml
public static final String EVENT_NAME_Y ="eventY";
public void fireEventX(ActionResponse response, ParamType param);
public void fireEventY(ActionResponse response, ParamType param);
}
次に、WebSphereで使用できるイベントを発生させる簡単な実装を作成できます。
public class SimpleEvents implements Events
{
@Override
public void fireEventX(ActionResponse response, ParamType param)
{
response.setEvent(EVENT_NAME_X, param);
}
@Override
public void fireEventY(ActionResponse response, ParamType param)
{
response.setEvent(EVENT_NAME_Y, param);
}
}
次に、次のようなLiferayの別の実装を作成できます。
public class RedirectingEvents extends SimpleEvents
{
private String eventXRedirect;
private String eventYRedirect;
@Override
public void fireEventX(ActionResponse response, ParamType param)
{
super.fireEventX(param);
if (eventXRedirect != null)
response.sendRedirect(eventXRedirect);
}
@Override
public void fireEventY(ActionResponse response, ParamType param)
{
super.fireEventY(param);
if (eventXRedirect != null)
response.sendRedirect(eventYRedirect);
}
// setters & getters
}
これで、Spring IoCを使用している場合(私はあなたが使用していることを知っています)、application-context.xmlファイルで次のように実装を構成できます。
<bean class="package.RedirectingEvents" primary="true">
<property name="eventXRedirect" value="/page-after-X-event" />
<property name="eventYRedirect" value="/page-after-Y-event" />
</bean>
このxmlスニペットの「値」部分を取得する方法は次のとおりです。
イベントが発生した後にユーザーがリダイレクトされるターゲットページをliferayで開き、適切な権限でログに記録し、ページ上部の[管理]->[ページ]のメニューをクリックします。そこで、「フレンドリURL」を設定できます。Friendly-URLフィールドに入力したものと同じURL(変更できないプレフィックスなし)を上記のapplication-context.xmlスニペットにコピーします。
イベントを発生させるクラスでは、Events-interfaceを自動配線して、次のように使用できます。
@Controller
class Foobar
{
@Autowired
private Events portletEvents;
@ActionMapping
public void action(ActionRequest request, ActionResponse response)
{
portletEvents.fireEventX(someParam);
}
@EventMapping(Events.EVENT_NAME_Y)
public void handleEventRequest(EventRequest request, EventResponse response)
{
Object value = request.getEvent().getValue();
log.info("got Y event! Value is: " + value);
}
}
アプリケーションをWebSpherePortalにデプロイする場合は、上記のxmlスニペットを以下と単純に交換します。
<bean class="package.SimpleEvents" primary="true" />
これで、JSR-286メッセージをページ間で送信し、同時にページを切り替えることができるソリューションができました。コードを変更することなく、LiferayとWebSphere Portalの両方にアプリケーションをデプロイできます(構成のみが必要です)。適応する)。