• 検索結果がありません。

ポートレットを使ってみよう

N/A
N/A
Protected

Academic year: 2021

シェア "ポートレットを使ってみよう"

Copied!
64
0
0

読み込み中.... (全文を見る)

全文

(1)

Seasar Conference

Seasar Conference

2008 Autumn

2008 Autumn

2008 Autumn

2008 Autumn

ポ トレットを使ってみよう

ポ トレットを使ってみよう

ポートレットを使ってみよう

ポートレットを使ってみよう

株式会社エヌツーエスエム

菅谷信介

菅谷信介

(2)

自己紹介

自己紹介

„

名前

: 菅谷信介

„

名前

: 菅谷信介

„

所属

: N2SM, Inc. (オープンソース推進室長)

オ プ

活動

„

オープンソース活動

:

– Apache Portals(Jetspeed, Portals Bridges) PMC

– Seasarプロジェクトコミッタ(S2Container, Teeda,

SAStruts..)

プ ジ

運営

– Portal Application Laboratory(PAL)プロジェクト運営

– SSO Proxy プロジェクト運営

(3)

Agenda

Agenda

„

ポータル・ポートレットの概要

„

ポータル・ポートレットの概要

„

ポートレット

API (JSR 168)

„

ポータル関連プロダクトの紹介

„

ポ トレット

APIでポ トレット作成

„

ポートレット

APIでポートレット作成

„

フレームワークでポートレット作成(

Teeda編)

„

フレームワークでポートレット作成(

SAStruts編)

(4)

本セッションでのゴール

本セッションでのゴール

ポ タルを使 て

ポータルを使って

(5)

ポータル・ポートレットの概要

ポータル・ポートレットの概要

„

ポータル・ポートレットの概要

„

ポータル・ポートレットの概要

„

ポートレット

API (JSR 168)

„

ポータル関連プロダクトの紹介

„

ポ トレット

APIでポ トレット作成

„

ポートレット

APIでポートレット作成

„

フレームワークでポートレット作成(

Teeda編)

„

フレームワークでポートレット作成(

SAStruts編)

(6)

ポータルとポートレット

ポータルとポートレット

„

ポータル:別々のシステムの情報を統合して

„

ポータル:別々のシステムの情報を統合して、

一元的に表示することで、システム全体の入り

口になるシステム(

EIPとか)

口になるシステム(

EIPとか)

„

ポートレット:ポータル上で一部のコンテンツを生

ポ トレット:ポ タル上で

部の ンテンツを生

成するアプリケーション(ガジェットとか)

(7)

歴史

歴史

„

