La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Formation Java Server Faces 1 Participant : Mr Frédéric MULLER www.objis.com - Formation JEE/JSF – Groupement Informatique.

Présentations similaires


Présentation au sujet: "Formation Java Server Faces 1 Participant : Mr Frédéric MULLER www.objis.com - Formation JEE/JSF – Groupement Informatique."— Transcription de la présentation:

1 Formation Java Server Faces 1 Participant : Mr Frédéric MULLER www.objis.com - Formation JEE/JSF – Groupement Informatique

2 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING SOMMAIRE Rappels J2EE p 3 Positionnement JSF et architecture p 9 Cycle de vie JSF p 21 Packages clés et composants JSF natifs p 23 Composants supplémentaires RichFaces p 28 Composants supplémentaires : IceFaces p 32 Exemple cinématique application JSF p 39 Problématique JSP / JSF et réponse Facelet p 44 Exemple mise en oeuvre Facelet / IceFaces p 53 Listeners personalisés p 62 RichFaces configuration p 69 Méthode création composant personnalisé p 80 2 www.objis.com - Formation JSF

3 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING RAPPELS J2EE Architecture multicouche Architecture J2EE Livrables J2EE Services J2EE Roles J2EE Concepts techniques clés 3 www.objis.com - Formation JSF

4 Rappel J2EE : Architecture multicouche 4

5 Rappel J2EE : Architecture J2EE 5

6 Livraisons J2EE 6

7 Services J2EE JNDI : Java Naming Directory Interface JCA : Java Connector Architecture JTA : Java Transaction API JPA : Java Persistence API JMS : Java Message Service JAAS : Java Authentication & Authorisation Service JAX-WS : Java API for XML Web Services JAXB : Java API for XML Binding 7

8 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Concepts techniques clés Injection de dépendances Programmation Orientée Aspects / Interception Annotations Mapping Objet / Relationnel Sécurité Transaction 8 www.objis.com - Formation JSF

9 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Positionnement et architecture JSF Contexte création JSF Versions et Implémentations JSF dans J2EE JSF et le pattern MVC Cycle de vie requête JSF Packages et composants JSF Composants additionnels : RichFaces / IceFaces 9 www.objis.com - Formation JSF

10 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Contexte développement dapplications Java/J2ee en 2001 JSP + Servlets Force: bien maîtrisé développeurs Faiblesse: maintenance ! Struts Force: Framework web MVC2 Faiblesse: création interface Faiblesse: peu doutils RAD Swing : Force: Composants graphiques Force: Outils RAD Faiblesse: pas déquivalent web ! Besoin framework web MVC RAD 10 www.objis.com - Formation JSF

11 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Naissance de JSF Besoin framework et outils web RAD Composants visuels Gestion état écran Gestion évènements client Multilingue Validation entrée utilisateur Affichage adapté (pda,portable…) Accessibilité Navigation entre page Acteurs : IBM, SUN, BEA, ORACLE Mars 2004 : spécifications JSF 1.0 Mai 2004 : spécifications JSF 1.1 11 www.objis.com - Formation JSF Craig Mac Clanahan Ed Burns Amy Fowler

12 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Versions JSF et API J2EE JSF 1.1 (mai 2004) JSR 127 : http://jcp.org/en/jsr/detail?id=127 servlet 2.3 + JSP 1.2 + Java 1.3 JSF 1.2 (août 2006) JSR 252 : http://jcp.org/en/jsr/detail?id=252 Servlet 2.5 + JSP 2.1 + Java 5 JSF 2.0 (juillet 2009) JSR 314 : http://jcp.org/en/jsr/detail?id=314 Servlet 2.5 + JSP 2.1 + Java 5+ Profil web JEE6 12 www.objis.com - Formation JSF

