启用协作源

要启用协作源,执行下列步骤。

  1. 在“项目资源管理器”视图中,选择一个 portlet 或 Portlet 部署描述符。Portlet 将在您展开 portlet 项目文件夹中的 Portlet 部署描述符节点时显示出来。
  2. 右键单击期望的 portlet,然后从弹出菜单中选择协作 > 启用源启用协作源对话框打开。或者,打开 JSP 页面并确保它具有焦点,然后从菜单中选择页面 > 协作 > 启用源
    “启用协作源”对话框
  3. 为下列字段提供值:
    数据类型
    指定要由源 portlet 传送的数据的数据类型的名称。或者,如果已经声明想要发布的数据类型,则单击浏览按钮以打开选择类型对话框并选择希望发布的 WSDL 数据类型。将在每个字段中指定 WSDL 文件中的数据类型和名称空间。指定的值将用来声明 WSDL 文件 <types> 元素中的数据类型。
    名称空间
    指定类型的名称空间。例如,http://www.yourco.com/c2a。指定的值将存储在 WSDL 文件中并将用作指定输出属性的名称空间。
    [源操作]名称
    指定 portlet 操作名称。
    名称参数(可选,适用于 JSR 168 portlet)
    指定操作名称参数。对于 JSR 168 Struts portlet,必须将操作名称参数指定为 spf_strutsAction
    [参数]名称
    指定 portlet 操作所使用或产生的参数的名称。
    标题(可选)
    指定 portlet 操作所使用或产生的参数的标题名称。
    绑定至
    指定绑定参数值的位置。目前此属性只能指定下列其中一个值:
    • 呈示参数:[仅适用于 JSR 168 API] 它指定将值作为 ActionResponse 中的呈示参数来绑定(仅作为输出参数)。
    • 请求参数:它指定将值作为 PortletRequest 对象中的参数绑定。如果省略 boundTo 属性,则这是缺省值。注意,对于输出参数,通常应指定不同的值,这是因为 WebSphere® Portal 提供的缺省 PortletRequest 实现不允许在操作处理期间设置参数。
    • 请求属性:它指定将值作为 PortletRequest 对象中的属性绑定。
    • 会话:它指定将值绑定至 PortletSession 对象。

    在启用源 portlet 时,还可以使用此属性而不使用提供的“单击激活操作”界面。

    以下示例显示样本库中的协作 Portlet 应用程序样本中的 OrderDetailPortlet.java 的 actionPerformed() 方法。该 portlet 将 TRACKING_ID 参数传递给它的 actionPerformed() 方法中的属性代理。此参数对应 portlet 的 WSDL 文件(在此示例中为 OrderDetail.wsdl)的绑定部分中的输出参数。

    OrderDetailPortlet.java
    OrderDetailPortlet.java
    
    
    ...
    	private static final String PREFIX = ""; //$NON-NLS-1$
    	public static final String ACTION_NAME = PREFIX + "actionName"; //$NON-NLS-1$
    	public static final String ORDER_DETAILS = PREFIX + "orderDetails"; //$NON-NLS-1$
    	public static final String ORDER_ID_ENTRY = PREFIX + "orderIdEntry"; //$NON-NLS-1$
    	public static final String ORDER_ID = PREFIX + "orderId"; //$NON-NLS-1$
    	public static final String ORDER_DETAIL_BEAN = PREFIX + "orderDetailBean"; //$NON-NLS-1$
    	public static final String ORDER_DETAIL = PREFIX + "orderDetail"; //$NON-NLS-1$
    	public static final String TRACKING_ID = PREFIX + "trackingId"; //$NON-NLS-1$
    ...
    	public void actionPerformed(ActionEvent event) {
    		String actionName = event.getActionString();		PortletRequest request = event.getRequest();		//An action causes the state to be modified
    		ShippingUtils.setLastModified(request);		if (getPortletLog().isDebugEnabled()) {
    			getPortletLog().debug(Messages.getString("OrderDetailPortlet_action_entry")); //$NON-NLS-1$
    		}		if (actionName.equals(ORDER_DETAILS)) {
    			request.getPortletSession().setAttribute(
    				ACTION_NAME,
    				ORDER_DETAILS);
    			request.getPortletSession().setAttribute(
    				ORDER_ID,
    				request.getParameter(ORDER_ID));			/*
    			 *  We do this as tracking id is an out param in the C2A WSDL file
    			 *  We write the tracking id in the request so it can be published by
    			 *  the broker in the same event cycle
    			 */
           OrderDetail od = ShippingDB.getOrderDetail(request.getParameter(ORDER_ID));
                request.getPortletSession().setAttribute(ORDER_DETAIL, od);
           request.setAttribute(TRACKING_ID, od.getTrackingId());
    			
            }  else if (actionName.equals(ORDER_ID_ENTRY)) {
    			request.getPortletSession().setAttribute(
    				ACTION_NAME, ORDER_ID_ENTRY);
    		}
    	}
    ...
    OrderDetail.wsdl(属性代理接收来自请求属性的跟踪标识参数。)
    ...
    <binding 
        name="OrderDetailBinding" 
        type="tns:OrderDetail_Service">
      <portlet:binding></portlet:binding>
      <operation name="order_Detail">
        <portlet:action name="orderDetails" type="simple" caption="Order.Details" description="Get.details.for.specified.order.id"/>
        <input>
          <portlet:param name="orderId" partname="order_Id" caption="order.id"/>
        </input>
        <output>
          <portlet:param name="trackingId" partname="tracking_Id" boundTo="request-attribute" caption="tracking.id"/> 
        </output>
      </operation>
    </binding>
    
    ...
    资源束(可选)
    指定本地语言资源文件的基本名称,该文件包含操作和属性的标题及描述。指定的基本名称将由 portlet 部署描述符中的 c2a-nls-file 配置参数定义,并且将在 Java 资源节点下生成一个空资源束。例如,如果您输入 nls.shippingc2a,则您将编辑相应的特定于语言的资源束:nls\shippingc2a<_lang>.properties,以便以 key=translated text 格式指定已翻译的标题和描述。
    源 portlet(必填)
    指定要作为协作源启用的具体 portlet。
  4. 单击确定。支持协作的 portlet 显示在“项目资源管理器”视图中并带有源 portlet 图标(Cooperative source portlet icon)。

