启用协作目标

启用协作目标包括下列活动:
  1. 启用协作目标
  2. 实现操作
  3. 提供翻译

要启用协作目标:

  1. 按以下步骤启用协作目标:
    1. 在“项目资源管理器”视图中,选择一个 portlet 或 Portlet 部署描述符。Portlet 将在您展开 portlet 项目文件夹中的 Portlet 部署描述符节点时显示出来。
    2. 右键单击期望的 portlet,然后从弹出菜单中选择协作 > 启用目标。出现启用协作目标对话框。或者,打开 JSP 文件并确保它具有焦点,然后从工具栏中选择页面 > 协作 > 启用目标
      “启用协作目标”对话框
    3. 为下列字段提供值:
      数据类型(必填)
      指定要由源 portlet 传送的数据的数据类型的名称。或者,如果已经声明想要发布的数据类型,则单击浏览按钮以打开选择类型对话框并选择希望发布的 WSDL 数据类型。将在每个字段中指定 WSDL 文件中的数据类型和名称空间。指定的值将用来声明 WSDL 文件 <types> 元素中的数据类型。
      名称空间
      指定类型的名称空间。例如,“http:/www.yourco.com/c2a”。当下面指定了现有 WSDL 文件时,该字段将不可用。指定的值将存储在 WSDL 文件中并将与类型属性配合使用,以将数据与协作运行时对目标的操作相匹配。
      [目标操作]名称(必填)
      指定 portlet 操作名称。如果与命令控制相关联的任何 Faces 操作和在 Struts 配置文件中定义的任何 Struts 操作可用,则您可以从选择操作对话框中选择它。要打开此对话框,单击浏览按钮。指定的值将存储在 WSDL 文件中作为 <portlet:action> 元素的名称属性。
      名称参数(可选,适用于 JSR 168 portlet)
      指定 portlet 操作名称参数。对于 JSR 168 Struts portlet,必须将操作名称参数指定为 spf_strutsAction
      [参数]名称(必填)
      指定 portlet 操作所使用或产生的参数的名称。指定的值将存储在 WSDL 文件中作为 <portlet:param> 元素的名称属性。
      标题(可选)
      指定 portlet 操作所使用或产生的参数的标题名称。
      绑定至
      指定绑定参数值的位置。目前此属性只能指定下列其中一个值:
      • 请求参数:它指定将值作为 PortletRequest 对象中的参数绑定。如果省略 boundTo 属性,则这是缺省值。注意,对于输出参数,通常应指定不同的值,这是因为 WebSphere® Portal 提供的缺省 PortletRequest 实现不允许在操作处理期间设置参数。
      • 请求属性:它指定将值作为 PortletRequest 对象中的属性绑定。
      • 会话:它指定将值绑定至 PortletSession 对象。
      标签
      指定关于适合显示在 portlet 用户界面中的操作的短字符串。对于已翻译的标题,此字段的单词之间使用点(.)而不是空格来指定资源束中关键字的名称。以 key=translated caption 格式在资源束(在此对话框中的资源束字段中指定的资源束)中指定已翻译的标题。指定的值将存储在 WSDL 文件中作为 <portlet:action> 元素的标题属性。
      显示 C2A 标题时的屏幕捕获
      描述
      指定操作的文本描述。对于已翻译的描述,此字段的单词之间使用点(.)而不是空格来指定资源束中关键字的名称。以 key=translated caption 格式在资源束(在此对话框中的资源束字段中指定的资源束)中指定已翻译的描述。指定的值将存储在 WSDL 文件中作为 <portlet:action> 元素的描述属性。
      资源束
      指定 NLS 资源文件的基本名称,该文件包含与操作和属性的标签及描述相对应的已翻译文本。指定的基本名称将由 portlet 部署描述符中的 c2a-nls-file 配置参数定义,并且将在 Java 资源节点下生成一个空资源束。例如,如果您输入 nls.shippingc2a,则您将编辑 JavaSource 节点下面的特定语言的资源束 nls\shippingc2a<_lang>.properties,该资源束以 key=translated text 格式指定已翻译的标题和描述。
      目标 portlet(必填)
      指定要作为协作目标启用的具体 portlet。
    4. 单击确定。“项目资源管理器”视图中将显示带有目标 portlet 图标(“单击激活操作”目标 Portlet 图标)的已启用“单击激活操作”的 portlet。
  2. 确保目标 portlet 类的代码满足下列要求:
    • 必须将操作作为 portlet 操作、Faces 操作或 Struts 操作来实现。对于 portlet 操作,应该使用简单操作字符串而不使用建议不要使用的 PortletAction 类。
    • Portlet 操作必须接受单个参数。该参数可能作为请求参数、请求属性、会话属性或操作属性(建议不要使用)出现,如操作声明或注册中所指定的那样。

    以下示例显示样本库中的协作 Portlet 应用程序样本中的 OrderDetailPortlet.java 的 actionPerformed() 方法。此 portlet 在它的 actionPerformed() 方法中接受 ORDER_ID 参数。此参数与 portlet 的 WSDL 文件(在此示例中为 OrderDetailC2A.wsdl)的 binding 部分中的输入参数相对应。

    ...
    
          private static final String PREFIX = "";
          public static final String ORDER_ID = PREFIX + "orderId";
          public static final String TRACKING_ID = PREFIX + "trackingId";
    
    ...
        
            public void actionPerformed (ActionEvent event)
        {
    //        DefaultPortletAction action = (DefaultPortletAction) event.getAction();
          String actionName = event.getActionString();
    
                    PortletRequest request = event.getRequest();
    
                    //An action causes the state to be modified
                    ShippingUtils.setLastModified(request);
    
                  if( getPortletLog().isDebugEnabled() ) {
                          getPortletLog().debug("OrderDetailActionListener - Action called");
           }
           
                    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
                            String orderId = (String) request.getPortletSession().getAttribute(ORDER_ID);
                  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);
       }
        }
    ...
  3. 提供与资源束文件中的标签和描述相对应的已翻译文本。资源束的基本名称在资源束字段中指定并通过 portlet 部署描述符中的 c2a-nls-file 配置参数存储。编辑 JavaSource 节点下特定语言的资源束。要指定已翻译的标题和描述,使用 key=translated text 格式和指定为标签描述的关键字。

启用协作目标操作执行下列任务。

  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>
    • 添加 Faces portlet 的配置参数以指定目标操作名称及其参数名。
  3. 将其它库 pbportlet.jar 导入 portlet 项目中的 /WEB-INF/lib 以使用属性代理。
  4. 创建包含以下部分的 WSDL 文件:
    <definitions>
    作为根。
    <types>
    使用“XML 模式数据类型”(XSD)声明数据类型。
    <message>
    输出消息。
    <portType>
    定义操作的抽象集合。<output>。
    <binding>
    始终扩展至 <portlet:binding> 以将该部分标识为 portlet 操作调用的协作绑定扩展。
  5. 生成一个资源束文件,该文件包括在启用协作目标对话框中的标签字段中指定的关键字值(通过 key=translated string 文本格式)。
相关概念
开发协作 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.