13 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Implémentations de JSF Mojarra : implémentation de référence (SUN) Librairies : jsf-api.jar, jsf-impl.jar Composants natifs : core, html MyFaces : implémentation Apache Librairies : myfaces-api, myfaces-impl Composants : TomaHawk, Tobago, Trinidad Nombreuses autres Détail et comparaison : www.jsfmatrix.net 13 www.objis.com - Formation JSF

14 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Architecture & positionnement JSF 14 www.objis.com - Formation JSF

15 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Architecture & positionnement JSF 15 www.objis.com - Formation JSF

16 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING JSF dans application J2EE 16 www.objis.com - Formation JSF

17 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING JSF et le modèle MVC 17 www.objis.com - Formation JSF

18 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Exemple 18 www.objis.com - Formation JSF

19 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Caractéristiques JSF Développement évènementiel orienté Composant Simplifie accès et gestion données métiers Automatise & simplifie gestion état écran entre plusieurs requêtes Mise en oeuvre de patterns connus Masque bas niveau (HttpServletRequest/Response) Meilleure maintenance 19 www.objis.com - Formation JSF

20 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Modèle évènementiel JSF Evènements liés aux actions utilisateurs Appui boutton, clic sur lien hypertexte…. Tout composant implémentant ActionSource Evènements liés à MAJ interface par lutilisateur Modification données champ texte, combo Tout composant implémentant EditableValueHolder Evènements liés aux données du modèle métier Les 'listeners' traitent les évènements 20 www.objis.com - Formation JSF

21 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Cycle de requêtes JSF 21 www.objis.com - Formation JSF

22 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Cycle de vie requête JSF : 6 étapes clés ordonnées 1) Restauration vue (Arbre composants ecran) 2) Appliquer paramètres requête 3) Validation (& conversion) entrées utilisateur 4) Mise à jour des objets Modèle (backing beans) 5) Exécution Appli (ActionEvent, ValueChangeEvent…) 6) Rendu de la réponse (Render) 22 www.objis.com - Formation JSF

23 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Packages / Javadoc JSF 23 www.objis.com - Formation JSF JSF 1.1 JSF 1.2 JSF 2.0

24 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Composants JSF 24 www.objis.com - Formation JSF Comportement Composant

25 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Composants JSF rendu HTML disponible avec Mojarra 25 www.objis.com - Formation JSF 25 composants : pas assez de choix !

26 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Exemples Composants : Héritage et comportement spécifique 26 www.objis.com - Formation JSF

27 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Packages / Javadoc JSF : Le contexte FacesContext www.objis.com - Formation JSF JSF 1.2

