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

Servlets/JSP Java Discussion :

Afficher du texte dans une JSP à partir d'une classe


Sujet :

Servlets/JSP Java

  1. #1
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 325
    Billets dans le blog
    12
    Par défaut Afficher du texte dans une JSP à partir d'une classe
    Bonjour,

    Je souhaiterais afficher du texte sur ma page JSP.
    Donc lorsque je fais cela dans mon index.jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <% out.print("Hello World"); %>
    Ça fonctionne correctement.


    Par contre je souhaiterais afficher ce out.print("Hello World"); à partir d'une classe quelconque de mon projet, mais cela m'indique une erreur :



    Je décide donc de créer un nouveau projet de Test, avec la classe suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class Affichage {
    	public static void afficheTexte(){
    		System.out.print("Hello World");
    	}
    }

    Puis avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import java.io.PrintWriter;
     
    public class Affichage {
    	public static void afficheTexte(){
    		PrintWriter out = null;
    		out.print("Hello World");
    	}
    }

    Pour enfin effectuer un affichage avec cette ligne de code dans la JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <% Affichage.afficheTexte(); %>
    Mais dans les 2 cas j'obtiens une erreur HTTP 500, avec le message d'erreur suivant :
    Etat HTTP 500 -

    type Rapport d''exception

    message

    description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.

    exception

    org.apache.jasper.JasperException: Impossible de compiler la classe pour la JSP:

    Une erreur s'est produite à la ligne: 11 dans le fichier jsp: /index.jsp
    Affichage cannot be resolved
    8: </head>
    9: <body>
    10:
    11: <% Affichage.afficheTexte(); %>
    12:
    13: </body>
    14: </html>


    Stacktrace:
    org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102)
    org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:331)
    org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:457)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
    org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
    org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

    Comment faire pour afficher du texte à partir d'une méthode de sa classe ?

    Je précise 2 points :
    - Je n'ai pas de classe héritant de Servlet dans le projet Test.
    - Je n'ai pas créé de fichier web.xml dans WEB-INF.


    Mon but c'est d'effectuer de l'affichage dynamique par la suite (tout en respectant un modèle MVC, donc pas de if/else ou boucles dans la vue JSP), c'est pour cela que je procède ainsi, comme je le faisais en PHP.


    Je vous remercie pour votre aide.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  2. #2
    Membre chevronné Avatar de florentB
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Décembre 2006
    Messages : 332
    Par défaut
    Salut.

    As-tu fais l'import de ta classe dans la JSP ? Apparemment le pb vient de là.

    Sinon, j'ai peur que ta fonction ne fasse pas ce que tu veux.
    Il me semble que pour pouvoir écrire dans la JSP, il faudrait que tu passes en paramètre le out de la page JSP, du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Affichage.afficheTexte(out);
    
    public static void afficheTexte(PrintWriter out){
    ...
    }

  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
    Billets dans le blog
    1
    Par défaut
    C'est plus simple qu'il n'y paraît
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class Test2
    {
        private static String text = "Un texte de la classe Test2";
     
        public static String getText()
        {
            return text;
        }
    }
    la page jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <%@page import="test.Test2"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
        <body>
        test : <%=Test2.getText()%>
        </body>
    </html>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 325
    Billets dans le blog
    12
    Par défaut
    Bonjour, tout d'abord merci pour vos réponses,

    FlorentB, je ne peux pas faire en sorte de passer le paramètre PrintWriter out à toutes mes méthodes où je souhaite faire de l'affichage, de plus il faudra alors que cette méthode soit dans la Servlet pour que je puisse faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PrintWriter out = res.getWriter();
    monObjet.maMethode999999999999999(out);
    Or je souhaiterais pouvoir me servir de cette méthode dans ma JSP, car tout l'affichage dans la Servlet se placera au-dessus de ma bannière dans la JSP non ?



    Obutterlin, grâce à ta première ligne d'import, j'arrive à l'affichage du Hello Word... chose que je trouve très étrange car l'erreur ne m'était pas indiqué avant et j'arrivais même à retrouver la méthode afficheTexte() grâce à Eclipe



    Mais ce que je souhaiterais faire, c'est de pouvoir c'est d'utiliser le out et non retourner un String



    Avant j'appliquais le modèle MVC en PHP de cette manière :
    -> Importer le Modèle (contient classe connexion base de données)
    -> Importer le Contrôleur (se sert du modèle et prépare ce qui va être affiché dans la Vue)
    -> Importer la Vue (simples affichages).

    Voici une classe de mon modèle en PHP :
    Code : 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
    class Forumeur{
       private $id;
     
       public function __construct($id){
       $this->id = $id;
       }
     
       public function listeDeroulanteId(){
           $stmt = PdoConnexion->getInstance()->query("Requete se servant de l'identifiant "
                            . "utilisateur pour créer la liste déroulante");
     
           printf("<select name=\"utilisateurOption\">");
           while($resultat = $stmt->fetch()){
           printf("<option value =\"" . $resultat["champ"] . "\">" . $resultat["champ"] . "</option>");
           }
           printf("</select>");
     
       }
    }
    Dans mon Contrôleur je peux instancier ma classe ma exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Forumeur = new Forumeur($_POST['id']);
    Et dans ma vue je peux afficher une liste déroulante qui est spécifique à la personne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $Forumeur->listeDeroulanteId();

    Ces exemples sont simplifiés, mais je souhaiterais faire pareil en J2EE, le problème est que ce que je peux faire avec printf() en PHP, ne fonctionne pas avec out.print() en J2EE.


    Donc il m'est impossible de créer la classe suivante en J2EE :
    Code : 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
    class Forumeur{
       private int id;
     
       public Forumeur(int id){
           this.id = id;
       }
     
       public void listeDeroulanteId(){
           Statement stmt = JavaConnexion.getInstance().createStatement();
           ResultSet resultat = 
           stmt.executeQuery("Requete se servant de l'identifiant "
                             +"utilisateur pour créer la liste déroulante");
     
           out.print("<select name=\"utilisateurOption\">");
           while(resultat.next()){
           out.print("<option value =\"" + resultat.getInt("champ") + "\">" + resultat.getInt("champ") + "</option>");
           }
           out.print("</select>");
     
           resultat.close();
           stmt.close();
       }
    }
    Car out n'est pas reconnu !
    Si out.print() avait été reconnu, j'aurai pu instancier ma classe Forumeur dans ma Servlet, puis j'aurai pu envoyer cet instance de la classe à ma JSP, une fois l'avoir envoyé j'aurai pu afficher la liste déroulante !


    Je vous remercie pour votre aide !
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

  5. #5
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 325
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 325
    Billets dans le blog
    12
    Par défaut Problème résolu
    Bonjour, j'ai pu résoudre mon problème.

    Tout d'abord il est impossible (impossible is nothing) de faire de l'affichage à partir d'une classe en Java comme on pourrait le faire en PHP, c'est à dire mettre des out.print() dans les méthodes en Java comme on pourrait mettre des printf() ou echo dans les méthodes en PHP.

    Pour faire de l'affichage il faut en faite créer des méthodes qui retournent des String dans la Servlet, puis à partir de là, stocker les résultats dans la request pour ensuite faire de l'affichage dans la JSP.

    On peut bien sur se servir des if/else et while/for dans la Vue, mais uniquement pour faire de l'affichage.


    Je pense que ce message pourra servir aux débutants en JEE, et il le faut ne serait-ce que pour soutenir la communauté.
    N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java

    Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ? Contacter Gokan EKINCI

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

Discussions similaires

  1. Appeler une JSP à partir d'une JSP
    Par fessebleu dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 23/02/2011, 01h07
  2. Remplir une zone de texte dans un gui à partir d'une autre foction
    Par Wassim123 dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 04/02/2009, 16h39
  3. Réponses: 4
    Dernier message: 03/06/2008, 18h20
  4. Afficher des données dans un datagrid à partir d'une base de données MySQL
    Par General_Garrisson dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 13/07/2006, 15h14
  5. Ajouter du texte dans un input à partir d'une autre fenêtre
    Par Michaël dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 13/04/2005, 20h14

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