web-dev-qa-db-ja.com

liferayポートレットの作成-Javaクラスからview.jspにデータを渡す方法は?

view.jspというJSPファイルのみから、liferayでポートレットを作成しようとしています。私が必要なのは:

  1. ポートレットがロードされたら、配列を生成するカスタムJavaクラスを呼び出します。

  2. その配列をview.jspに渡す必要があります。

どうやってするか?

19
Almas Adilbek

Liferayの_create.sh_スクリプトを使用してポートレットを作成しましたか?この場合、MVCPortletを拡張する新しいポートレットクラスを作成する必要があります。

_public class ArrayPortlet extends MVCPortlet {

}
_

また、_WEB-INF/portlet.xml_ファイルを変更して、そのクラスを指すようにする必要があります。以下の行を

_ <portlet-class>com.liferay.util.bridges.mvc.MVCPortlet</portlet-class>
_

ポートレットクラスに1つの名前を付けます。

_<portlet-class>br.com.seatecnologia.arrayportlet.ArrayPortlet</portlet-class>
_

これはセットアップです。今、クールな部分:コード!ポートレットのビューを処理するメソッドを作成する必要があります。このメソッドはdoView()という名前である必要があり、RenderRequestRendertResponseの2つのパラメーターがあります。また、いくつかの例外をスローし、ポートレットのレンダリングをスーパークラスメソッドに委任します。

_public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
    super.doView(renderRequest, renderResponse);
}
_

ただし、ポートレットをレンダリングする前に、配列を作成します。

_String[] array = new String[] { "foo", "bar", "baz" };
_

パラメータとして受け取ったRenderRequestに入れます。パラメータに名前を付ける必要があります。この場合、名前は_"my-array"_です。

_renderRequest.setAttribute("my-array", array);
_

これは私たちのクラスで、完全です:

_public class ArrayPortlet extends MVCPortlet {
    @Override
    public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
    throws IOException, PortletException {
        String[] array = new String[] { "foo", "bar", "baz" };
        renderRequest.setAttribute("my-array", array);
        super.doView(renderRequest, renderResponse);
    }
}
_

RenderRequestオブジェクトを介して、JSPに値を渡します。次に、JSPで、RenderRequestインスタンス(およびその他のオブジェクト)を「インポート」して、JSPの先頭に_<portlet:defineObjects />_タグを追加します。この後、renderRequestオブジェクトからその名前を介して任意の属性を取得できます。メソッドgetAttribute()Objectを返すため、その戻り値を正しい型にキャストする必要があります。

_<portlet:defineObjects />
<%
String[] anArrayFromMyPortlet = (String[])renderRequest.getAttribute("my-array");
%>
_

ここで、取得したオブジェクトを必要に応じて使用します。

_<ul>
<% for (String string : anArrayFromMyPortlet) { %>
<li><%= string %></li>
<% } %>
</ul>
_

これは私のマシンでのこのコードの結果です:

enter image description here

39
brandizzi

質問は非常にあいまいです。インフラストラクチャ/仕様の基本的な理解についてのように思われるので、ポートレット開発の概要を紹介することをお勧めします。

いくつかの指針を与えることによってあなたの質問に答えようとする試み-それらがあまりにも曖昧であるならば謝罪:

  • init()はポートレットライフサイクルの一部であり、ポートレットクラスがロードされるときに1回呼び出されます。
  • (たとえば)doView()でRenderRequestにリクエスト属性を追加することで、ビューに値を渡すことができます。

もちろん、これは、使用しているポートレットフレームワークによって異なります。上記のメソッドは、基盤となるポートレット仕様(JSR-286など)に基づいています。

3
Olaf Kock

これはいくつかの方法で実行できます。

1)renderRequest.setAttribute("my-array", array);を使用できます

2)データをセッションに入れることができます

request.getPortletSession().setAttribute("my-array", array);

2番目のケースでは、不要になったときにセッションから要素を削除することを忘れないでください。

2