Menu

SAStruts のポートレット対応

概要

SAStruts で作成したアプリケーションをポートレットしても動作させる方法を提供しています。 通常の SAStruts アプリケーションの作成後、設定ファイルを変更することでポートレットとして利用することができます。

設定方法

本章の変更を適用することで SAStruts のアプリケーションをポートレットとして利用することができます。

変更内容

  • web.xml を変更
  • struts-config.xml を変更
  • common.jsp を変更
  • portlet.xml を追加
  • sa-struts-portlet-*.jar を追加

web.xml を変更

web.xml で以下の点を変更します。

  • org.seasar.struts.portlet.filter.PortletRequestFilter を encodingFilter の後に INCLUDE で追加
  • org.seasar.framework.container.filter.S2ContainerFilter を org.seasar.struts.portlet.filter.S2ContainerFilter に変更
  • org.seasar.framework.container.hotdeploy.HotdeployFilter を org.seasar.struts.portlet.filter.HotdeployFilter に変更
  • org.seasar.struts.portlet.filter.PortletRoutingFilter を routingfilter の後に INCLUDE で追加
  • org.apache.struts.action.ActionServlet を org.seasar.struts.portlet.servlet.ActionServlet に変更

以下は web.xml の変更例です。

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
    version="2.4">
  <context-param>
    <param-name>sastruts.VIEW_PREFIX</param-name>
    <param-value>/WEB-INF/view</param-value>
  </context-param>
  <filter>
    <filter-name>encodingfilter</filter-name>
    <filter-class>org.seasar.extension.filter.EncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter>
    <filter-name>portletRequestFilter</filter-name>
    <filter-class>org.seasar.struts.portlet.filter.PortletRequestFilter</filter-class>
  </filter>
  <filter>
    <filter-name>requestDumpFilter</filter-name>
    <filter-class>org.seasar.extension.filter.RequestDumpFilter</filter-class>
  </filter>
  <filter>
    <filter-name>s2filter</filter-name>
    <filter-class>org.seasar.struts.portlet.filter.S2ContainerFilter</filter-class>
  </filter>
  <filter>
    <filter-name>hotdeployfilter</filter-name>
    <filter-class>org.seasar.struts.portlet.filter.HotdeployFilter</filter-class>
  </filter>
  <filter>
    <filter-name>routingfilter</filter-name>
    <filter-class>org.seasar.struts.filter.RoutingFilter</filter-class>
    <init-param>
      <param-name>jspDirectAccess</param-name>
      <param-value>false</param-value>
    </init-param>
  </filter>
  <filter>
    <filter-name>portletRoutingfilter</filter-name>
    <filter-class>org.seasar.struts.portlet.filter.PortletRoutingFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>encodingfilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>portletRequestFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>INCLUDE</dispatcher>
  </filter-mapping>
  <filter-mapping>
    <filter-name>s2filter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
  </filter-mapping>
  <filter-mapping>
    <filter-name>hotdeployfilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
  </filter-mapping>
  <filter-mapping>
    <filter-name>routingfilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
  </filter-mapping>
  <filter-mapping>
    <filter-name>portletRoutingfilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>INCLUDE</dispatcher>
  </filter-mapping>
  <filter-mapping>
    <filter-name>requestDumpFilter</filter-name>
    <url-pattern>*.do</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
  </filter-mapping>
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.seasar.struts.portlet.servlet.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>configFactory</param-name>
      <param-value>org.seasar.struts.config.S2ModuleConfigFactory</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
...

struts-config.xml を変更

struts-config.xml で以下の点を変更します。

  • org.seasar.struts.action.S2RequestProcessor を org.seasar.struts.portlet.action.S2RequestProcessor に変更

以下は struts-config.xml の変更例です。

...
    <controller
        maxFileSize="1024K"
        bufferSize="1024"
        processorClass="org.seasar.struts.portlet.action.S2RequestProcessor"
        multipartClass="org.seasar.struts.upload.S2MultipartRequestHandler"/>
...

common.jsp を変更

common.jsp で以下の点を変更します。

  • <%@taglib prefix="s" uri="http://sastruts.seasar.org"%> を <%@taglib prefix="f" uri="http://sastruts.seasar.org/functions"%> に変更

