1

現在、Liferay とそのポートレット機能、特に WSRP 経由のリモート ポートレットを調べています。

同じネットワーク内の異なるマシンで 2 つの liferay インスタンスを実行しています。ここで、liferay インスタンスの 1 つから別のインスタンスにポートレットを共有したいので、両方のインストールに WSRP アプリをインストールし、ノードの 1 つを WSRP プロデューサーとして、もう 1 つを WSRP コンシューマーとして構成しました。私の WSRP Producer は、Liferay に含まれている通貨計算用のポートレット (ドイツ語で Währungsrechner) を発行します。一見すると、この WSRP ポートレットは WSRP コンシューマ側で動作しているように見えます。WSRP コンシューマのページに追加すると、そのコンテンツ (いくつかの入力ボックス) が正しく表示されます。

しかし、1 つの問題があります。

ポートレットによって表示される HTML フォームは、予想どおり WSRP コンシューマのドメインではなく、常に WSRP プロデューサのドメインに送信されます。タグのアクション属性に間違ったドメイン名が含まれています。

また、JSP-Tag の出力を単純に出力し、WSRP プロデューサーにインストールして、WSRP コンシューマーのページに埋め込む Liferay UI を使用して、デバッグ用の小さなポートレットを作成しました。この単純なデバッグ ポートレットによって出力される URL は常に絶対 URL であり、ポートレットが WSRP コンシューマに表示される場合でも、WSRP プロデューサを指します。URL は相対的なものであるか、正しいドメイン (たとえば、ポートレットが WSRP コンシューマ liferay インスタンスのページを介して表示される場合の WSRP コンシューマ ドメイン) を指していることが予想されます。

私が Liferay を評価した理由は、ポートレットを開発し、これらのポートレットを WSRP 経由でリモートで使用するために提供するのに適したソリューションであるかどうかを確認したいからです。この問題をさらに調査するために、Liferay SDK と Eclipe プラグインを使用して小さなデバッグ ポートレットを作成しました。ポートレットは主に、次の結果を出力する単純な JSP ページで構成されます。

    <%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet" %>
    <span class="important"%>portlet:actionURL: </span><portlet:actionURL/%>

このポートレットを lifery.mycompany.net にインストールし、WSRP プロデューサーを介して liferay-2.mycompany.net に公開すると、出力 URL は次のようになります。

    http://liferay.mycompany.net:8080/de_DE/widget/web/wsrp-achimstestproducer/portlets?p_auth=0iLgJP7e&p_p_id=sbdebug_WAR_sbliferaydemopluginportlet_INSTANCE_qs2S&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view

ドメインは、予想される liferay-2.mycompany.net ではなく、liferay.mycompany.net であることに注意してください。

どうすればこれを修正できますか? WSRP コンシューマが WSRP ポートレットからの URL を独自の URL に置き換えるように、Liferay の設定を調整する必要がありますか? WSRP ポートレットと actionURL に影響を与える他の要因はありますか? この問題に関するヘルプは大歓迎です!

私のセットアップは次のとおりです。 -Tomcat 7を搭載したLiferay 6.2 CE -データベースはMySQL 5.5 -Oracle Java 7 -Liferayは組み込みのインストールウィザードで構成されました

前もって感謝します!

2014-05-23: ここにいくつかの詳細情報があります

また、 liferay のフォーラムにいくつかの追加情報とともにこの質問を投稿しました。

--> liferay-portlet.xml で requires-namespaced-parameters を false に設定すると、ドメインの問題が解決するように見えますが、ポートレットが WSRP 経由で使用されている場合、ポートレットの processAction メソッドは実行されません:(

ここで何か間違ったことをしていますか?どんなアイデアやヒントも大歓迎です!

4

1 に答える 1

1

liferay のフォーラム、Web 上の他のいくつかの WSRP リソース、検索エンジンを使用した後、多くのことが機能するようになりました。

次の 3 つのことが、WSRP の問題に関する私の問題の主な原因のようです。

  • requires-namespaced-parameters を明示的に false に設定する必要があります
  • CSRF トークンを非アクティブ化する必要があります。私は init-param を介して portlet-xml でこれを行いました:

    <init-param>
      <name>check-auth-token</name>
      <value>false</value>
    </init-param>
    
  • レンダリング パラメータがイベント処理メソッドで作成された場合、ビュー JSP でレンダリング パラメータを使用できないようです。そのため、ポートレット セッション属性に切り替えて、ポートレット クラスから JSP ビューにデータを転送しました。

于 2014-05-22T13:47:55.077 に答える