0

ユーザーの設定を保存する Liferay ポートレットを開発しようとしています。このポートレットは、AJAX 呼び出しを実行してコンテンツを更新し、それらの設定を使用してデータをフェッチします。このために、私はcom.liferay.portal.kernel.portlet.DefaultConfigurationActionを使用しています。ルック アンド フィールを変更しなければ、問題なく動作しています。

ただし、リンク先のページを指定すると ([ルック アンド フィール] -> [ポートレット URL をページにリンク])、ユーザー設定がなくなり、代わりにデフォルト値が使用されます。

デバッガーを通じて、ルック アンド フィールの変更を適用するときに設定が見つからないことがわかりました。

これに対する修正はありますか?

4

1 に答える 1

1

私は問題を解決することができました。Liferay の IPC は AJAX でうまく機能しないようです。

質問で述べたように、このポートレットのコンテンツが指すターゲット URL を設定しました。使用する AJAX 呼び出しの URL を生成するには

<portlet:resourceURL var="ajaxResourceURL" />

ただし、このタグは、現在のページ自体ではなく、ターゲット URL を指す URL を生成します。したがって、AJAX 呼び出しが行われると、対象のページに同じポートレットがないため、データはありません。

これに対する私の修正は、生成された URL のパスを JavaScript を使用して現在のページのパスに置き換えることです。

    var url = '<%= ajaxResourceURL %>';
    var path = url.substring(url.lastIndexOf("/") + 1, url.indexOf("?"));
    var pathname = window.location.pathname;

    pathname = pathname.substring(pathname.lastIndexOf("/") + 1, pathname.length);
    url = url.replace(path, pathname);

これが将来同じ問題に直面する人々に役立つことを願っています。

于 2013-09-10T01:11:33.393 に答える