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

Business Process Choreographer Explorer CommandBar コンポーネントを使用して、ボタンを含むバーを表示します。これらのボタンは、オブジェクトの詳細ビューまたはリスト内の選択されたオブジェクトで作動するコマンドを表します。

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

ユーザーがユーザー・インターフェースのボタンをクリックすると、対応するコマンドが選択されたオブジェクトで実行されます。JSF アプリケーション内の CommandBar コンポーネントを追加および拡張することができます。

このタスクのステップ

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

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

    以下の例では、タスク・インスタンス・リストの refresh および claim コマンドを提供する CommandBar コンポーネントを追加する方法を示します。

    <h:form>
    
       <bpe:commandbar model="#{TaskInstanceList}">
          <bpe:command commandID="Refresh" >
                       action="#{TaskInstanceList.refreshList}"
                       label="Refresh"/>
    
          <bpe:command commandID="MyClaimCommand" >
                       label="Claim" >
                       commandClass="<customcode>"/> 
       </bpe:commandbar>
    
    </h:form>

    model 属性は、管理対象 Bean を参照します。 この Bean は、ItemProvider インターフェースをインプリメントし、選択された Java™ オブジェクトを提供する必要があります。CommandBar コンポーネントは、通常、同一の JSP ファイル内の List コンポーネントまたは Details コンポーネントのいずれかと共に使用されます。一般に、タグで指定されたモデルは、同一ページの List コンポーネントまたは Details コンポーネントで指定されたモデルと同じです。そのため、例えば List コンポーネントの場合、コマンドはリスト内の選択された項目に対して作動します。

    この例では、 model 属性は TaskInstanceList 管理対象 Bean を参照します。 この Bean は、選択されたオブジェクトをタスク・インスタンス・リストに示します。この Bean は ItemProvider インターフェースをインプリメントする必要があります。 このインターフェースは、BPCListHandler クラスおよび BPCDetailsHandler クラスによってインプリメントされます。

  2. オプション: bpe:commandbar タグで参照されている管理対象 Bean を構成します。

    CommandBar model 属性が、例えばリスト・ハンドラーまたは詳細ハンドラー用に既に構成済みの管理対象 Bean を参照する場合、それ以上の構成は必要ありません。 これらのハンドラーのいずれかの構成を変更する場合、または異なる管理対象 Bean を使用する場合は、ItemProvider インターフェースをインプリメントする管理対象 Bean を JSF 構成ファイルに追加してください。

  3. カスタム・コマンドをインプリメントするコードを JSF アプリケーションに追加します。

    以下のコード断片は、コマンド・バーを拡張するコマンド・クラスの作成方法を示します。このコマンド・クラス (MyClaimCommand) は、JSP ファイル内の bpe:command タグで参照されます。

    このコマンドは、正しい数の項目が選択されていることなどの前提条件を検査します。次に、ヒューマン・タスク API の HumanTaskManagerService への参照を検索します。コマンドは、選択されたオブジェクトに対して操作を繰り返し、それらの処理を試みます。HumanTaskManagerService API を通じて、ID によってタスクが要求されます。例外が発生しなければ、対応する TaskInstanceBean オブジェクトの状態が更新されます。このアクションでは、オブジェクトの値を再度サーバーから検索することが避けられます。

    public class MyClaimCommand implements Command {
    
      public String execute(List selectedObjects) throws ClientException {
    	    if( selectedObjects != null && selectedObjects.size() > 0 ) {
      	     try {
             // Determine HumanTaskManagerService from an HTMConnection bean.
             // Configure the bean in the faces-config.xml for easy access
             // in the JSF application.
    		       FacesContext ctx = FacesContext.getCurrentInstance();
             ValueBinding vb =
               ctx.getApplication().createValueBinding("{htmConnection}");
             HTMConnection htmConnection = (HTMConnection) htmVB.getValue(ctx);
             HumanTaskManagerService htm =
                htmConnection.getHumanTaskManagerService();
    
             Iterator iter = selectedObjects.iterator() ;			
             while( iter.hasNext() ) {
               try {
                    TaskInstanceBean task = (TaskInstanceBean) iter.next() ;
                    TKIID tiid = task.getID() ;
    						
                    htm.claim( tiid ) ;
                    task.setState( new Integer(TaskInstanceBean.STATE_CLAIMED ) ) ;
    						
               }
               catch( Exception e ) {
                 ;			// Error while iterating or claiming task instance.
                      // Ignore for better understanding of the sample.
               }
             }
           }
           catch( Exception e ) {
             ; 	// Configuration or communication error.
               // Ignore for better understanding of the sample
           }
         }
         return null;
      }
    
     // Default implementations
     public boolean isMultiSelectEnabled() { return false; }
     public boolean[] isApplicable(List itemsOnList) {return null; }
     public void setContext(Object targetModel) {; // Not used here }
    }
    コマンドは以下のように処理されます。
    1. ユーザーがコマンド・バーの対応するボタンをクリックすると、コマンドが起動されます。CommandBar コンポーネントは、model 属性で指定された項目プロバイダーから選択された項目を検索し、選択されたオブジェクトのリストを commandClass インスタンスの execute メソッドに渡します。
    2. commandClass 属性は、コマンド・インターフェースをインプリメントするカスタム・コマンド・インプリメンテーションを参照します。つまり、コマンドは public String execute(List selectedObjects) throws ClientException メソッドをインプリメントする必要があります。コマンドが戻した結果は、JSF アプリケーションの次のナビゲーション規則を決定するために使用されます。
    3. コマンドの完了後、CommandBar コンポーネントは action 属性を評価します。 action 属性は、静的ストリングである場合も、public String Method() というシグニチャーの JSF アクション・メソッドへのメソッド・バインディングである場合もあります。 action 属性を使用して、コマンド・クラスの結果をオーバーライドするか、またはナビゲーション規則の結果を明示的に指定します。 コマンドが ErrorsInCommandException 例外以外の例外を生成した場合、 action 属性は処理されません。

結果

これで、JSF アプリケーションは、カスタマイズされたコマンド・バーをインプリメントする JavaServer ページを含むようになります。

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