JSF アプリケーションへの Message コンポーネントの追加

Business Process Choreographer Explorer Message コンポーネントを使用して、JavaServer Faces (JSF) アプリケーション内で、データ・オブジェクトおよびプリミティブ型をレンダリングします。

このタスクを実行する理由と実行時期

メッセージ型がプリミティブ型である場合、ラベルおよび入力フィールドがレンダリングされます。メッセージ型がデータ・オブジェクトである場合、コンポーネントはオブジェクトを全探索し、オブジェクト内のエレメントをレンダリングします。

このタスクのステップ

  1. Message コンポーネントを JavaServer Pages (JSP) ファイルに追加します。

    bpe:form タグを <h:form> タグに追加します。 bpe:form タグには、 model 属性が含まれていなければなりません。

    以下の例では、Message コンポーネントを追加する方法を示します。

    <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>

    Message コンポーネント の model 属性は、com.ibm.bpc.clientcore.MessageWrapper オブジェクトを参照します。 このラッパー・オブジェクトは、サービス・データ・オブジェクト (SDO) オブジェクトか、または intboolean などの Java™ プリミティブ型のいずれかをラップします。例では、メッセージは 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 がヌルを戻した場合、ハンドラーは新規に空のメッセージを作成して保管します。Message コンポーネントは MyHandler Bean が提供するメッセージを表示します。

結果

これで、JSF アプリケーションは、データ・オブジェクトおよびプリミティブ型をレンダリング可能な JavaServer ページを含むようになります。

(c) Copyright IBM Corporation 2005, 2006. All rights reserved.
(c) Copyright IBM Japan 2006
このインフォメーション・センターでは、Eclipse テクノロジー (http://www.eclipse.org) が採用されています。