各ベンダーの独自ポータルが散在(互換性な

„

各ベンダーの独自ポータルが散在(互換性な

し)

„

2003年に JSR 168 の登場(ポートレットAPI1.0)

„

多くのポータルが

多くのポ タルが

JSR 168 に対応

JSR 168 に対応

2008年に JSR 286 の登場(ポートレットAPI2.0)

(8)

ポータル

ポータル

„

商用製品

„

商用製品

– WebSphere Portal, Oracle AS Portal, WebLogic

P t l S

J

S t

P t l I t

t

Portal, Sun Java System Portal, Interstage

Portalworks, N2 Portal, …

„

オープンソース製品

– Jetspeed2 Pluto PALポータル JBoss Portal

Jetspeed2, Pluto, PALポ タル, JBoss Portal,

Liferay, OpenPortal, iPoint Portal, uPortal,

Gridsphere eXo Portal

(9)

ポータル市場

ポータル市場

„

2007年の時点で 企業ポータル・ソフトウェア市場は

„

2007年の時点で、企業ポ タル ソフトウェア市場は

12億ドルのライセンスと保守収益で、年率18.3%を占

めるまで成長(

IDC)

めるまで成長(

IDC)

„

2012年までに企業ポータル・ソフトウェア市場が、20億

ドルに成長するだろう(

IDC)

ドルに成長するだろう(

IDC)

„

ポータル市場は、民間企業から官公庁へ、また大企業

から中堅中小企業 と導

裾野が拡大

おり 前

から中堅中小企業へと導入の裾野が拡大しており、前

年比

23.6%の高成長(IDC Japan)

(10)

ポータルの使用イメージ

ポータルの使用イメージ

ポータルページ

ポ タ

(11)

アーキテクチャ

アーキテクチャ

J

d2 PALポ タル JB

P

l Lif

Jetspeed2, PALポータル, JBoss Portal, Liferay,

ポータル

ポート ポート ポート

サーバ

レット

レット

レット

ユ ザ

アプリケーションサーバ

ユーザ

(Tomcat, JBoss,

…)

(12)

ポータルを適用すると良い場面

ポータルを適用すると良い場面

„

ユーザ認証があるウェブアプリ開発

„

ユーザ認証があるウェブアプリ開発

– ポータルの機能を利用できる(様々な認証に対応)

– コンテンツの開発に集中できる

„

将来での拡張が求められる場合

„

将来での拡張が求められる場合

– 必要な拡張をポートレットとして追加できる

スモ ルスタ トが可能

– スモールスタートが可能

„

乱立するウェブアプリを統合したい場合

– 入り口として導入する

(13)

ポートレット

ポートレット

API (JSR 168)

API (JSR 168)

„

ポータル・ポートレットの概要

„

ポータル・ポートレットの概要

„

ポートレット

API (JSR 168)

„

ポータル関連プロダクトの紹介

„

ポ トレット

APIでポ トレット作成

„

ポートレット

APIでポートレット作成

„

フレームワークでポートレット作成(

Teeda編)

„

フレームワークでポートレット作成(

SAStruts編)

(14)

JSR 168

JSR 168 とは

とは

„

JCPにより提供されるJavaポートレット仕様

„

JCPにより提供されるJavaポートレット仕様

„

ポートレットの実行環境を定義

„

コンテナとポートレット間の

APIを定義

„

ポ トレットのデ タを保存する機能を提供

„

ポートレットのデータを保存する機能を提供

„

サーブレットや

JSPを呼び出し可能にする

„

パッケージング方法を定義(配備を簡単に)

„

ベンダ 非依存

„

ベンダー非依存

(15)

ポータル・ポートレットの概略図

ポータル・ポートレットの概略図

ポートレットA

クライアント

ポ トレットA

ポータル

ポートレット

コンテナ

ポートレットB

A

B

ポートレットC

A

B

D

C

D

ポートレットD

C

ポ トレットD

(16)

ポータルの定義

ポータルの定義

„

ポータルは1つの

Webアプリケーション

„

ポ タルは1つの

Webアプリケ ション

„

情報システムのプレゼンテーション層を提供

シ グ

サイ オ

„

シングルサインオン

(SSO)

„

ユーザごとにパーソナライズ可能

„

ページ内に異なるリソースからコンテンツ集約

(17)

ポートレットの定義

ポートレットの定義

„

JavaベースのWebコンポーネント

„

Javaベ スのWebコンポ ネント

„

着脱可能な

UI コンポーネント

ペ ジ

を生成する

„

ページの一部

(Fragment)を生成する

„

ポートレットコンテナにより管理される

„

JSR 168 ポートレットは JSR 168 準拠のポータルで

稼動可能

稼動可能

(18)

ポートレットコンテナの定義

ポートレットコンテナの定義

„

ポートレットを実行し 必要な実行環境を提供する

„

ポ トレットを実行し、必要な実行環境を提供する

„

ポータルからのリクエストを受け取り、ポートレットを実

行する

行する

„

ポートレットのライフサイクルを管理する

„

永続的なストレージを提供する

(PortletPreference)

„

ポートレットが生成したコンテンツを集約まではしない

ポ トレットが生成した ンテンツを集約まではしな

„

ポータルと組になって1つとしてパッケージされる場合

もある

もある

ポータル

ポートレット

(19)

アーキテクチャ概要

アーキテクチャ概要

„

サーブレットの拡張仕様

„

サーブレットの拡張仕様

„

リクエストとレスポンスを渡される

„

アクションと描画の分離

„

ウィンドウ状態 モ ド プリファレンス ユ ザ

„

ウィンドウ状態、モード、プリファレンス、ユーザ

属性

„

ポートレットはページの一部を生成

„

固定の

URL に結びつかない

„

固定の

URL に結びつかない

(20)

ライフサイクル

ライフサイクル

„

サーブレットに似ている

„

サーブレットに似ている

„

init()

„

destroy()

„

render() と processAction()

ここが違う

„

render() と processAction()

←ここが違う

„

ポートレットコンテナにより管理

„

VMごとにポートレット定義で1つのインスタンス

を生成

を生成

(21)

ウィンドウ状態

ウィンドウ状態

„

通常

(Normal)

„

通常

(Normal)

„

最大化

(Maximized)

„

最小化

(Minimized)

„

カスタム状態

(ポ タルによる)

„

カスタム状態

(ポータルによる)

通常

最大化

最小化

通常

最大化

最小化

(22)

ポートレットモード

ポートレットモード

„

表示

(View)

„

表示

(View)

„

編集

(Edit)

„

ヘルプ

(Help)

„

カスタムモ ド

(ポ トレットによる)

„

カスタムモード

(ポートレットによる)

(23)

ポートレットの処理

ポートレットの処理

„

アクションと描画で処理が分かれる

„

アクションと描画で処理が分かれる

– processAction() と render()

„

リクエストのフローは2種類

– アクションなし: 各 render()

アクションなし

: 各 render()

– アクションあり: processAction()→各 render()

アクシ ン用と描画用のリク ストとレスポンス

„

アクション用と描画用のリクエストとレスポンス

– ActionRequest と ActionResponse

q

p

(24)

アクションありのフロー

アクションありのフロー

クライアント

ポータル

ポートレットA

ポートレットB

ポートレットC

リクエスト

processAction()

render() が呼ばれる前

に実行される。

render()

render()

Fragment

render()

Fragment

render() が呼ばれる順

番は決められていない。

ポータルによっては並列

g

Fragment

render()

ポ タルによっては並列

に呼ばれる。

(25)

portlet.xml

portlet.xml

„

ポートレットの情報を記述

„

ポートレットの情報を記述

„

portlet.xml に複数のポートレットを定義

„

WEB-INF に置く

(26)

WAR

WARファイル

ファイル

„

基本的にはサーブレットと同じ

„

基本的にはサーブレットと同じ

„

/WEB-INF/portlet.xml が必要

„

WARをポータルに配備する

„

複数のポ トレットを含む

„

複数のポートレットを含む

(27)

パフォーマンス

パフォーマンス

„

1つのポートレットでアクションがあると ページ上のす

„

1つのポ トレットでアクションがあると、ペ ジ上のす

べてのポートレットで

render() が呼ばれる

render() を非同期にする

– render() を非同期にする

– キャッシュを有効にする

– Ajax で対象のポートレットだけ処理

(28)

ネームスペース問題

ネームスペース問題

„

JavaScript を使った複数のポートレットを配置

„

JavaScript を使った複数のポートレットを配置

するとよく遭遇する

„

ポートレットの固有

IDを付加する

– <portlet:namespace/>

portlet:namespace/

– renderResponse.getNamespace()

(29)

ポータル関連プロダクトの紹介

ポータル関連プロダクトの紹介

„

ポータル・ポートレットの概要

„

ポータル・ポートレットの概要

„

ポートレット

API (JSR 168)

„

ポータル関連プロダクトの紹介

„

ポ トレット

APIでポ トレット作成

„

ポートレット

APIでポートレット作成

„

フレームワークでポートレット作成(

Teeda編)

„

フレームワークでポートレット作成(

SAStruts編)

(30)

Jetspeed 2

Jetspeed 2

„

Apache Portals が提供するポータル実装

„

Apache Portals が提供するポータル実装

„

ポータルコンテナには

Apache Pluto を利用

„

Spring を利用しているので、コンポーネントの

差し替えが可能

差し替えが可能

„

JSR 168 に合格している

„

現在

2.1.3 (2.2 に向けて活動中)

(31)

PAL

PALポータル

ポータル

„

SourceForge jpのPALプロジェクトから提供

„

SourceForge.jpのPALプロジェクトから提供

„

Jetspeed 2 をベースにしたポータル

„

管理ツールや

UI を拡張

„

現在

1 0 5 (1 1 に向けて活動中)

„

現在

1.0.5 (1.1 に向けて活動中)

Jetspeed2

p

管理ツ ル

管理ツール

独自パッチ

= PALポータル

ポ タル

(32)

フレームワーク

フレームワーク

„

ポートレットでもいろいろなフレームワークを利

„

ポートレットでもいろいろなフレームワークを利

用することができる

– JSF

– Struts

– PHP

Perl

– Perl

– Groovy

– Velocity

(33)

ポートレットフィルタ

ポートレットフィルタ

„

JSR 168 では未定義

„

JSR 168 では未定義

„

Apache Portals Bridge から提供

„

基本的にはサーブレットフィルタと同様

„

processAction() と render() の前後で処理

„

processAction() と render() の前後で処理

対象ポートレット

FilterPortlet

フィルタ

(34)

Seasar2

Seasar2

„

S2Container でポートレットをサポート

„

S2Container でポートレットをサポート

„

S2Portlet でポートレットに必要なものを提供

– S2GenericPortlet

– S2PortletFilter

S2PortletFilter

– HotdeployPortletFilter

T d でポ トレ トをサポ ト

„

Teeda でポートレットをサポート

„

SAStruts でポートレットをサポート

SAStruts でポ トレットをサポ ト

(35)

ポートレット

ポートレット

API

APIでポートレット作成

でポートレット作成

„

ポータル・ポートレットの概要

„

ポータル・ポートレットの概要

„

ポートレット

API (JSR 168)

„

ポータル関連プロダクトの紹介

„

ポ トレット

APIでポ トレット作成

„

ポートレット

APIでポートレット作成

„

フレームワークでポートレット作成(

Teeda編)

„

フレームワークでポートレット作成(

SAStruts編)

(36)

HelloWorld

HelloWorldポートレット

ポートレット

„

入力されたものを表示するだけのポートレット

„

入力されたものを表示するだけのポートレット

„

処理の概要

– 表示にはJSPを使う

– GenericPortletを継承したポートレット

GenericPortletを継承したポ トレット

– メッセージをリソースバンドルから取得

PALプ ジ クトのh ll

ld 1 3

„

PALプロジェクトのhelloworld 1.3

– http://sourceforge.jp/projects/pal

p

g jp p j

p

(37)

必要な環境

必要な環境

„

Java 1 4 以上

„

Java 1.4 以上

„

ビルド環境

(Ant や Maven2 とか)

„

JSR 168 準拠のポータル (PALポータルとか)

(普通のウェブアプリ開発と変わらない・・・)

(38)

ファイル一覧

ファイル一覧

„

portlet xml (ポートレット配備記述子)

„

portlet.xml (ポートレット配備記述子)

„

web.xml

„

HelloWorldPortlet.java(ポートレットクラス)

„

helloworld jsp

„

helloworld.jsp

„

HelloWorldResources.properties

„

HelloWorldResources_ja.properties

(39)

portlet.xml

portlet.xml(一部省略)

(一部省略)

<?xml version="1.0" encoding="UTF-8"?>

tl t

ユニ クなID

<portlet-app xmlns="http://…”>

<portlet>

<description>HelloWorld is a portlet for testing</description>

portlet-name: ユニークなID

display-name: ポータル上の表示名など

portlet-class: ポートレットのクラス名

p

p

g

p

<portlet-name>

HelloWorld

</portlet-name>

<display-name>

Hello World

</display-name>

<portlet-class>

p

jp.sf.pal.helloworld.HelloWorldPortlet

jp

p

</portlet-class>

p

<supports>

<mime-type>text/html</mime-type>

<portlet-mode>

portlet mode

VIEW

VIEW

</portlet-mode>

/portlet mode

</supports>

<resource-bundle>

jp.sf.pal.helloworld.resources.HelloWorldResources

</resource-bundle>

<portlet-info>

(40)

web.xml

web.xml

<?xml version="1 0" encoding="UTF-8"?>

<?xml version 1.0 encoding UTF 8 ?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems,

Inc.//DTD Web Application 2.3//EN"

pp

"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<display-name>HelloWorld Portlet</display-name>

<description>HelloWorld Portlet</description>

p

p

(41)

helloworld.jsp

helloworld.jsp

<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>

<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>

portletタグの初期化

<fmt:setBundle basename="

jp.sf.pal.helloworld.resources.HelloWorldResources

" />

<portlet:defineObjects/>

<form action="

<portlet:actionURL />

" method="POST">

<t bl b d

"0">

<table border="0">

<tr>

<td align="center"><fmt:message key="helloworld.lable.Hello"/></td>

<td align="center"><%=

request getAttribute("yourName")

%></td>

フォームの送信先はポータルへ

<td align= center ><%=

request.getAttribute( yourName )

%></td>

</tr>

<tr>

<td align="right"><fmt:message key="helloworld.lable.YourName"/></td>

td align right

fmt:message key helloworld.lable.YourName /

/td

<td align="left">

<input type="text" name="yourName"/>

</td>

</tr>

<tr>

(42)

HelloWorldPortlet.java

HelloWorldPortlet.java

public class HelloWorldPortlet extends

GenericPortlet

{

public class HelloWorldPortlet extends

GenericPortlet

{

public static final String YOUR NAME KEY = "yourName";

public static final String YOUR_NAME_KEY yourName ;

public void

init

() throws PortletException {

public void

init

() throws PortletException {

}

public void

destroy

() {

}}

(43)

HelloWorldPortlet

HelloWorldPortletの

doView()

doView()

protected void doView(

RenderRequest

request,

RenderResponse

p

(

q

q

p

response) throws PortletException, IOException {

response.setContentType("text/html");

processActionからの値を取得

String yourName = request.

getParameter

(YOUR_NAME_KEY);

if (yourName == null) {

yourName = "";

}

request.

setAttribute

(YOUR NAME KEY, yourName);

jspに値を渡す

request.

setAttribute

(YOUR_NAME_KEY, yourName);

PortletContext context = getPortletContext();

P tl tR

tDi

t h

d

t t

(44)

HelloWorldPortlet

HelloWorldPortletの

processAction()

processAction()

processAction()

processAction()

public void processAction(

ActionRequest

request,

ActionResponse

public void processAction(

ActionRequest

request,

ActionResponse

response)

throws PortletException, IOException {

フ イルから送信された値を取得

String yourName =

request.

getParameter

(YOUR_NAME_KEY);

jspファイルから送信された値を取得

if (yourName != null) {

response.

setRenderParameter

(YOUR_NAME_KEY,

N

)

yourName);

}

return;

renderに値を渡す

return;

}

(45)

HelloWorldResources.properties

HelloWorldResources.properties

helloworld lable Hello=Hello!

helloworld.lable.Hello=Hello!

helloworld.lable.YourName=Your Name:

helloworld.lable.Submit=Submit

(46)

HelloWorldResources_ja.properties

HelloWorldResources_ja.properties

javax portlet title=ハローワールド

javax.portlet.title=ハローワールド

javax.portlet.short-title=ハロー

javax.portlet.keywords=テスト,ハロー

helloworld.lable.Hello=こんにちは、

helloworld.lable.YourName=名前:

h ll

ld l bl S b it 送信

helloworld.lable.Submit=送信

(47)

ビルドと配備

ビルドと配備

„

Maven2でビルド

„

Maven2でビルド

„

PALポータルを起動

„

webapps/palportal/WEB-INF/deploy に

helloworld war をコピー

helloworld.war をコピ

„

PALポータルにログインして、コンテンツを追加

(48)

フレームワークでポートレット作成

フレームワークでポートレット作成

Teeda

Teeda編)

編)

編)

編)

„

ポータル・ポートレットの概要

„

ポータル・ポートレットの概要

„

ポートレット

API (JSR 168)

„

ポータル関連プロダクトの紹介

„

ポ トレット

APIでポ トレット作成

„

ポートレット

APIでポートレット作成

„

フレームワークでポートレット作成(

Teeda編)

„

フレームワークでポートレット作成(

SAStruts編)

(49)

Teeda

Teedaを使う

を使う

„

ちょっとした設定でポートレットとしても動作する

„

ちょっとした設定でポートレットとしても動作する

„

修正のポイント

– web.xmlを変更

– portlet xmlを追加

portlet.xmlを追加

– ポートレットフィルタとS2Portletのjarを追加

ht lフ イルからht l h d b d タグを削除する

– htmlファイルからhtml、head、bodyタグを削除する

(50)

web.xml

web.xmlを変更

を変更

„

TeedaServlet であれば

„

TeedaServlet であれば

TeedaPortletExtendedServlet に書き換える

or

„

TeedaConfigureListener であれば

„

TeedaConfigureListener であれば

TeedaPortletExtendedConfigureListener に

書き換える

書き換える

(51)

portlet.xml

portlet.xmlを追加

を追加

<portlet-app version="1.0">

<portlet>

p

<portlet-name>TeedaHtmlExample</portlet-name>

<display-name>Teeda HTML Example</display-name>

<description>This is an example portlet for Teeda.</description>

<portlet-class>

org.apache.portals.bridges.portletfilter.FilterPortlet

</portlet-class>

<init-param>

<name>portlet-class</name>

l

d

l F

P

l

/ l

<value>

org.seasar.teeda.core.portlet.FacesPortlet

</value>

</init-param>

<init-param>

<name>portlet filters</name>

<name>portlet-filters</name>

<value>

org.seasar.portlet.filter.S2PortletFilter,

org.seasar.portlet.filter.HotdeployPortletFilter

</value>

</init-param>

</init param>

(52)

ポートレットフィルタと

ポートレットフィルタと

S2Portlet

S2Portletの

jar

jarを

追加

追加

„

下記の

jar ファイルを WEB INF/lib に置く

„

下記の

jar ファイルを WEB-INF/lib に置く

„

S2Portlet:

http://s2portlet.sandbox.seasar.org/

„

Portlet Filter:

„

Portlet Filter:

http://portals.apache.org/bridges/

(53)

html

htmlファイルからタグを削除する

ファイルからタグを削除する

„

htmlファイルからhtml head bodyタグを削除

„

htmlファイルからhtml、head、bodyタグを削除

or

„

PALプロジェクトのフィルタを使う

jp sf pal facesresponse FacesResponseFilter

– jp.sf.pal.facesresponse.FacesResponseFilter

– jp.sf.pal.pooptimizer.OptimizerFilter

„

Jarファイルを追加

(54)

ビルドと配備

ビルドと配備

„

いつも通りビルド

„

いつも通りビルド

„

PALポータルを起動

„

webapps/palportal/WEB-INF/deploy に war

ファイルをコピー

ファイルをコピ

„

PALポータルにログインして、コンテンツを追加

(55)

フレームワークでポートレット作成

フレームワークでポートレット作成

SAStruts

SAStruts編)

