IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java EE Discussion :

Communiquer de Java EE à (x)html


Sujet :

Java EE

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2019
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2019
    Messages : 41
    Points : 52
    Points
    52
    Par défaut Communiquer de Java EE à (x)html
    Bonjour,

    Je dois développer une application web en Java EE avec un serveur Payara (en local). Cependant, je poste ce sujet de manière désespéré car je ne trouve vraiment pas de solution sur Internet, je m'en remets donc à vous.

    Mon problème est donc que je ne comprends pas comment le code en Java EE va communiquer avec le xHtml. Pour que cela soit le plus compréhensible possible je vais vous illustrer un exemple que j'aimerai pouvoir intégrer dans mon application.

    Lorsqu'un utilisateur tente de se connecter via le formulaire de connexion et que celui-ci entre un mauvais encodage pour le mot de passe ou nom d'utilisateur, une alerte s'affichera donc à l'écran, cependant comment la méthode en Java EE va renvoyer cette alerte (en xHtml ?) pour l'afficher à l'écran.

    Voici mon code xHtml de connexion :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <!DOCTYPE html>
    <html lang="fr" xmlns="http://www.w3.org/1999/xhtml"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:b="http://bootsfaces.net/ui">
     
    <h:head>
    <meta charset="UTF-8" />
        <title>Connexion</title>
        <link rel="shortcut icon" href="images/login.png"/>
    </h:head>
    <h:body>
     
       	<div class="container"
    		style="position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%);">
    		<b:jumbotron>
     
        <b:panel id="pan">
            <h:form id="test">
            <h1>Connexion</h1>
                <div class="form-group">
                    <h:outputLabel for="utilisateur">Nom d'utilisateur :</h:outputLabel>
                    <b:inputText type="text" styleClass="form-control" id="uti" onchange="javascript:alert('after the AJAX call');"
                        value="#{utilisateurController.utilisateur.nom}" required="true" requiredMessage="Entrer un nom d'utilisateur"/>
                        <b:message for="uti"></b:message>
                </div>
                <div class="form-group">
                    <h:outputLabel for="mdp">Mot de passe :</h:outputLabel>
                    <b:inputSecret type="password" styleClass="form-control" id="mdp"
                        value="#{utilisateurController.utilisateur.motDePasse}" required="true" requiredMessage="Entrer un mot de passe"/>
    					 <b:message for="mdp"></b:message>
     
                </div>
                <b:commandButton styleClass="btn btn-success" value="Se connecter"
                    action="#{utilisateurController.seConnecter(utilisateurController.utilisateur.nom, utilisateurController.utilisateur.motDePasse)}" /> 
                   <b:focus target="@previous" />
            </h:form>
           </b:panel>
           </b:jumbotron>
        </div>
    </h:body>
    </html>

    Et voici mon code Java EE (le controller) :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    @Named
    @ViewScoped
    public class UtilisateurController implements Serializable {
     
     
    	/**
             * 
             */
    	private static boolean checkLog = false;
    	private boolean alerte = false;
    	private static final long serialVersionUID = 1L;
    	@EJB
    	private GestionUtilisateurEJB gestionUtilisateur;
    	private List<Utilisateur> utilisateurs;
    	private Utilisateur utilisateur;
    	private Utilisateur tmp;
     
    	public UtilisateurController() {
     
    	}
     
    	@PostConstruct
    	public void init() {
    		utilisateur = new Utilisateur();
    		utilisateurs = new ArrayList<>();
     
    	}
     
    	public String seConnecter(String nomUtil, String mdpUtil) throws NoSuchAlgorithmException {
     
    	        MessageDigest md = MessageDigest.getInstance("SHA-256");
    	        md.update(mdpUtil.getBytes());
     
    	        byte byteData[] = md.digest();
     
    	        //convertir le tableau de bits en une format hexadécimal - méthode 1
    	        StringBuffer sb = new StringBuffer();
    	        for (int i = 0; i < byteData.length; i++) {
    	         sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
    	        }
     
    	        boolean ok = gestionUtilisateur.verifUtilisateur(nomUtil, sb.toString());
    	        if(ok) {
    				utilisateur = gestionUtilisateur.getUtilisateur(nomUtil, sb.toString());
    				alerte = false;
    				checkLog = true;
    				return "index.xhtml?face-redirect=true";
    			}
     
    	        alerte = true;
    	        return null;
     
    	}
     
    	public void addUtilisateur() {
    		try {
    			gestionUtilisateur.addUtilisateur(utilisateur);
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
     
    	public Utilisateur getUtilisateur(Utilisateur u) {
    		return gestionUtilisateur.getUtilisateur(u);
    	}
     
     
    	public String deconnexion() {
    		utilisateur.setNom("");
    		utilisateur.setMotDePasse("");
    		utilisateur.setPermission("");
    		checkLog = false;
    		return "Connexion.xhtml?faces-redirect=true";
    	}
     
    	public boolean checkAdmin() {
    		if(utilisateur.getPermission().equals("ADMIN")) {
    			return true;
    		}
    		return false;
    	}
     
    	public String checkLogin() {
    		if(checkLog == false) {
    			return "Connexion.xhtml?faces-redirect=true";
    		}
    		return null;
    	}
    }

    J'espère que ce post ne dérangera pas vu la demande :/
    Merci d'avance

    ps : j'utilise BootsFaces.

  2. #2
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 681
    Points
    1 681
    Par défaut AJAX
    Salut,

    Pour communiquer entre ta page web et le serveur java, soit tu postes le formulaire et tu affiches une page avec le résultat (si OK / si pas OK), soit, et c'est plutôt ce que tu cherches, tu interroges ton serveur depuis la page et tu affiches le résultat dans la page sans la recharger.
    Pour le second cas, la solution est AJAX. Le principe (et un exemple convenant à ta demande) est dans le cours de JM Doudoux : https://jmdoudoux.developpez.com/cou.../chap-ajax.php

    Avec BootsFaces, Ajax est supporté par certains composants : https://showcase.bootsfaces.net/forms/ajax.jsf

    Tu devrais y trouver de quoi répondre à ton problème.

    Bonne programmation

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Déjà, pour bien commencer, il faut savoir où les choses sont faites.

    Un navigateur ne comprend que html (et javascript entre autres).
    Le serveur lui s'occupe d’interagir avec une requête http (qu'elle soit ajax ou non).
    Sur le serveur, vu que tu utilises JSF, une servlet unique, FacesServlet, prend en compte toutes les requêtes de tous les utilisateurs de ton application (modèle MVC 2).
    En fonction de ce qui lui arrive, cette servlet va savoir qu'il faut charger telle ou telle page xhtml, laquelle contient des balises spécifiques liées aux bibliothèques de composants, lui permettant de charger un (ou plusieurs) managed bean et de construire une réponse html (ou xml pour certaines) qui sera envoyer au navigateur appelant.

    Donc, dans ton cas de login, c'est sur le navigateur que l'utilisateur saisit son profil et mot de passe, ensuite, il envoie la requête au serveur, lequel validera ou non la connexion et renverra la page suivante (ou la même éventuellement).
    De ce que j'ai vu dans ton code, si le serveur détecte une erreur, il monte le flag alerte à true, tu peux te servir de ce boolean dans la définition de page pour afficher un message d'erreur, comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <h:outputText value="Erreur de connexion, veuillez saisir un profil et un mot de passe valide" rendered="#{utilisateurController.alerte}"/>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment "communiquer" entre différents projets ?
    Par StormimOn dans le forum C#
    Réponses: 17
    Dernier message: 08/07/2008, 13h55
  2. [Usb 2.0] comment communiquer ?
    Par marcel72 dans le forum Java ME
    Réponses: 4
    Dernier message: 16/11/2006, 15h10
  3. comment vérifier que Java est installé
    Par scarpat dans le forum Oracle
    Réponses: 3
    Dernier message: 16/06/2006, 14h31
  4. Réponses: 7
    Dernier message: 27/09/2005, 10h38
  5. [XHTML] Comment créer un site certifié XHTML ?
    Par regbegpower dans le forum ASP.NET
    Réponses: 12
    Dernier message: 08/03/2004, 20h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo