By Terry.lee 
				
		
		
				
						
								SpiritSeekerS@sqatester.com
						
				
		
		
				
						
								 
						
				
		
		
				
						
								 
						
				
		
		
				
						本部分使用本系列中
						
								Part1
						
						搭建的开发环境
						
								,
						
						如果还没有搭建好开发环境
						
								,
						
						请参考
						
								Portlet
						
						应用开发
						
								(JSR168),Part1
						
						进行开发环境的搭建
						
								. 
						
				
		
		
				
						
								 
						
				
		
		
				
						在
						
								Part1
						
						中
						
								,
						
						我们开发了一个简单的
						
								portlet
						
						程序
						
								,
						
						但是
						几乎
						所有的
						代码和文件
						都是由
						
								Eclipse
						
						的
						
								pluto plugin
						
						替我们完成的
						
								,
						
						如何配置用来在
						
								Pluto
						
						中的
						
								Portal
						
						中添加新的
						
								Portal Page
						
						并且将新的
						
								Portlet
						
						添加到新的
						
								Page
						
						中去呢
						
								? Part2
						
						将一步一步教你如何创建一个新
						
								Portal Page. 
						
				
		
		
				
						
								 
						
				
		
		
				
						
								 
						
				
		
		
				
						
								·
								         
						
				
				
						
								Portal
						
						的设定
				
				
						
								
						
				
				
						
								Tomcat 
						
						中
						
								Webapps
						
						目录
						
								: 
						
						其中
						
								pluto
						
						是
						
								portal
						
						所在目录
						
								, 
						
						用以配置
						
								Portal Page
						
						的两个文件分别是
						
								pageregistry.xml
						
						和
						
								portletentityregistry.xml (
						
						如图
				
				
						
								Figure1_1)
						
				
		
		
				
						
						
								
								
								
										
										
										
										
										
										
										
										
										
										
										
										
										
										
										
										
										
										
										
										
										
										
										
										
								
								
								
								
								
						
						
								
										
										
								
						
						
						
				
		
		
				
						
								
										Figure1_1
								
						
				
		
		
				
						
								 
						
				
		
		
				
						
								 
						
				
		
		
				
						其中
						
								pageregistry.xml
						
						用来在
						
								Portal
						
						中配置
						
								Portal Page, 
						
						而
						
								portletentityregistry.xml 
						
						用来在
						
								Page
						
						中配置
						
								Portlet.
						
				
		
		
				
						
								 
						
				
		
		
				
						
								·
								         
						
				
				
						
								
										portletentityregistry.xml
								
						
						打开
						
								pageregistry.xml, 
						
						内容如下
				
				
						
								:
