Adición del componente CommandBar a una aplicación JSF

Utilice el componente CommandBar del Explorador de Business Process Choreographer para visualizar una barra con botones. Estos botones representan mandatos que operan en la vista de detalles de un objeto o los objetos seleccionados en una lista.

Cuando el usuario pulsa un botón en la interfaz de usuario, se ejecuta el mandato correspondiente en los objetos seleccionados. Puede añadir y ampliar el componente CommandBar en la aplicación JSF.
  1. Añada el componente CommandBar al archivo JSP (JavaServer Pages).

    Añada el código bpe:commandbar al código <h:form>. El código bpe:commandbar debe contener un atributo model.

    En el ejemplo siguiente se muestra cómo añadir un componente CommandBar para visualizar algunas de las propiedades de una instancia de tarea.

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

    El atributo model hace referencia a un bean gestionado. Este bean debe implementar la interfaz ItemProvider y proporcionar los objetos Java seleccionados. El componente CommandBar suele utilizarse con el componente de lista o el componente de detalles en el mismo archivo JSP. Generalmente, el modelo especificado en el código es el mismo que el especificado en el componente de lista o en el componente de detalles en la misma página. Así pues, para un componente de lista, por ejemplo, el mandato actúa sobre los elementos seleccionados de la lista.

    En este ejemplo, el atributo model hace referencia al bean gestionado TaskInstanceList. Este bean proporciona las propiedades de los objetos Java y debe implementar la interfaz ItemProvider. Las clases BPCListHandler y BPCDetailsHandler implementan esta interfaz. También incluye un mandato de reclamar personalizado.

  2. Opcional: Configure el bean gestionado al que se hace referencia en el código bpe:commandbar.

    Si el atributo model de CommandBar hace referencia a un bean gestionado que ya está configurado, por ejemplo, para un manejador de lista o de detalles, no se necesita ninguna configuración adicional. Si ha cambiado la configuración de uno de estos manejadores o ha utilizado un bean gestionado distinto, añada un bean gestionado que implemente la interfaz ItemProvider al archivo de configuración JSF.

  3. Añada el código que implementa los mandatos personalizados en la aplicación JSF.

    El siguiente fragmento de código muestra cómo escribir una clase de mandato que amplíe la barra de mandatos. Se hace referencia a esta clase de mandato (MyClaimCommand) mediante el código bpe:command en el archivo JSP.

    El mandato comprueba las condiciones previas y otros prerrequisitos como, por ejemplo, el número correcto de elementos seleccionados. A continuación, recupera una referencia a la API de tareas de usuario, HumanTaskManagerService. El mandato reitera los objetos seleccionados e intenta procesarlos. La tarea se reclama con un ID mediante la API HumanTaskManagerService. Si no se produce ninguna excepción, se actualiza el estado del objeto TaskInstanceBean correspondiente. Esta acción evita que se vuelva a recuperar el valor del objeto del servidor.

    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 }
    }
    
    El mandato se procesa de la manera siguiente:
    1. Se invoca un mandato cuando un usuario pulsa el botón correspondiente de la barra de mandatos. El componente CommandBar recupera los elementos seleccionados del proveedor de elementos especificado en el atributo model y pasa la lista de objetos seleccionados al método execute de la instancia commandClass.
    2. El atributo commandClass hace referencia a una implementación de mandatos personalizada que implementa la interfaz de mandatos. El mandato debe implementar el método public String execute(List selectedObjects)throws ClientException. El mandato devuelve un resultado que se utiliza para determinar la siguiente norma de navegación para la aplicación JSF.
    3. Después de completar el mandato, el componente CommandBar evalúa el atributo action. El atributo action puede ser una serie estática o un enlace de método a un método de acción JSF con la signatura public String Method(). Utilice el atributo action para alterar temporalmente el resultado de una clase de mandato o para especificar explícitamente un resultado para las normas de navegación. No se procesará el atributo action si el mandato emite una excepción distinta de ErrorsInCommandException.
La aplicación JSF contiene ahora una página JavaServer que implementa una barra de mandatos personalizada.

Condiciones de uso |

Última actualización: Wed Apr 19 21:34:07 2006

(c) Copyright IBM Corporation 2005, 2006.
Este centro de información está basado en tecnología Eclipse (http://www.eclipse.org)