編)

編)

編)

„

ポータル・ポートレットの概要

„

ポータル・ポートレットの概要

„

ポートレット

API (JSR 168)

„

ポータル関連プロダクトの紹介

„

ポ トレット

APIでポ トレット作成

„

ポートレット

APIでポートレット作成

„

フレームワークでポートレット作成(

Teeda編)

„

フレームワークでポートレット作成(

SAStruts編)

(56)

SAStruts

SAStrutsを使う

を使う

„

ちょっとした設定でポートレットとしても動作する

„

ちょっとした設定でポートレットとしても動作する

„

修正のポイント

– web.xmlを変更

– struts-config xmlを変更

struts config.xmlを変更

– common.jspを変更

tl t

lを追加

– portlet.xmlを追加

(57)

web.xml

web.xmlを変更

を変更

„

org seasar struts portlet filter PortletRequestFilter

„

org.seasar.struts.portlet.filter.PortletRequestFilter

encodingFilter の後にINCLUDEで追加

„

S2ContainerFilter を

„

S2ContainerFilter を

org.seasar.struts.portlet.filter.S2ContainerFilter に

変更

変更

„

HotdeployFilter を

f

k

i

h d l

H d l

org.seasar.framework.container.hotdeploy.Hotdepl

oyFilter に変更

