在 JSF 应用程序中添加“消息”组件

使用业务流程编排器资源管理器的“消息”组件来在 JavaServer Faces(JSF)应用程序中显示数据对象和基本类型。

执行本任务的原因和时间

如果消息类型是基本类型,则将显示标注和输入字段。如果消息类型是数据对象,“消息”组件就会对该对象进行遍历并显示该对象中的元素。

本任务的步骤

  1. 在 JavaServer Pages(JSP)文件中添加“消息”组件。

    <h:form> 标记中添加 bpe:form 标记。bpe:form 标记必须包含 model 属性。

    以下示例说明如何添加“消息”组件。

    <h:form>
    
       <h:outputText value="Input Message" /> 
       <bpe:form model="#{MyHandler.inputMessage}" readOnly="true" />
    
       <h:outputText value="Output Message" />  
       <bpe:form model="#{MyHandler.outputMessage}" /> 
    
    </h:form>

    “消息”组件的 model 属性引用了 com.ibm.bpc.clientcore.MessageWrapper 对象。此包装器对象包装了服务数据对象(SDO)对象或 Java™ 基本类型(例如 intboolean)。在本示例中,消息是由名为 MyHandler 的受管 Bean 的属性提供的。

  2. 配置 bpe:form 标记中引用的受管 Bean。

    以下示例说明如何在配置文件中添加 MyHandler 受管 Bean。

    <managed-bean>
    <managed-bean-name>MyHandler</managed-bean-name>
    <managed-bean-class>com.ibm.bpe.sample.jsf.MyHandler</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    
       <managed-property>
          <property-name>type</property-name>
          <value>com.ibm.task.clientmodel.bean.TaskInstanceBean</value>
       </managed-property>
    
    </managed-bean>
  3. 在 JSF 应用程序中添加定制代码。

    以下示例说明如何实现输入消息和输出消息。

    public class MyHandler implements ItemListener {
    
      private TaskInstanceBean taskBean;
      private MessageWrapper inputMessage, outputMessage 
    
      /* Listener method, e.g. when a task instance was selected in a list handler.
       * Ensure that the handler is registered in the faces-config.xml or manually.
       */ 
      public void itemChanged(Object item) {
        if( item instanceof TaskInstanceBean ) {
            taskBean = (TaskInstanceBean) item ;
        }
      }
    
      /* Get the input message wrapper
       */
      public MessageWrapper getInputMessage() {
        try{
            inputMessage = taskBean.getInputMessageWrapper() ;
        }
        catch( Exception e ) {
            ;       //...ignore errors for simplicity
        }
        return inputMessage;
      }
    
      /* Get the output message wrapper
       */
      public MessageWrapper getOutputMessage() {
        // Retrieve the message from the bean. If there is no message, create
        // one if the task has been claimed by the user. Ensure that only
        // potential owners or owners can manipulate the output message.
        try{
            outputMessage = taskBean.getOutputMessageWrapper();
            if( outputMessage == null
             && taskBean.getState() == TaskInstanceBean.STATE_CLAIMED ) {
                HumanTaskManagerService htm = getHumanTaskManagerService();
                outputMessage = new MessageWrapperImpl();
                outputMessage.setMessage(
                   htm.createOutputMessage( taskBean.getID() ).getObject()
                );
             }
        }
        catch( Exception e ) {
            ;       //...ignore errors for simplicity
        }
        return outputMessage
      }
    }
    
         

    MyHandler 受管 Bean 实现了 com.ibm.jsf.handler.ItemListener 接口,因此,它可以将其本身注册为列表处理程序的项侦听器。当用户单击列表中的项时,MyHandler Bean 在它的 itemChanged( Object item ) 方法中将接收到有关所选项的通知。处理程序将检查项类型,然后存储对相关 TaskInstanceBean 对象的引用。要使用此接口,请在 faces-config.xml 文件中添加相应列表处理程序的条目。

    MyHandler Bean 提供了 getInputMessage 和 getOutputMessage 方法。这两个方法都返回 MessageWrapper 对象。这些方法把调用委托给所引用的任务实例 Bean 进行。例如,如果由于未设置消息而导致任务实例 Bean 返回空,该处理程序就会创建并存储新的空消息。“消息”组件将显示 MyHandler Bean 提供的消息。

结果

现在,JSF 应用程序包含一个 JavaServer 页面,该页面可以显示数据对象和基本类型。

使用条款 |


(c) Copyright IBM Corporation 2005, 2006.
本信息中心基于 Eclipse 技术(http://www.eclipse.org)。