启用协作目标

启用协作目标包括下列活动:
  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> 元素的名称属性。
      参数(必填)
      指定 portlet 操作所使用或产生的参数的名称。指定的值将存储在 WSDL 文件中作为 <portlet:param> 元素的名称属性。
      绑定至
      指定绑定参数值的位置。目前此属性只能指定下列其中一个值:
      • 请求参数:它指定将值作为 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 信息中心
XML 模式第二部分:数据类型
使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.