<?xml version="1.0" encoding="UTF-8"?>
						
				
		
		
				
						
								<portlet-entity-registry>
						
				
		
		
				
						
								
										    <application id="1">
						
				
		
		
				
						
								
										        <definition-id>portlets</definition-id>
						
				
		
		
				
						
								
										        <portlet id="1">
						
				
		
		
				
						
								
										            <definition-id>portlets.SimplePortlet</definition-id>
						
				
		
		
				
						
								
										        </portlet> 
						
				
		
		
				
						
								
										    </application>
						
				
		
		
				
						
								</portlet-entity-registry>
						
						其中
						
								application 
						
						标签表明了目前的
						
								application 
						
						的
						
								ID, portlet
						
						标签定义了一个
						
								Portlet , 
						
						如果你新开发了一个
						
								Portlet , 
						
						可以加入以下内容
				
				
						
								:
						
				
		
		
				
						
								<?xml version="1.0" encoding="UTF-8"?>
						
				
		
		
				
						
								<portlet-entity-registry>
						
				
		
		
				
						
								
										    <application id="1">
						
				
		
		
				
						
								
										        <definition-id>portlets</definition-id>
						
				
		
		
				
						
								
										        <portlet id="1">
						
				
		
		
				
						
								
										            <definition-id>portlets.SimplePortlet</definition-id>
						
				
		
		
				
						
								
										        </portlet> 
						
				
		
		
				
						
								
										
												        <portlet id="2">
								
						
				
		
		
				
						
								
										
												            <definition-id>portlets.IntroPortlet</definition-id>
								
						
				
		
		
				
						
								
										
												        </portlet>
								
								
										
										
								
						
				
		
		
				
						
								
										    </application>
						
				
		
		
				
						
								</portlet-entity-registry>
						
				
		
		
				
						
								 
						
				
		
		
				
						这样一来你又在
						
								portal
						
						中注册了一个新的
						
								Portlet,
						
						接下来是将新注册的
						
								Portlet
						
						加入
						
								Page
						
						中
						
								.
						
				
		
		
				
						
								
										 
								
						
				
		
		
				
						
								·
								         
						
				
				
						
								
										pageregistry.xml
								
						
						打开
						
								pageregistry.xml, 
						
						内容如下
				
				
						:
						
								
								
								
								
						
				
		
		
				<?xml version="1.0"?>
				
						
						
				
		
		
				<portal>
				
						
						
				
		
		
				
						 
				
		
		
				
						    <fragment name="navigation" class="org.apache.pluto.portalImpl.aggregation.navigation.TabNavigation">
				
						
						
				
		
		
				
						    </fragment>
				
						
						
				
		
		
				
						    
				
				
						
						
				
		
		
				
						    <fragment name="sample" type="page">
				
						
						
				
		
		
				
						        <navigation>
				
						
						
				
		
		
				
						            <title>Sample Portlet</title>
				
						
						
				
		
		
				
						            <description>Basic page to show the simple portlet</description>
				
						
						
				
		
		
				
						        </navigation>
				
						
						
				
		
		
				
						 
				
		
		
				
						        <fragment name="row" type="row">
				
						
						
				
		
		
				
						 
				
		
		
				
						            <fragment name="col1" type="column">
				
						
						
				
		
		
				
						 
				
		
		
				
						         
						       <fragment name="p1" type="portlet">
				
						
						
				
		
		
				
						                    <property name="portlet" value="1.1"/>
				
						
						
				
		
		
				
						                </fragment>
				
						
						
				
		
		
				
						 
				
		
		
				
						            </fragment>
				
						
						
				
		
		
				
						 
				
		
		
				
						        </fragment>
				
						
						
				
		
		
				
						 
				
		
		
				
						    </fragment>
				
						
						
				
		
		
				</portal>
				
						
						
				
		
		
				
						 
				
		
		
				以上是
				sample portlet
				的配置
				.
		
		
				
						 
				
		
		
				Fragment
				标签用来配置
				navigation
				(
				导航栏
				),
				Page,
				以及
				Page
				中的
				Column
				和
				Row.
		
		
				分别用
				fragment
				标签的
				type
				属性来标识
				. Pluto
				自带的
				Portal
				使用
				fragment
				标签来配置及处理简单的
				Portlet Layout.
		
		
				
						 
				
		
		
				<property name="portlet" value="1.1"/>
				中的
				value
				值是在
				portletentityregistry.xml
				中定义的
				. 
				分别对应
				application id
				
				
				和
				portlet id
				, 
				将其值用
				”.”
				连接起来使用用以定义一个
				Portlet
				. 
				同样
				, 
				如果使用
				<property name="portlet" value="1.2"/>
				,
				则将使用
				portlets.IntroPortlet.
				
						
						
				
		
		
				
						         
				
				
						
						
				
		
		
				
						 
				
		
		
				
						 
				
		
		
				
						1)     
				
				配置同一行中的两个
				Portlet, 
				如下
				:
		
		
				<?xml version="1.0"?>
		
		
				<portal>
		
		
				
						 
				
		
		
				
						    <fragment name="navigation" class="org.apache.pluto.portalImpl.aggregation.navigation.TabNavigation">
		
		
				
						    </fragment>
		
		
				
						    
						
						
				
		
		
				
						    <fragment name="sample" type="page">
		
		
				
						        <navigation>
		
		
				
						            <title>Sample Portlet</title>
		
		
				
						            <description>Basic page to show the simple portlet</description>
		
		
				
						        </navigation>
		
		
				
						 
				
		
		
				
						        <fragment name="row" type="row">
		
		
				
						 
				
		
		
				
						            <fragment name="col1" type="column">
		
		
				
						 
				
		
		
				
						                <fragment name="p1" type="portlet">
		
		
				
						                    <property name="portlet" value="1.1"/>
		
		
				
						                </fragment>
		
		
				
						 
				
		
		
				
						
								                <fragment name="p2" type="portlet">
				
		
		
				
						
								                    <property name="portlet" value="1.1"/>
				
		
		
				
						
								                </fragment>
				
				
						
						
				
		
		
				
						 
				
		
		
				
						            </fragment>
		
		
				
						 
				
		
		
				
						        </fragment>
		
		
				
						 
				
		
		
				
						    </fragment>
		
		
				
						 
				
		
		
				</portal>
		
		
				
						
								
								
						
						
						
				
		
		
				
						
								 
						
				
		
		
				
						
								2)
								     
						
				
				
						配置同一列中的
						两个
						
								Portlet, 
						
						如下
						
								:
						
				
		
		
				
						
								<?xml version="1.0"?>
						
				
		
		
				
						
								<portal>
						
				
		
		
				
						
								 
						
				
		
		
				
						
								
										    <fragment name="navigation" class="org.apache.pluto.portalImpl.aggregation.navigation.TabNavigation">
						
				
		
		
				
						
								
										    </fragment>
						
				
		
		
				
						
								
										    
										
										
								
						
				
		
		
				
						
								
										    <fragment name="sample" type="page">
						
				
		
		
				
						
								
										        <navigation>
						
				
		
		
				
						
								
										            <title>Sample Portlet</title>
						
				
		
		
				
						
								
										            <description>Basic page to show the simple portlet</description>
						
				
		
		
				
						
								
										        </navigation>
						
				
		
		
				
						
								 
						
				
		
		
				
						
								
										        <fragment name="row1" type="row">
						
				
		
		
				
						
								 
						
				
		
		
				
						
								
										            <fragment name="col1" type="column">
						
				
		
		
				
						
								 
						
				
		
		
				
						
								
										                <fragment name="p1" type="portlet">
						
				
		
		
				
						
								
										                    <property name="portlet" value="1.1"/>
						
				
		
		
				
						
								
										                </fragment>
						
				
		
		
				
						
								 
						
				
		
		
				
						
								
										            </fragment>
						
				
		
		
				
						
								 
						
				
		
		
				
						
								
										        </fragment>
						
				
		
		
				
						
								 
						
				
		
		
				
						
								
										
												        <fragment name="row2" type="row">
								
						
				
		
		
				
						
								
										 
								
						
				
		
		
				
						
								
										
												            <fragment name="col1" type="column">
								
						
				
		
		
				
						
								
										 
								
						
				
		
		
				
						
								
										
												                <fragment name="p1" type="portlet">
								
						
				
		
		
				
						
								
										
												                    <property name="portlet" value="1.1"/>
								
						
				
		
		
				
						
								
										
												                </fragment>
								
						
				
		
		
				
						
								
										 
								
						
				
		
		
				
						
								
										
												            </fragment>
								
						
				
		
		
				
						
								
										 
								
						
				
		
		
				
						
								
										
												        </fragment>
								
								
										
										
								
						
				
		
		
				
						
								 
						
				
		
		
				
						
								
										    </fragment>
						
				
		
		
				
						
								 
						
				
		
		
				
						
								</portal>
						
				
		
		
				
						
								 
						
				
		
		
				
						
								
										
										
								
						
						
						
				
		
		
				
						
								 
						
				
		
		
				
						
								 
						
				
		
		
				
						
								 
						
				
		
		
				
						
								·
								         
						
				
				
						
								
										Portlet Modes 
								
						
						
								和
						
						
								
										Portlet window state
								
						
				
				
						
								s
