view.jsp
というJSPファイルのみから、liferayでポートレットを作成しようとしています。私が必要なのは:
ポートレットがロードされたら、配列を生成するカスタムJavaクラスを呼び出します。
その配列をview.jsp
に渡す必要があります。
どうやってするか?
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()
という名前である必要があり、RenderRequest
とRendertResponse
の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>
_
これは私のマシンでのこのコードの結果です:
質問は非常にあいまいです。インフラストラクチャ/仕様の基本的な理解についてのように思われるので、ポートレット開発の概要を紹介することをお勧めします。
いくつかの指針を与えることによってあなたの質問に答えようとする試み-それらがあまりにも曖昧であるならば謝罪:
もちろん、これは、使用しているポートレットフレームワークによって異なります。上記のメソッドは、基盤となるポートレット仕様(JSR-286など)に基づいています。
これはいくつかの方法で実行できます。
1)renderRequest.setAttribute("my-array", array);
を使用できます
2)データをセッションに入れることができます
request.getPortletSession().setAttribute("my-array", array);
2番目のケースでは、不要になったときにセッションから要素を削除することを忘れないでください。