28 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Composants JSF supplémentaires RichFaces (Jboss) : www.jboss.org/richfaceswww.jboss.org/richfaces Fusion projets Jboss 'RichFaces' et 'Ajax4jsf' Le développeur choisit les zones de la page à traiter coté serveur + zones à mettre à jour + de 100 composants UI avec support Ajax testés avec différents navigateurs Chaque composant : + de 30 attributs Tags (a4j: et rich:) Skins (DEFAULT, blueSky, plain, laguna...) CDK (Components Development Kit) IceFaces (www.icefaces.org)www.icefaces.org Composants MyFaces (http://myfaces.apache.org)http://myfaces.apache.org 28 www.objis.com - Formation JSF

29 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Rappels Ajax 29 www.objis.com - Formation JSF

30 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING JSF et Ajax avec RichFaces Ajax4jsf : né de la volonté de créer applications riches / Ajax avec JSF Ajax4jsf : filtre qui ajoute des fonctions javascript ainsi que les dépendances de lobjet XmlHttpRequest aux composants JSF Suite à requete HTTP, le moteur Ajax transforme la requête et lenvoi au filtre Ajax4jsf Le filtre Ajax4jsf convertit les données au format XML et transfère la requête à la servlet FacesServlet, pour réaliser cycle 6 étapes JSF 30 www.objis.com - Formation JSF

31 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING JSF et Ajax avec RichFaces 31 www.objis.com - Formation JSF

32 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Composants JSF supplémentaires IceFaces (IceSoft) : www.icefaces.orgwww.icefaces.org Leader historique sur JSF + Ajax/Web2 Technologies Skinning, Multimedia, AJAX Push Intégration avec JSF 1.x / JSF 1.2 / Facelet Spring Web Flow Jboss Seam MyFaces Tomahawk Portails : Liferay, Jboss Portal, WebLo. Portal IDE : Eclipse, MyEclipse, Netbeans Communauté : 100.000 développeurs+ 32 www.objis.com - Formation JSF

33 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING JSF et Ajax avec IceFaces 33 www.objis.com - Formation JSF

34 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Librairies Icefaces Dépendences icefaces 181 34 www.objis.com - Formation JSF

35 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING IceFaces : plugin Eclipse Intégration du plugin dans Eclipse Manuelle si version plugin < 3.6.2 – Exemple : eclipse 3.4 + Icefaces 1.8.1 Sinon Update site : icefaces.org/eclipse-updates – Exemple : dès Eclipse 3.5 Valeur ajoutée du plugin pour développeur : Création projets Web JSF ICeFaces Création projets Web JSF IceFaces + Facelet Complétion de code Gestion visuelle composants graphiques 35 www.objis.com - Formation JSF

36 IceFaces : Plugin Eclipse 36 Plugin IceFaces (dézipper archive + install eclipse 'local') Plugin JbossTools pour intégration Jboss (dézipper le zip dans répertoire 'eclipse') Plugin m2eclipse (Maven)

37 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING IceFaces : industrialiser développements AppFuse : squelettes projets (archetypes maven) www.appfuse.org Initié en 2002 par Mark Raible Squelettes appli. Struts/Jsf + hibernate/spring... Aucun squelette avec Icefaces en frontal ! Edoras : www.edorasframework.org Initié par MIMACOM, qui fournit support IceFaces en Europe (mimacom.ch) IceFusion = AppFuse pour IceFaces icefusion.googlecode.com 37

38 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Développement IceFaces 38 www.objis.com - Formation JSF

39 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Démo JSF : Cinématique application 39 www.objis.com - Formation JSF index.jspMain.jsp Confirm.jsp Register.jsp Done.jsp

40 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Configuration JSF : fichier web.xml 40 www.objis.com - Formation JSF 1 2

41 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Enchaînement accueil écran JSF 41 www.objis.com - Formation JSF 1 2 3 4 5 0

42 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Configuration JSF : faces-config.xml 42 www.objis.com - Formation JSF 1 2 3

43 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Intégration JSP / JSF Objectifs différents JSP : html + java / traitement de haut en bas JSF : composants / traitement évènementiel Cycle de vie différent JSP Java html JSF : cycle de requête précis (6 étapes) Etapes gestion composant JSF création + gestion entrée + rendu Etapes composant JSF dans JSP En parrallèle : création & rendu Ajout de conenu dans la page par JSF & JSP En parallèle : création & rendu ! 43 www.objis.com - Formation JSF

44 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Intégration JSP / JSF : Exemple de problème 44 www.objis.com - Formation JSF

45 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Intégration JSP / JSF : Comprendre la technologie Facelet 45 www.objis.com - Formation JSF Technologie de Vue adaptée à JSF ViewHandler Sinsère bien dans le cycle requête JSF http://facelets.dev.java.net

46 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Intégration JSP / JSF : Comprendre la technologie Facelet 46 www.objis.com - Formation JSF

47 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Facelet : Configuration 47 www.objis.com - Formation JSF 1 3 2 Web.xml Faces-config.xml

48 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Facelet : template.xhtml 48 www.objis.com - Formation JSF

49 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Facelet : Exemple ecran 1 (guess.xhtml) 49 www.objis.com - Formation JSF 1 2 4 3

50 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Facelet : rendu ecran 1 (guess.xhtml) 50 www.objis.com - Formation JSF 3 4

51 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Facelet : Exemple ecran 2 (response.xhtml) 51 www.objis.com - Formation JSF 1 2 4 3 Permet collaboration développeur / webdesigner

52 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Facelet : rendu ecran 2 (response.xhtml) 52 www.objis.com - Formation JSF

53 Démo Facelet avec IceFaces : Template v1 (merci Eclipse !) 53

54 Démo Facelet avec IceFaces : Template v2 54

55 Démo Facelet avec IceFaces : Template v3 55

56 Démo Facelet avec IceFaces : Template v4 56

57 Démo Facelet avec IceFaces : Page v0 57

58 Démo Facelet avec IceFaces : Page v1 58

59 Démo Facelet avec IceFaces : Page v1 rendu 59

60 Démo Facelet avec IceFaces : Page v2 60

61 Démo Facelet avec IceFaces : Page v2 rendu 61

62 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Création listener personnalisé 62 www.objis.com - Formation JSF Pour écouter et traiter 3 types dévènements Type 1 : actions utilisateur Action event déclenché par bouton ou lien Type 2 : changement de valeur champ inputText Type 3 : phases JSF Une des 6 phases traitement requête. Accès par programmation à lévènement (ActionEvent) ou au contexte JSF (FacesContext)

63 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Comprendre un ActionEvent 63 www.objis.com - Formation JSF

64 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Création listener type 1 : action utilisateur 64 www.objis.com - Formation JSF 1 2

65 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Création listener type 2 : changement valeur champ 65 www.objis.com - Formation JSF 1 2

66 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Création listener type 3 : phases JSF 66 www.objis.com - Formation JSF 1 2

67 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Création listener type 3 : exemple logs phases JSF 67 www.objis.com - Formation JSF

68 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING JSF et Ajax Ajax4jsf gère arbre de composants tout au long de la requête / réponse Ajax. 68 www.objis.com - Formation JSF

69 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING RichFaces Bibliothèque composants graphiques JSF Basé sur Ajax4jsf (+ ajout skins + composants) et + de 100 composants visuels demos : jboss.org/richfaces/demos.html JSF 1.2 / RichFace 3.x RI Mojarra MyFaces 1.2 JSF 2 / RichFaces 4 69 www.objis.com - Formation JSF

70 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Composants a4j : Permet dajouter le support dajax aux composants JSF de base Attribut event : évènement javascript qui lance la requête ajax Attribut reRender : contient les ids des composants à mettre à jour lors du retour de la réponse Attribut actionListener : binding de la méthode qui prend un ActionEvent en paramètre et retourne un type void. Attribut action : binding de la méthode qui invoque laction de lapplication 70 www.objis.com - Formation JSF

71 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Attributs commun A4J / RichFaces reRender ajaxSingle : booléen pour limiter les phases 2,3,4 seulement au composant qui envoie la requête Immediate : comme en jsf, pour éviter phase validation/conversion bypassUpdates : permet déviter phases MAJ modèle + invocation application pour passer directement à phase rendu réponse. onComplete : code à exécuter coté client à la fin de la requête limitTolist : si valeur est true, la mise à jour des composants coté clients se limite à la liste dans lattribut reRender timeOut : Max durée requête ajax Data : permet de récupérer du serveur une donnée durant la requête ajax. Ex : propriété dun bean avec EL (sérialisée via JSON) 71 www.objis.com - Formation JSF

72 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Intégration JSF / RichFaces 72 www.objis.com - Formation JSF 1 2 3 Optionnel : intégration avec Facelets Filtre RichFaces

73 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Intégration JSF / RichFaces 73 www.objis.com - Formation JSF

74 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Intégration Facelet / RichFaces 74 www.objis.com - Formation JSF

75 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Intégration Facelet / RichFaces 75 www.objis.com - Formation JSF

76 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Modification Skins 76 www.objis.com - Formation JSF Skins par défaut dans META-INF/skins de larchive RichFaces- impl-xxx.jar blueSky, Laguna, classic, glass-x,… Pour personnaliser skin, désarchiver richfaces-impl-xxx.jar Sur un fichier.properties, faire modif css désirées Archiver à nouveau le jar et mettre ds projet Web.xml

77 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Concepts clés RichFaces 77 www.objis.com - Formation JSF Concept N°1 : envoi d'une requête Ajax –, – – Attribut limitToList Concept N°2 : mise à jour partielle de la page – Attribut reRender – Concept N°3 : zones à traiter coté serveur – – Attribut AjaxSingle – Attribut process

78 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Composants clés RichFaces 78 Composants d'entrée –, –,,... Composants de sortie –, –,, Composants d'itération de données –,, – (Pagination) Composants de sélection –, Composants de Menu –, Données et arbres scrollables –,

79 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Concept N°1 : envoi requête Ajax 79 www.objis.com - Formation JSF

80 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Création composant personnalisé 80 www.objis.com - Formation JSF 1) Créer classe hérite de javax.faces.component.UIComponentBase Redéfinir ma méthode encodeBegin(FaceContext context) Si attribut, alors redéfinir encodeEnd() 2) Enregistrer la classe dans faces-config.xml balise 3) Créer un Tag spécifique (classe héritant de UIComponentTag) Ex : sf:sellerHello 4) Créer le descripteur (TLD) du Tag Exemple : http://www.theserverside.com/news/1364786/Building-Custom-JSF-UI-Components

