JSF 응용프로그램에 CommandBar 구성요소 추가

단추가 있는 표시줄을 표시하려면 Business Process Choreographer 탐색기 CommandBar 구성요소를 사용하십시오. 이 단추는 목록에서 선택한 오브젝트 또는 오브젝트의 자세히 보기에서 조작되는 명령을 나타냅니다.

이 타스크의 수행 목적 및 시기

사용자가 사용자 인터페이스에서 단추를 누르면 해당 명령이 선택된 오브젝트에 대해 실행됩니다. JSF 응용프로그램에서 CommandBar 구성요소를 추가 및 확장할 수 있습니다.

이 타스크의 단계

  1. JSP(JavaServer Pages) 파일에 CommandBar 구성요소를 추가하십시오.

    <h:form> 태그에 bpe:commandbar 태그를 추가하십시오. bpe:commandbar 태그는 모델 속성을 포함해야 합니다.

    다음 예는 타스크 인스턴스 목록에 새로 고치기 및 청구 명령을 제공하는 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 파일에 있는 세부사항 구성요소 또는 목록 구성요소와 함께 사용됩니다. 일반적으로 이 태그에 지정된 모델은 동일한 페이지의 세부사항 구성요소 또는 목록 구성요소에 지정된 모델과 동일합니다. 예를 들어 목록 구성요소의 경우, 명령은 목록에서 선택한 항목에 대해 수행됩니다.

    이 예에서 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 조치 메소드에 대한 메소드 바인딩 또는 static 문자열이 될 수 있습니다. 명령 클래스의 결과를 대체하거나 탐색 규칙에 대한 결과를 명시적으로 지정하려면 이 action 속성을 사용하십시오. 명령이 ErrorsInCommandException 예외 이외의 다른 예외를 생성하는 경우 이 action 속성은 처리되지 않습니다.

결과

이제 JSF 응용프로그램은 사용자 정의 명령 표시줄을 구현하는 JavaServer 페이지를 포함합니다.

ⓒ Copyright IBM Corporation 2005, 2006.
이 Information Center는 Eclipse 기술을 기반으로 합니다. (http://www.eclipse.org)