1

複数のポートレットがある Java liferay ポータルを使用しています。送信時にデータが取得され、特定の結果が他のページ ポートレットに表示されるフォームを持つポートレットを作成したいと考えています。しかし、残念ながら、これらのことはうまくいきません。

セッションを使おうと思っていたのですが、2つの問題が発生しました。

  1. Java変数へのJavaScript値の割り当て.
  2. 特定のポートレットが配置されているページに値が渡された場合、そのポートレットは値を取得しません。

その後、Inter Portlet Communication(IPC) の概念を聞き、「liferay in action」の助けを借りましたが、両方のポートレットが同じページに配置されている場合にコードが機能し、私の要件は、1 つのポートレットが最初に配置されることです。フォームが送信されると、2 番目のページ、つまりパラメータを取得するための 2 番目のポートレットにリダイレクトされます。もっと例を試してみましたが、私のやり方ではうまくいきません。

4

3 に答える 3

1

比較的簡単な別の方法を見つけました。liferayからそのwikiを試してみました

于 2012-09-28T12:50:49.227 に答える
1

私が理解しているように、次のページに渡したい JavaScript パラメーターがいくつかあります。ただし、PortletSession の APPLICATION_SCOPE を使用してそれを行うことはできます。入力に値を配置することで、JS パラメータを Java に変換する問題を解決できます。これらの入力変数がユーザーによって書き込まれることが想定されておらず、別の場所からそれらを取得する場合は、入力を非表示にすることができます。

あなたのjspで:

<form>
 <input type="hidden" id="myinput1" name="in1" value="">
 <input type="hidden" id="myinput1" name="in2" value="">
</form>

<script>
var a = "avalue";
var b = "bvalue";
document.getElementById("myinput1").value=a;
document.getElementById("myinput2").value=b;
</script>

その後、必要なときにフォームを送信します。次に、ポートレットの ProcessAction メソッドで次のように実行できます。

String a= request.getParameter("in1");
String b= request.getParameter("in2");

PortletSession session = request.getPortletSession();
session.setAttribute("a", a , PortletSession.APPLICATION_SCOPE);
session.setAttribute("b", b , PortletSession.APPLICATION_SCOPE);

他のポートレットでは、呼び出すことで見つけることができます

session.getAttribute("a",PortletSession.APPLICATION_SCOPE);

これはもちろん、次のページの URL に単純に配置できない場合です。

于 2012-11-14T15:29:53.113 に答える
0

私の知る限り、IPCは実際には同じページのポートレット間でのみ機能します。また、portlet仕様では、ページを切り替えるための一般化されたメカニズムが提供されていないため、ポータルベンダー固有の方法でのみそれを実現できます。しかし、パブリックレンダリングパラメータと別のページへの正しく構築されたLiferay URLを使用すると、希望する結果を達成できるはずです:http ://www.liferay.com/web/guest/community/forums/-/message_boards/message/1207858

于 2012-09-28T09:13:43.530 に答える