Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

 PEDRO DELGADO YARZA 2014/03/11 12:42

El modelo Maestro-Detalle propuesto hace uso de un mecanismo de paginación dinámico, es decir, en la aplicación sólo se cargan los registros que se visualizan y cuando se pagina se obtienen los nuevos. Esta manera de proceder ha sido viable gracias a la mejora de rendimiento de JSF 2 y a las utilidades que Primefaces nos provee para mejorar esta faceta.

Así pues necesitamos dos clases Java para gestionar el maestro, una el propio Bean de respaldo del Maestro y otra para gestionar la tabla.

El bean de respaldo que tendrá la pantalla del maestro, tiene como función principal la gestión del control de la aplicación en esa página junto con la coordinación con los Beans de gestión de la persistencia para la obtención y serialización de los datos.

Deberá tener especificado un nombre (anotación @Name) de bean para que pueda ser accedido por la vista, así como también un scope (anotacion @Scope) que indicará cuanto tiempo ha de mantener en memoria su información lo que implica, a su vez, que este Bean debe implementar la interfaz Serializable.

...

Bloque de código
languagejava
@Name("manejadorAnuncios")
@Scope(ScopeType.CONVERSATION)
public class ManejadorAnuncios implements Serializable {
   ....
   ....
}

Una vez creado el Bean, deberemos incluir los Beans o EJB externos que utilicemos, haciendo uso de la anotación @In. Es importante recordar que el Log también debe importarse.

Bloque de código
languagejava
    @Logger
    private Log log;

...

 
    @In (value="org.jboss.seam.security.identity")
    private UmuIdentity identiy;

En caso de no estar seguros de si los Beans que importamos estarán o no creados, añadimos el parámetro create = true a nuestras anotaciones @In.

Bloque de código
languagejava
    @In(create = true)
    private ServicioAnuncios servicioAnuncios;

Una vez incluidos los Beans que necesitaremos importar, declaramos las variables que usaremos para dar servicio con nuestro Bean. Una vez creadas debemos crear un método get y otro set para cada una de ellas. Estos métodos tienen que tener una sintaxis concreta ya que Seam usa esta sintaxis para poder obtener los valores en la parte de la vista.

...

Una vez definidas las variables de las que haremos uso debemos preparar nuestro manejador, para ello haciendo uso de la anotación @Create sobre un método public void, estableceremos los valores por defecto que ha de tener el bean cuando se cree.

Bloque de código
languagejava
    @Create
    public void inicializaBuscador() {
	refrescarAnuncios();
	buscadorAnuncios = new AnuncioLazyDataModel();
	buscadorComentarios = new ComentarioLazyDataModel();

...

...

  • loadPage( first, pageSize, multiSortMeta,filters ): Carga la lista de los siguientes objetos a visualizar a partir de los parámetros pasados en su cabecera.

Bloque de código
languagejava
public class AnuncioLazyDataModel extends 

...

FundeWebLazyDataModel<Anuncio> {

...

 
    @Override
    protected 

...

List<Anuncio> loadPage( int first, int pageSize, 

...

List<SortMeta> multiSortMeta, 

...

Map<String, 

...

Object> filters ) {
        

...

ResultQuery<Anuncio> resultQuery =
                getServicioAnuncios().obtenerComunicacionesDto( filters, first, pageSize,
                                                                PrimeFacesUtils.sortMetaToString(multiSortMeta) );
        setRowCount( resultQuery.getResultCount().intValue() );
        return resultQuery.getResultList();
    }

...

 
    private ServicioAnuncios getServicioAnuncios() {
	return (ServicioAnuncios) Component.getInstance( ServicioAnuncios.NAME, ScopeType.STATELESS );
    }

...

 
}


Info

En las clases Lazy, como manera excepcional, podemos utilizar el DAS directamente si queremos, en lugar del servicio.

Vease también Consultas con Filtros Dinámicos con diferentes Operadores Lógicos.


En las clases Lazy, como manera excepcional, podemos utilizar el DAS directamente si queremos, en lugar del servicio.

...

También permite establecer filtros (parámetros) externos, si no se utiliza el filtrado de columna del DataTable, utilizando los siguientes métodos:

Bloque de código
languagejava
    /**
     * Obtiene los filtros (parametros) externos, cuando no se utiliza el filtrado de columna incluido en el componente
     * DataTable.
     * 
     * @return Map<String, Object>
     *              - Los filtros externos.
     */
    public 

...

Map<String, 

...

Object> getExternalFilters() {
        return externalFilters;
    }

...

 
    /**
     * Establece los filtros (parametros) externos, cuando no se utiliza el filtrado de columna incluido en el componente
     * DataTable.
     * 
     * @param externalFilters - un Map<String, Object> con los filtros externos.
     */
    public void setExternalFilters( 

...

Map<String, 

...

Object> externalFilters ) {
        this.externalFilters = externalFilters;

...

...

  • Abrimos el fichero pom.xml del módulo y buscamos la dependencia jboss-seam-ui.

  • Cambios el scope a compile.

Quedando:

Bloque de código
    

...

<dependency>
        

...

<groupId>org.jboss.

...

seam</

...

groupId>
        

...

<artifactId>jboss-seam-

...

ui</

...

artifactId>
        

...

<scope>compile</scope>
    </

...

dependency>