S2Portlet » S2PortletFilter
S2Portlet を利用するためには、Seasar2と同様にJDK1.4以上が必要です。また、Seasar2 については、バージョン 2.4 以上が必要になります。
S2PortletFilter は、Apache Portals Bridges プロジェクトより提供されているポートレットフィルタの実装です。
JSR 168 準拠のポートレットを利用できるポータルサーバーで利用することができます。
ハローワールド的なポートレットの作成を通して、利用方法を見てみましょう。
一般的な JSR 168 準拠のポートレットと同様に以下のファイルを作成します。
WEB-INF/portlet.xml
WEB-INF/view/helloworld.jsp (*)
WEB-INF/web.xml (*)
WEB-INF/jp/sf/pal/helloworld/HelloWorldPortlet.class (*)
WEB-INF/jp/sf/pal/helloworld/HelloWorld.dicon
WEB-INF/jp/sf/pal/helloworld/resources/HelloWorldResources.properties (*)
WEB-INF/jp/sf/pal/helloworld/resources/HelloWorldResources_ja.properties (*)
(*) のついたファイルに関しては、S2PortletFilter を使わないで作った場合と同じことを示しています。
つまり、現在利用しているポートレットに対して、S2PortletFilter を新たに利用する場合、portlet.xml を編集して、*.dicon ファイルを追加するだけで良いということです。
それでは、各ファイルについて、順番に見ていきましょう。
portlet.xml は、ポートレットの配備記述子です。
記述方法については、JSR 168 を参照してください。
portlet.xml は以下のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<portlet-app id="s2helloworld" version="1.0">
<portlet id="FilteredS2HelloWorld">
<portlet-name>FilteredS2HelloWorld</portlet-name>
<display-name>Filtered Hello World for Seasar2</display-name>
<description>HelloWorld is a portlet with Portlet Filter</description>
<portlet-class>
org.apache.portals.bridges.portletfilter.FilterPortlet
</portlet-class>
<init-param>
<name>portlet-class</name>
<value>jp.sf.pal.helloworld.HelloWorldPortlet</value>
</init-param>
<init-param>
<name>portlet-filters</name>
<value>
org.seasar.portlet.filter.S2PortletFilter
</value>
</init-param>
<init-param>
<name>
org.seasar.portlet.filter.S2PortletFilter:configPath
</name>
<value>jp/sf/pal/helloworld/HelloWorld.dicon</value>
</init-param>
<expiration-cache>-1</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
</supports>
<supported-locale>en</supported-locale>
<supported-locale>ja</supported-locale>
<resource-bundle>
jp.sf.pal.helloworld.resources.FilteredHelloWorldResources
</resource-bundle>
<portlet-info>
<title>Hello World with S2Portlet Filter</title>
<short-title>Hello</short-title>
<keywords>Hello,Test</keywords>
</portlet-info>
</portlet>
</portlet-app>
注目するべきところを赤字で表示しています。
既にご利用のポートレットに対して、S2PortletFilter を適用するためには、<init-param> の portlet-filters の値に org.seasar.portlet.filter.S2PortletFilter を追加します。
Apache Portals Bridges のポートレットフィルタの仕様に従い、configPath で、dicon ファイルを指定するだけです。
HelloWorld.dicon は、通常の Seasar2 の設定ファイルです。
ポートレット上で利用したいコンポーネントを記述します。
S2GenericPortlet と異なり、portletName でポートレットクラスを定義する必要はありません。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN"
"http://www.seasar.org/dtd/components.dtd">
<components>
</components>
S2PortletFilter を利用しないでポートレットを作成した場合と変更はありません。
<%@ taglib uri='/WEB-INF/portlet.tld' prefix='portlet'%>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<fmt:setBundle basename="jp.sf.pal.helloworld.resources.HelloWorldResources" />
<portlet:defineObjects/>
<form action="<portlet:actionURL />" method="POST">
<table border="0">
<tr>
<td align="center"><fmt:message key="helloworld.lable.Hello"/></td>
<td align="center"><%= request.getAttribute("yourName") %></td>
</tr>
<tr>
<td align="right"><fmt:message key="helloworld.lable.YourName"/></td>
<td align="left"><input type="text" name="yourName"/></td>
</tr>
<tr>
<td align="center" colspan="2"><input type="submit"
value="<fmt:message key="helloworld.lable.Submit"/>"/></td>
</tr>
<tr>
<td align="left" colspan="2"><%= request.getAttribute("renderTraceLog") %></td>
</tr>
</table>
</form>
S2PortletFilter を利用しないでポートレットを作成した場合と変更はありません。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>HelloWorld Portlet</display-name>
<description>HelloWorld Portlet</description>
</web-app>
S2PortletFilter を利用しないでポートレットを作成した場合と変更はありません。
package jp.sf.pal.helloworld;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.IOException;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.GenericPortlet;
import javax.portlet.PortletConfig;
import javax.portlet.PortletContext;
import javax.portlet.PortletException;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.PortletSession;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
/**
* HelloWorldPortlet is a portlet to say "Hello!"
*
* @author <a href="mailto:shinsuke@yahoo.co.jp">Shinsuke Sugaya</a>
*/
public class HelloWorldPortlet extends GenericPortlet
{
/**
* Logger for this class
*/
private static final Log log = LogFactory.getLog(HelloWorldPortlet.class);
public static final String YOUR_NAME_KEY = "yourName";
public static final String COUNT_KEY = "count";
/* (non-Javadoc)
* @see javax.portlet.Portlet#init(javax.portlet.PortletConfig)
*/
public void init(PortletConfig config) throws PortletException
{
super.init(config);
}
/* (non-Javadoc)
* @see javax.portlet.GenericPortlet#doView(javax.portlet.RenderRequest,
* javax.portlet.RenderResponse)
*/
protected void doView(RenderRequest request, RenderResponse response)
throws PortletException, IOException
{
response.setContentType("text/html");
PortletContext context = getPortletContext();
String yourName = request.getParameter(YOUR_NAME_KEY);
if (yourName == null)
{
yourName = "";
}
request.setAttribute(YOUR_NAME_KEY, yourName);
PortletRequestDispatcher rd = context.getRequestDispatcher("/WEB-INF/view/helloworld.jsp");
rd.include(request, response);
}
/* (non-Javadoc)
* @see javax.portlet.Portlet#processAction(javax.portlet.ActionRequest,
* javax.portlet.ActionResponse)
*/
public void processAction(ActionRequest request, ActionResponse response)
throws PortletException, IOException
{
PortletSession session = request.getPortletSession();
String yourName = request.getParameter(YOUR_NAME_KEY);
if (yourName != null)
{
Integer count = (Integer) session.getAttribute(COUNT_KEY);
if (count != null)
{
count = new Integer(count.intValue() + 1);
}
else
{
count = new Integer(1);
}
session.setAttribute(COUNT_KEY, count);
response.setRenderParameter(YOUR_NAME_KEY, yourName);
}
return;
}
}
S2PortletFilter を利用しないでポートレットを作成した場合と変更はありません。
# helloworld.jsp
helloworld.lable.Hello=Hello!
helloworld.lable.YourName=Your Name:
helloworld.lable.Submit=Submit
S2PortletFilter を利用しないでポートレットを作成した場合と変更はありません。
# portlet info
javax.portlet.title=S2Portlet\u7528\u30cf\u30ed\u30fc\u30ef\u30fc\u30eb\u30c9
javax.portlet.short-title=\u30cf\u30ed\u30fc
javax.portlet.keywords=\u30c6\u30b9\u30c8,\u30cf\u30ed\u30fc
# helloworld.jsp
helloworld.lable.Hello=\u3053\u3093\u306b\u3061\u306f\u3001
helloworld.lable.YourName=\u540d\u524d:
helloworld.lable.Submit=\u9001\u4fe1
以上のファイルを JSR 168 に定義されたのパッケージ化の仕様に従い、WAR ファイルにまとめて、ポータルへ配備すれば、動作します。
ポータルへの配備手順については、ご利用のポータルのドキュメントを参照してください。
|