以下は common.jsp の変更例です。

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@taglib prefix="html" uri="http://struts.apache.org/tags-html"%>  
<%@taglib prefix="bean" uri="http://struts.apache.org/tags-bean"%>  
<%@taglib prefix="tiles" uri="http://jakarta.apache.org/struts/tags-tiles"%>
<%@taglib prefix="f" uri="http://sastruts.seasar.org/functions"%>
<%@taglib prefix="s" uri="http://sastruts.seasar.org/portlet"%>

portlet.xml を追加

portlet.xml を作成して、ポートレット情報を記述してください。

以下は portlet.xml の作成例です。 portlet-class には org.seasar.struts.portlet.SAStrutsPortlet を指定します。 初期値の viewPage の値に初期ページのパスを指定します。 指定されたパスがポートレットにアクセスしたときに表示されるページになります。

<?xml version="1.0" encoding="UTF-8"?>
<portlet-app version="1.0" 
    xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd
    http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
  <portlet>
    <description>SAStruts Tutorial</description>
    <portlet-name>SAStrutsTutorialPortlet</portlet-name>
    <display-name>SAStruts Tutorial Portlet</display-name>
    <portlet-class>org.seasar.struts.portlet.SAStrutsPortlet</portlet-class>
    <init-param>
      <name>viewPage</name>
      <value>/</value>
    </init-param>
    <expiration-cache>0</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>
    <portlet-info>
      <title>SAStruts Tutorial</title>
      <keywords>SAStruts,sample</keywords>
    </portlet-info>
  </portlet>
</portlet-app>

init-param では、以下のものを指定することができます。

名前(name) 値(value)
viewPage 表示(VIEW)モードの初期ページ。
editPage 編集(EDIT)モードの初期ページ。
helpPage ヘルプ(HELP)モードの初期ページ。
contentType デフォルトのコンテンツタイプ。アプリケーション側で設定されていない場合に利用します。
encoding 処理時に利用するエンコーディング。指定しない場合は UTF-8 です。
maxCacheSize 保持する過去ページのキャッシュ値です。デフォルトは 5 です。このキャッシュはブラウザの戻るボタンをクリックしたときに利用します。

sa-struts-portlet-*.jar を追加

sa-struts-portlet-*.jar を取得して、WEB-INF/lib に追加してください。 http://maven.seasar.org/maven2/org/seasar/sastruts/sa-struts-portlet/ などから取得できます。

ビルドと配備

上記の設定後、今まで通りビルドして、war ファイルを作成してください。 war ファイルをポータルに配備して、ポートレットとして利用することができます。

NEWS

  • 2009/12/06 SAStrutsポートレット 1.0.2 をリリースしました。こちら
  • 2009/10/24 SAStrutsポートレット 1.0.1 をリリースしました。こちら
  • 2009/02/13 SAStrutsポートレット 1.0.0 をリリースしました。こちら
  • 2008/12/31 SAStrutsポートレット 1.0.0-rc5 をリリースしました。こちら
  • 2008/12/01 SAStrutsポートレット 1.0.0-rc4 をリリースしました。こちら
  • 2008/09/25 SAStrutsポートレット 1.0.0-rc3 をリリースしました。こちら
  • 2008/09/08 SAStrutsポートレット 1.0.0-rc2 をリリースしました。こちら
  • 2008/09/04 SAStrutsポートレット 1.0.0-rc1 をリリースしました。こちら

Subversionリポジトリ

SAStruts ポートレットのソースコードは、seasar.org のSubversionリポジトリで公開されています。
どなたでもアクセスしてソースコードを閲覧することができます。
(以下のリンクをクリックするとWeb経由でもソースコードを閲覧できます)

SVNリポジトリのURL
https://www.seasar.org/svn/sastruts/trunk/sa-struts-portlet/

注意点

ポートレットの仕様の都合上、制限事項があります。

  • 初回アクセスなどで表示だけの処理が行われる場合、実行メソッドでリダイレクトを設定できません。ポートレットではリダイレクトを processAction() のときしかできないためです。
  • このライブラリは、デフォルトで、ポートレット表示に不要な body タグ以上の要素は出力時に削除します。この処理をスキップするためには、web.xml の PortletRequestFilter の設定で init-param で contentOnly を false と設定してください。