vendredi 10 août 2012

Recherche predictive avec richfaces sur MVC

JEE, JSF2

Note : les getter et setter n'apparaissent pas car ils sont généré automatiquement (et invisible dans le code) par lombok grace au annotations @Getter et @Setter.

Methode 1 : faire une recherche a base d'objet a multiple propriétées. 

Algo
L'utilisateur a ecrit "s" dans le champ de produit.
Un methode du Bean est appelé pour chercher tous les produits qui commence par "s"
Cette methode retourne une ArrayList d'objet "Produit"
On affiche la designation et le commentaire du produit dans les sugestion.
Seul le nom est envoyé dans le champ de produit.


Etant un MVC il nous faut un Bean qui s'occupe de la logique et une JSP de l'affichage

Le bean

package com.coweb.web.beans.produit;
 
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import com.coweb.produit.model.Produit;
import com.coweb.produit.services.business.delegate.ProduitDelegate;
import lombok.Getter;
import lombok.Setter;
 
@Getter
@Setter
@ManagedBean(name = "rechercherProduit")
@ViewScoped
public class rechercherProduitBean implements Serializable{
 
    /** UID genere par eclipse pour la serialization */
    private static final long serialVersionUID = -509330322641879670L;
 
    /**le business deleguate qui donne acces au methodes de l'EJB*/
 ProduitService produitService = new ProduitDelegate();
    /** ce que l'utilisateur a ecris **/
    private String nomProduitEcris;
     
 
    public List<Produit> predireNomProduit(String search) throws Exception{
        return produitService.rechercherProduit(search);
    }
}

La methode
predireNomProduit est appelé a chaque frappe au clavier dans le champ
nomProduitEcris, ce qui a été ecris est passe en parametre au travers de la variable
search.
Ensuite la methode apelle

produitService.rechercherProduit(search) qui elle va interroger la base de données et renvoyer une liste de Produit.

L'affichage sur la page est régénerer en temps reel par le AJAX de richfaces.


Le JSF


            
                
            
            
                
            
  

Donc d'abord parlons des attributs de <rich:autocomplete> :

autocompleteMethod : la methode qui va aller chercher la liste des produit correspondant a ce qui a été ecrit a chaque frappe.
value : l'attribut du bean qui prend ce que le champ de texte retourne.
var : Donne un nom a la liste retourné par l'autocompleteMethod
fetchValue : l'attribut de l'objet selectioné dans la liste de suggestion qui sera envoyé dans le champ.

Ensuite les <rich:column> :

C'est tout simplement le contenu de la recherche predictive, j'aurais pu en mettre juste une avec designation si je ne voulais afficher que ça (dans ce cas la oui, fetchValue est toujours obligatoire, meme si vous ne presentez qu'un attribut en sugestion richfaces ne saura pas quel attribut mettre dans le champ).

Methode 2 : faire une recherche a base de String. 




meme procédé, sauf qu'au lieu d'avoir une liste de Produit, on a une liste de String


Le bean

package com.coweb.web.beans.produit;
 
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import com.coweb.produit.model.Produit;
import com.coweb.produit.services.business.delegate.ProduitDelegate;
import lombok.Getter;
import lombok.Setter;
 
@Getter
@Setter
@ManagedBean(name = "rechercherProduit")
@ViewScoped
public class rechercherProduitBean implements Serializable{
 
    /** UID genere par eclipse pour la serialization */
    private static final long serialVersionUID = -509330322641879670L;
 
    /**le business deleguate qui donne acces au methodes de l'EJB*/
 ProduitService produitService = new ProduitDelegate();
    /** ce que l'utilisateur a ecris **/
    private String nomProduitEcris;
     
 
    public List<String> predireNomProduit(String search) throws Exception{
        return produitService.rechercherProduit(search);
    }
}

Le JSF


            
                
            
  

Et voila!

Aucun commentaire:

Enregistrer un commentaire