GenericPortletについて

ポートレットフィルタをApacheへ渡すためにいくつか足りない部分について、検討するために、GenericPortletについて、見てみる。GenericPortlet は、Portlet と PortletConfig をインターフェースとして持つ。init では、渡されたPortletConfigをフィールドのprivate PortletConfig config に渡して、init() を呼ぶだけ。init()は各ポートレットの実装で上書きされたものを呼び出す。GenericPortlet は PortletConfig インターフェースを持っているので、そのconfigの各メソッドの代理をする。というわけで、単純に右から左に渡すだけで、PortletConfigインターフェースの対応は完了。そんで、processActionは各実装で上書きされるとして(上書きしないと、PortletException(“processAction method not implemented”)を投げてくる)、renderについては、response.setTitle(getTitle(request))をした後に、doDispatchで、doViewとかに振り分ける。ここでの、getTitle(RenderRequest request)では、portlet.xmlで指定されたリソースバンドルのjavax.portlet.titleから取ってきて渡すだけ。doDispatchについては、request.getWindowState()でポートレットのウィンドウ状態を取得して、WindowState.MINIMIZED以外の時にdoViewなどの各renderを実行する。WindowState.MINIMIZEDのときは、何もせずに終了。各renderの振り分けは、request.getPortletMode()でモードを取得して、PortletMode.VIEW、PortletMode.EDIT、PortletMode.HELPのときに対象のdo???を実行。それ以外のモードでは、PortletException(“unknown portlet mode: ” + mode)を投げてくる(つまり、独自のモードをポータルで実装したときには、doDispatchを上書きして、新たなGenericPortletみたいのを作っておかないと、表示できない感じがする。うーん、JSR 168 にもこの辺のことは書いてあるかと思うが、忘れた・・・)。

コメントを残す

メールアドレスが公開されることはありません。