Portlet
						
						模式
						
								(Portlet Mode)
						
						是
						
								Portlet
						
						提供的用以区分
						
								Portlet
						
						所执行功能的一个概念
						
								.
						
						通常情况下其拥有以下几种模式
				
				
						
								:
1. VIEW
						
				
		
		
				
						
								
										2. EDIT
								
						
				
		
		
				
						
								
										3. HELP
								
						
						以上各模式分别对应
						
								GenericPortlet
						
						中的
						
								doView(…) , doEdit(…) , doHelp(…) 
						
						方法
						
								,
						
						分别调用以上方法来产生各个模式中的
						
								Fragment
						
						内容
						
								. 
						
						非常类似
						
								Servlet
						
						中的
						
								doGet(…) , doPost(…) 
						
						方法
						
								,
						
						都是
						
								Helper
						
						方法
						
								, 
						
						但是概念不同
						
								.
						
				
		
		
				
						
								 
						
				
		
		
				
						
								Portlet
						
						状态
						
								(Portlet window states)
						
						提供了对于
						
								Portlet
						
						窗口的控制功能
						
								, 
						
						其中有如下三种最基本的状态
						
								:
						
				
		
		
				
						
								
										1.
										     
								
						
				
				
						
								
								
										
												
														Normal
												
										
								
								
										
												
												
										
								
						
				
		
		
				
						
								
										2.
										     
								
						
				
				
						
								
										Maximized
								
						
				
		
		
				
						
								
										3.
										     
								
						
				
				
						
								
										Minimized
								
						
				
		
		
				
						
								 
						
				
		
		
				
						
								Portlet
						
						开发人员可以在处理
						
								
										ActionRequest
								
								(
						
						以后的章节将讲述其概念
						
								) 
						
						时使用代码实现
						
								Portlet
						
						模式
						
								, 
						
						及其
						
								Portlet
						
						状态的转变
						
								.
						
				
		
		
				
						
								 
						
				
		
		
				
						
								注
						
				
				
						
								
										: 
								
						
				
				
						
								只能在处理
						
				
				
						
								
										ActionRequest
								
						
				
				
						
								时改变
						
				
				
						
								
										Portlet Modes
								
						
				
				
						
								和
						
				
				
						
								
										Portlet Window states.
								
						
				
		
		
				
						
								
										      
										
										
								
						
				
		
		
				
						以上
						
								Portlet Modes
						
						和
						
								Portlet window states
						
						都可以配置成
						
								custom Portlet mode
						
						和
						
								custom portlet window state. 
						
						不同的地方在于对于
						
								Mode
						
						来说
						
								, 
						
						定制化的
						
								Mode
						
						需要对
						
								GenericPortlet
						
						的
						
								doDispatch
						
						方法进行重写
						
								(Overriding), 
						
						因为
						
								GenericPortlet
						
						类通过
						
								render
						
						方法按照不同的
						
								Portlet Mode
						
						将
						
								request
						
						分别分发给
						
								doView,doEdit,doHelp
						
						等辅助方法
						
								. 
						
						如果需要定制的
						
								Mode , 
						
						必须重写
						
								doDispatch 
						
						方法
						
								. 
						
						同时如果使用
						
								Portal
						
						提供商的
						
								Portlet Modes 
						
						或者
						
								Portlet window States,
						
						都必须在部署描述中添加相关的设定
						
								.
						
				
		
		
				
						
								 
						
				
		
		
				
						
								
										A.
										     
								
						
				
				
						
								添加
						
						
								
										Custom Portlet Modes 
								
						
				
		
		
				
						以下使用代码实现了一个新的
				
				
						
								
										Portlet Mode: CONFIG
								
						
						, 
				
				当然也可以使用
				
						Portal
				
				提供商支持的
				
						Portlet Mode. 
				
				但是需要
				
						Mapping
				
				到
				
						Portal
				
				提供商所支持的
				
						Portlet Mode. 
				
				使用如下描述
				
						:
				
		
		
				
						
								 
						
				
		
		
				
						
								    <custom-portlet-mode>
				
		
		
				
						
								         <description>Provides administration functions</description>
				
		
		
				
						
								         <portlet-mode>CONFIG</portlet-mode>
				
		
		
				
						
								    </custom-portlet-mode>
				
		
		
				
						
								 
						
				
		
		
				
						
								
										1. Portlet
								
						
						
								代码
						
						
								
										(
								
								
										CustomPortletModeExample
								
								
										.java)
								
						
				
		
		
				
						
								
										 
								
						
				
		
		
				
						package
				
				
						portlets.portletmode;
				
				
						
						
				
		
		
				
						 
				
		
		
				/**
				
						
						
				
		
		
				
						 
						*
						
								@author
						
						terry
				
				
						
						
				
		
		
				
						 
						*
				
				
						
						
				
		
		
				
						 
						*
						To
						change
						the
						template
						for
						this
						generated
						type
						comment
						go
						to
				
				
						
						
				
		
		
				
						 
						*
						Window>Preferences>Java>Code
						Generation>Code
						and
						Comments
				
				
						
						
				
		
		
				
						 
						*/
				
				
						
						
				
		
		
				
						import
				
				
						javax.portlet.*;
				
				
						
						
				
		
		
				
						import
				
				
						java.io.IOException;
				
				
						
						
				
		
		
				
						 
				
		
		
				
						public
				
				
						
								class
						
						CustomPortletModeExample
						
								extends
						
						GenericPortlet{
				
				
						
						
				
		
		
				
						 
				
		
		
				
						  
						
								public
						
						
								void
						
						doView(RenderRequest
						request,
						RenderResponse
						response)
				
				
						
						
				
		
		
				
						  
						
								throws
						
						PortletException,
						IOException
				
				
						
						
				
		
		
				
						  
						{
				
				
						
						
				
		
		
				
						  
						response.setContentType(
						"text/html"
						);
				
				
						
						
				
		
		
				
						 
				
		
		
				
						  
						String
						jspName
						=
						getPortletConfig().getInitParameter(
						"all"
						);
				
				
						
						
				
		
		
				
						 
				
		
		
				
						  
						PortletRequestDispatcher
						rd
						=
				
				
						
						
				
		
		
				
						  
						  
						getPortletContext().getRequestDispatcher(jspName);
				
				
						
						
				
		
		
				
						 
				
		
		
				
						  
						rd.include(request,
						response);
				
				
						
						
				
		
		
				
						  
						}
				
				
						
						
				
		
		
				
						 
				
		
		
				
						  
						
								public
						
						
								void
						
						doEdit(RenderRequest
						request,
						RenderResponse
						response)
				
				
						
						
				
		
		
				
						  
						
								throws
						
						PortletException,
						IOException
				
				
						
						
				
		
		
				
						  
						{
				
				
						
						
				
		
		
				
						  
						response.setContentType(
						"text/html"
						);
				
				
						
						
				
		
		
				
						 
				
		
		
				
						  
						String
						jspName
						=
						getPortletConfig().getInitParameter(
						"all"
						);
				
				
						
						
				
		
		
				
						 
				
		
		
				
						  
						PortletRequestDispatcher
						rd
						=
				
				
						
						
				
		
		
				
						  
						  
						getPortletContext().getRequestDispatcher(jspName);
				
				
						
						
				
		
		
				
						 
				
		
		
				
						  
						rd.include(request,
						response);
				
				
						
						
				
		
		
				
						  
						}
				
				
						
						
				
		
		
				
						  
						  
				
				
						
						
				
		
		
				
						  
						
								public
						
						
								void
						
						render(RenderRequest
						request,
						RenderResponse
						response)
				
				
						
						
				
		
		
				
						  
						
								throws
						
						PortletException,
						IOException{
				
				
						
						
				
		
		
				
						         
						
								doDispatcher(request,response);
						
				
				
						
								
								
						
				
		
		
				
						  
						}
				
				
						
						
				
		
		
				
						  
						  
				
				
						
						
				
		
		
				
						  
						
								public
						
						
								void
						
						doDispatcher(RenderRequest
						request,
						RenderResponse
						response)
				
				
						
						
				
		
		
				
						         
						
								throws
						
						PortletException,
						IOException{
				
				
						
						
				
		
		
				
						
								         if(!request.getWindowState().equals(WindowState.MINIMIZED)){
				
				
						
						
				
		
		
				
						
								         
								if
								(request.getPortletMode().equals(PortletMode.VIEW)){
						
				
				
						
								
								
						
				
		
		
				
						
								                
								doView(request,response);
						
				
				
						
								
								
						
				
		
		
				
						
								         
								}
								else
								if
								(request.getPortletMode().equals(PortletMode.EDIT)){
						
				
				
						
								
								
						
				
		
		
				
						
								                
								doEdit(request,response);
						
				
				
						
								
								
						
				
		
		
				
						
								         
								}
								else
								if
								(request.getPortletMode().equals(
								new
								PortletMode(
								"CONFIG"
								))){
						
				
				
						
								
								
						
				
		
		
				
						
								                
								doConfig(request,response);
						
				
				
						
								
								
						
				
		
		
				
						
								         
								}
						
				
				
						
								
								
						
				
		
		
				
						}
				
				
						
						
				
		
		
				
						  
						}
				
				
						
						
				
		
		
				
						  
				
				
						
						
				
		
		
				
						  
						
								public
						
						
								void
						
						doConfig(RenderRequest
						request,
						RenderResponse
						response)
				
				
						
						
				
		
		
				
						  
						  
						
								throws
						
						PortletException,
						IOException
				
				
						
						
				
		
		
				
						  
						{
				
				
						
						
				
		
		
				
						
								  
								  
								response.setContentType(
								"text/html"
								);
						
				
				
						
								
								
						
				
		
		
				
						
								 
						
				
		
		
				
						
								  
								  
								String
								jspName
								=
								getPortletConfig().getInitParameter(
								"all"
								);
						
				
				
						
								
								
						
				
		
		
				
						
								 
						
				
		
		
				
						
								  
								  
								PortletRequestDispatcher
								rd
								=
						
				
				
						
								
								
						
				
		
		
				
						
								         
								getPortletContext().getRequestDispatcher(jspName);
						
				
				
						
								
								
						
				
		
		
				
						
								 
						
				
		
		
				
						
								  
								  
								rd.include(request,
								response);
						
				
				
						
						
				
		
		
				
						  
						}
				
				
						
						
				
		
		
				
						  
				
				
						
						
				
		
		
				
						  
						
								public
						
						
								void
						
						processAction(ActionRequest
						request,
						ActionResponse
						response)
				
				
						
						
				
		
		
				
						         
						
								throws
						
						PortletException,
						IOException
				
				
						
						
				
		
		
				
						  
						{
				
				
						
						
				
		
		
				
						         
						String
						action=request.getParameter(
						"ACTION"
						);
				
				
						
						
				
		
		
				
						         
						System.out.println(
						"ACTION"
						+
						action);
				
				
						
						
				
		
		
				
						         
						
								if
						
						(action==
						
								null
						
						){
				
				
						
						
				
		
		
				
						                
						action=
						""
						;
				
				
						
						
				
		
		
				
						         
						}
				
				
						
						
				
		
		
				
						         
						response.setRenderParameter(
						"ACTION"
						,action);
				
				
						
						
				
		
		
				
						  
						}
				
				
						
						
				
		
		
				
						}
						
								
								
						
				
		
		
				
						
								
										 
								
						
				
		
		
				
						
								
										2. JSP(all_mode.jsp)
								
						
				
		
		
				<%@ page session="false" %>
				
						
						
				
		
		
				<%@ page import="javax.portlet.*"%>
				
						
						
				
		
		
				<%@ page import="java.util.*"%>
				
						
						
				
		
		
				<%@ taglib uri='/WEB-INF/tld/portlet.tld' prefix='portlet'%>
				
						
						
				
		
		
				<portlet:defineObjects/>
				
						
						
				
		
		
				<br>
				
						
						
				
		
		
				<h3>Custom Portlet Mode Example</h3>
				
						
						
				
		
		
				Current Portlet Mode: <b><%=renderRequest.getPortletMode()%></b><br>
				
						
						
				
		
		
				
						
								Current
						
						
								Window
								State
						
				
				: <b><%=renderRequest.getWindowState()%></b><br>
				
						
						
				
		
		
				<br>
				
						
						
				
		
		
				
						 
				
		
		
				
						
								
										 
								
						
				
		
		
				
						
								
						
				
				
						5. Portlet.xml
				
		
		
				
						
								
						
				
				<?xml version="1.0" encoding="UTF-8"?>
				
						
						
				
		
		
				<portlet-app xmlns="/org/apache/pluto/portalImpl/xml/portlet-app_1_0.xsd" version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="/org/apache/pluto/portalImpl/xml/portlet-app_1_0.xsd /org/apache/pluto/portalImpl/xml/portlet-app_1_0.xsd">
				
						
						
				
		
		
				
						 
				
		
		
				
						  <!-- Custom PortletMode Example -->
				
						
						
				
		
		
				
						  <portlet>
				
						
						
				
		
		
				
						         <description>CustomPortletModeExample Example</description>
				
						
						
				
		
		
				
						         <portlet-name>CustomPortletModeExample</portlet-name>
				
						
						
				
		
		
				
						         <display-name>CustomPortletModeExample</display-name>
				
						
						
				
		
		
				
						         <portlet-class>portlets.portletmode.CustomPortletModeExample</portlet-class>
				
						
						
				
		
		
				
						         <init-param>
				
						
						
				
		
		
				
						                <name>all</name>
				
						
						
				
		
		
				
						                <value>/fragments/portletmode/all_mode.jsp</value>
				
						
						
				
		
		
				
						         </init-param>
				
						
						
				
		
		
				
						         <expiration-cache>-1</expiration-cache>
				
						
						
				
		
		
				
						         <supports>
				
						
						
				
		
		
				
						                <mime-type>text/html</mime-type>
				
						
						
				
		
		
				
						                <portlet-mode>VIEW</portlet-mode>
				
						
						
				
		
		
				
						                <portlet-mode>EDIT</portlet-mode>
				
						
						
				
		
		
				
						                <portlet-mode>CONFIG</portlet-mode>
				
						
						
				
		
		
				
						         </supports>
				
						
						
				
		
		
				
						         <supported-locale>en</supported-locale>
				
						
						
				
		
		
				
						         <portlet-info>
				
						
						
				
		
		
				
						  
						              <title>Custom PortletMode Example</title>
				
						
						
				
		
		
				
						                <short-title>PortletMode</short-title>
				
						
						
				
		
		
				
						                <keywords>PortletMode</keywords>
				
						
						
				
		
		
				
						         </portlet-info>
				
						
						
				
		
		
				
						
								    </portlet>
						
								
								
						
				
		
		
				
						
								 
						
				
		
		
				
						</portlet-app>
						
								
										
										
								
						
				
		
		
				
						
								
								
										6. portletregistry.xml.
								
						
				
		
		
				
						
								
										 
								
						
				
		
		
				
						<?xml version="1.0" encoding="UTF-8"?>
				
		
		
				
						<portlet-entity-registry>
				
		
		
				
						
								    <application id="10">
				
		
		
				
						
								        <definition-id>portlets</definition-id>
				
		
		
				
						
								
										        <portlet id="10">
						
				
		
		
				
						
								
										            <definition-id>
						
						
								portlets.CustomPortletModeExample
						
						
								</definition-id>
						
				
		
		
				
						
								
										        </portlet>
						
						
								
								
						
				
		
		
				
						
								    </application>
				
		
		
				
						</portlet-entity-registry>
				
		
		
				
						
								
										 
								
						
				
		
		
				
						
								
										7. pageregistry.xml
								
						
				
		
		
				
						
								
						
				
				
						<?xml version="1.0"?>
				
		
		
				
						<portal>
				
		
		
				
						
								 
						
				
		
		
				
						
								    <fragment name="navigation" class="org.apache.pluto.portalImpl.aggregation.navigation.TabNavigation">
				
		
		
				
						
								    </fragment>
				
		
		
				
						
								    
								
								
						
				
		
		
				
						       
						  <!-- Custom PortletMode Example Page -->
				
						
						
				
		
		
				
						    
						
						
						  <fragment name="customportletmodepage" type="page">
				
						
						
				
		
		
				
						        <navigation>
				
						
						
				
		
		
				
						            <title>Custom PortletMode Example Page</title>
				
						
						
				
		
		
				
						            <description>Custom PortletMode Example Page</description>
				
						
						
				
		
		
				
						        </navigation>
				
						
						
				
		
		
				
						        <fragment name="row1" type="row">
				
						
						
				
		
		
				
						            <fragment name="col1" type="column">
				
						
						
				
		
		
				
						                <fragment name="p1" type="portlet">
				
						
						
				
		
		
				
						                    <property name="portlet" value="10.10"/>
				
						
						
				
		
		
				
						                </fragment>
				
						
						
				
		
		
				
						            </fragment>
				
						
						
				
		
		
				
						        </fragment>
				
						
						
				
		
		
				
						
								  </fragment>
						
								
								
						
				
		
		
				
						
								 
						
				
		
		
				
						</portal>
				
		
		
				
						
								 
						
				
		
		
				
						
								 
						
				
		
		
				
						将以上源代码编译后
						
								, 
						
						再通过
						
								Eclipse
						
						生成
						
								/
						
						更新
						
								Portlet
						
						的
						
								web.xml
						
						后
						
								,  
						
						将所有配置及相关文件部署后
						
								, 
						
						启动
						
								Tomcat. 
						
				
		
		
				
						
								 
						
				
		
		
				
						
								 
						
				
		
		
				
						
								 
						
				
		
		
				
						在
						
								Browser
						
						中加载如下页面
						
								: 
								
										Http://localhost:8080/pluto/portal , 
						
						可以看到如下的页面
						
								(
						
						图
						
								:2_1)
						
				
		
		
				
						
								 
						
				
		
		
				
						
								      
						
				
				
						
								
										
										
								
						
						
								                         
						
				
				
						图
						
								2-1
						
				
		
		
				
						
								 
						
				
		
		
				
						
								 
						
				
		
		
				
						单击
						
								Custom PortletMode Example Page
						
						后可以看到如下
						
								Portlet 
						
						页面
						
								:
						
				
		
		
				
						
								 
						
				
		
		
				
						
								
										
										
								
						
						
						
				
		
		
				
						图
						
								2-2
						
				
		
		
				
						
								 
						
				
		
		
				
						单击右上角的
						
								config
						
						后
						
								,
						
						可以看到如下页面片段
						
								:
								
										
										
								
						
				
		
		
				
						
								 
						
				
		
		
				
						
								
										
										
								
						
						
						
				
		
		
				
						图
						
								2-3
						
				
		
		
				
						
								 
						
				
		
		
				
						以上可以看到新添加的
						
								Portlet Mode: config.
						
				
		
		
				
						
								 
						
				
		
		
				
						
								 
						
				
		
		
				
						
								
										B.
										     
								
						
				
				
						
								添加
						
						
								
										Custom Window States
								
						
				
		
		
				
						
								
										 
								
						
				
		
		
				
						
								
										
												 
										
								
						
						添加新的
						
								window states
						
						同样需要在配置文件中加入相应的描述
						
								,
						
						如下
				
				
						
								:
						
						
								<custom-window-state>
						
				
		
		
				
						
								<description>Occupies 50% of the portal page</description>
						
				
		
		
				
						
								<name>half_page</name>
						
				
		
		
				
						
								</custom-window-state>
						
				
		
		
				
						
								
										 
								
						
				
		
		
				但是同样需要
				
						Mapping
				
				到
				
						Portal
				
				提供商所支持的
				
						Window state.
				
		
		
				
						
								 
						
				
		
		
				
						
								总结
						
						
								
										:
								
						
				
		
		
				
						因为
						
								Eclipse 
						
						的
						
								Pluto plugin
						
						使用的是
						
								version1.0 , 
						
						所以可能有许多
						
								Bugs
						
						或者没有实现的功能
						
								, 
						
						所以如果需要最新版本的
						
								Pluto , 
						
						可以在
						
								Apache
						
						的
						
								CVS
						
						上下载
						
								, 
						
						下载的代码中有现成的
						
								Build scripts 
						
						以及相关的
						
								deploy script.
						
						请参考相关文档资料
						
								.
						
				
		
		
				
						
								 
						
				
		
		
				
						
								资源
						
						
								:
						
				
		
		
				
						·         
				
				Pluto 
http://jakarta.apache.org/pluto
		
		
				
						·         
				
				Pluto Mail List
http://news.gmane.org/gmane.comp.jakarta.pluto.user
		
		
				
						·         
				
				WSRP Spec1.0
http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsrp
		
		
				
						·         
				
				Apache
				的
				WSRP
				实现
				
						
						http://ws.apache.org/wsrp4j/
						
						
						
						
				
		
		
				
						·         
				
				Apache’s Portal, JetSpeed:
http://jakarta.apache.org/jetspeed/site/index.html
		
		
				
						·         
				
				JSR 168: 
http://www.jcp.org/en/jsr/detail?id=168
		
		
				
						·
				
				"Portlet 
				规范介绍
				" By Stefan Hepper 
				和
				Stephan Hesmer 
		
		
				
						Part 1: Get your feet wet with the specification's underlying terms and concepts (August 2003) 
		
		
				
						
								Part 2: The Portlet API's reference implementation reveals its secrets
						
						(September 2003)