81 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Composant personnalisé : Comprendre son environnement 81 www.objis.com - Formation JSF

82 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Composant personnalisé : Comprendre les sollicitations 82 www.objis.com - Formation JSF Méthodes à gérer : ProcessDecodes ProcessValidators ProcessUpdates ProcessApplication RenderResponse Lnacées par UIViewRoot à differentes phases du cycle de vie

83 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Composant personnalisé : Comprendre UIViewRoot 83 www.objis.com - Formation JSF

84 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Impact à chaque phase 84 www.objis.com - Formation JSF Phase 1 (Restauration de la vue) Gestion de l'état (coté client ou serveur) : sauver / restaurer (optionnel) Implémenter javax.faces.component.StateHolder Ex : saveState retourne tableau d'objets Sérialisables Ex : restoreState attend un tableau d'objets Sérialisables Phase 2 (Traitement de la requête) 'Décoder' (exploiter en interne) les paramètres de requête Le faire dans composant OU déléguer à classe (Renderer) Impulsion par méthode processDecode du UIViewRoot (obligatoire) Implémeter méthode decode() Decode() travailler avec le Renderer 3) Créer un

85 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Création composant personnalisé 85 www.objis.com - Formation JSF 1) Créer classe hérite de javax.faces.component.UIComponentBase Redéfinir ma méthode encodeBegin(FaceContext context) Si attribut, alors redéfinir encodeEnd() 2) Enregistrer la classe dans faces-config.xml balise 3) Créer un Tag spécifique (classe héritant de UIComponentTag) Ex : sf:sellerHello 4) Créer le descripteur (TLD) du Tag Exemple : http://www.theserverside.com/news/1364786/Building-Custom-JSF-UI-Components

86 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Composant personnalisé : Rendu visuel (Render) 86 www.objis.com - Formation JSF

87 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Composant personnalisé : decode() dans composant 87 www.objis.com - Formation JSF

88 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Composant personnalisé : decode() dans Renderer perso 88 www.objis.com - Formation JSF

89 www.objis.com - INTEGRATION CONTINUEwww.objis.com - Formation SPRING Composant personnalisé : encodeBegin() 89 www.objis.com - Formation JSF


Télécharger ppt "Formation Java Server Faces 1 Participant : Mr Frédéric MULLER www.objis.com - Formation JEE/JSF – Groupement Informatique."

Présentations similaires


Annonces Google