启用协作源操作执行下列任务:

  1. 修改 web.xml 以添加 servlet 类条目来引用属性代理类:
    <servlet-class>com.ibm.wps.pb.wrapper.PortletWrapper</servlet-class>
    <init-param>
          <param-name>c2a-application-portlet-class</param-name>
       <param-value>servlet-class</param-value>
    </init-param>
  2. 修改 portlet.xml 以将配置参数添加至通过 WSDL 文件将操作显示给属性代理的每个具体 portlet,并指定本地语言资源文件的基本名称。
    <config-param>
        	<param-name>c2a-action-descriptor</param-name>
        <param-value>WSDL file</param-value>
    </config-param>
    <config-param>
        	<param-name>c2a-nls-file</param-name>
        <param-value>resource bundle name</param-value>
    </config-param>
  3. 将附加库 pbportlet.jar 导入到 portlet 项目中的 /WEB-INF/lib 以供属性代理使用。
  4. 创建包含以下部分的指定 WSDL 文件:
    <definitions>
    作为根。
    <types>
    使用“XML 模式数据类型”(XSD)声明数据类型。
    <message>
    输出消息。
    <portType>
    定义操作的抽象集合。<output>。
    <binding>
    始终扩展至 <portlet:binding> 以将该部分标识为 portlet 操作调用的协作绑定扩展。
相关概念
开发协作 portlet
相关任务
启用现有 portlet 以进行协作
启用带 Faces 操作的协作源
启用协作目标
插入单击激活操作 encodeProperty
插入单击激活操作 encodeProperties
编辑单击激活操作 encodeProperty
编辑单击激活操作 encodeProperties
相关参考
Web 服务描述语言(WSDL)1.1
WebSphere Portal Information Center
XML 模式第二部分:数据类型

(C) Copyright IBM Corporation 2002, 2005. All Rights Reserved.