(58)

struts

struts--config.xml

config.xmlを変更

を変更

„

S2RequestProcessor を

„

S2RequestProcessor を

org.seasar.struts.portlet.action.S2RequestPr

に変更

ocessor に変更

(59)

common.jsp

common.jspを変更

を変更

„

<%@taglib prefix="s" uri="http://sastruts seasar org"%>

„

<%@taglib prefix s uri http://sastruts.seasar.org %>

を以下に変更

<%@taglib prefix="s" uri="http://sastruts seasar org/portlet"%>

<%@taglib prefix s uri http://sastruts.seasar.org/portlet %>

(60)

portlet.xml

portlet.xmlを追加

を追加

<portlet-app>

<portlet>

p

<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>

l

/ / l

<value>/</value>

</init-param>

<init-param>

<param name>config</param name>

<param-name>config</param-name>

<param-value>/WEB-INF/struts-config.xml</param-value>

</init-param>

<init-param>

<init param>

<param-name>configFactory</param-name>

<param-value>org.seasar.struts.config.S2ModuleConfigFactory</param-value>

(61)

sa

sa--struts

struts--portlet

portletの

jar

jarを追加

を追加

„

SAStruts:

http://sastruts seasar org/

„

SAStruts: http://sastruts.seasar.org/

(上記から配布予定)

