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.
本製品では Eclipse テクノロジーが採用されています。(http://www.eclipse.org)