(62)

注意点

注意点

„

aタグのリンクは必要に応じて s:linkタグに書き

„

aタグのリンクは必要に応じて s:linkタグに書き

換える

„

デフォルトで

bodyタグ内のみが表示される

„

JavaScript の名前空間問題に注意する

„

JavaScript の名前空間問題に注意する

(63)

ビルドと配備

ビルドと配備

„

いつも通りビルド

„

いつも通りビルド

„

PALポータルを起動

„

webapps/palportal/WEB-INF/deploy に war

ファイルをコピー

ファイルをコピ

„

PALポータルにログインして、コンテンツを追加

(64)

ご清聴ありがとうござ ました

ご清聴ありがとうございました。

参照

関連したドキュメント

セキュアで大容量のクラウドストレージがビジネスを加速 Working

を行っている市民の割合は全体の 11.9%と低いものの、 「以前やっていた(9.5%) 」 「機会があれば

町の中心にある「田中 さん家」は、自分の家 のように、料理をした り、畑を作ったり、時 にはのんびり寝てみた

死がどうして苦しみを軽減し得るのか私には謎である。安楽死によって苦

に至ったことである︒

及び 回数 (予定) 令和4年4月から令和5年3月まで 計4回実施予定 晴天時の活動例 通年

核種分析等によりデータの蓄積を行うが、 HP5-1