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

Struts 1 Java Discussion :

[Struts-ajaxTags] Problème d'installation


Sujet :

Struts 1 Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Par défaut [Struts-ajaxTags] Problème d'installation
    Bonjour,

    Actuellement dans mon appli on doit selectionner un employé dans une liste déroulante qui comprend 300 entrées, et pour simplifier tout ca je voudrais mettre en place une textbox avec autocomplétion ajax, comme expliqué dans ce très bon tutoriel :

    http://dcabasson.developpez.com/arti...ion-pas-a-pas/

    Le truc c'est que dans ce tuto la partie serveur est en php, et dans mon cas ce n'est pas possible, je voudrais donc la remplacer par une Action Struts, ce qui me semble être un bon choix au vu de ce tutoriel :

    http://julien.carnelos.free.fr/blog/...-par-l-exemple

    Cependant, dans le premier tuto on voir que le fichier renvoyé par le serveur est un xml, et c'est bien la mon problème : comment faire la même chose dans l'Action Struts, ou peut-on le faire sans passer par du xml?

    En sachant qu'au final, je voudrais qu'une fois la soumission de la textbox effectuée, on récupère l'id de la personne et pas son nom car je peux avoir des homonymes.

    merci d'avance !

  2. #2
    Membre Expert
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Par défaut
    Bonjour vallica,
    J'ai du pour mon application GestCV http://gestcv.sourceforge.net/fr/index.html
    mettre en place un composant d'autocompletion. Pour cela j'ai utilise la librairies AjaxTags http://ajaxtags.sourceforge.net/.

    Cette librairie te fournit :
    * cote client : une taglib qui permet d'associer une completion a un champs HTML.
    * cote serveur : une classe abstraite BaseAjaxAction dont tu peux heriter et
    implementer la methode getXmlContent, qui doit retourner un XML.
    De plus tu as la classe AjaxXmlBuilder qui permet de transformer une collection d'objet en string XML attendu par le composant d'autocompletion.

    Ton Action Struts qui renvoie ton XMLressemble a

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class CompetencesAjaxAction extends BaseAjaxAction {
    	public String getXmlContent(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception {
    	    String nomCompetence = request.getParameter("nomCompetence");	    
    	    ICompetenceService competenceService = ServiceLocator.getCompetenceService();
    	    Collection competencesList = competenceService.findCompetencesByNomLike(nomCompetence);
    	    // Create xml schema
    	    return new AjaxXmlBuilder().addItems(competencesList, "nom", "id").toString();
    	}
    }
    Tu as une demo des composants AjaxTags sur :
    http://ajaxtags.no-ip.info/

    Angelo

    [ Modéré par Viena ]
    Ajout balises de code : Pensez aux balises [code], votre message est plus lisible et la lecture plus facile.

    Les Règles du Forum

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Par défaut
    Salut azerr,

    Merci beaucoup pour ta réponse, je suis effectivement en train d'essayer d'installer ajaxtags mais j'ai du mal.

    1) j'ai ajouté le .jar à mon classpath
    2) j'ai cette jsp :

    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
    24
    25
     
    <%@page contentType="text/html"%>
    <%@page pageEncoding="UTF-8"%>
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
     
    <%@ taglib uri="http://ajaxtags.org/tags/ajax" prefix="ajax" %>
     
    <script type="text/javascript" src="prototype-1.4.0.js"></script>
    <script type="text/javascript" src="scriptaculous.js"></script>
    <script type="text/javascript" src="overlibmws.js"></script>
    <script type="text/javascript" src="ajaxtags-1.2.js"></script>
     
    <form>
      Make: <input id="model" name="model" type="text" size="30" class="form-autocomplete" />
      Model: <input id="make" name="make" type="text" size="30" />
    </form>
     
    <ajax:autocomplete
      baseUrl="${pageContext.request.contextPath}/ajaxListeAgent.do"
      source="make"
      target="model"
      parameters="model={model}"
      className="autocomplete"
      indicator="throbbing"
      minimumCharacters="1" />
    3) et voici mon action :
    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
     
    public class AjaxListeAgent extends Action {
        public ActionForward execute(ActionMapping mapping, ActionForm  form, HttpServletRequest request,
     HttpServletResponse response) throws Exception {
     
            ArrayList<LabelValueBean> liste = new AgentMetier().getListePourSelect();
     
            AjaxXmlBuilder builder = new AjaxXmlBuilder();
     
            for (LabelValueBean l:liste){
                builder.addItem(l.getLabel(),l.getValue());
            }
            PrintWriter out = response.getWriter();
            out.println(builder.toString());
            out.flush();
     
            return null;
        }
    }
    le truc c'est que quand j'appelle la jsp, j'ai une exception :
    java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
    org.ajaxtags.tags.AjaxAutocompleteTag.doEndTag(AjaxAutocompleteTag.java:245)
    apparement je n'ai pas besoin d'installer le tld car la balise ajax est reconnue, mais par contre je n'ai copié aucun fichier .js, je ne sais pas si ca peut venir de là, ca m'etonnerai...

    tu en penses quoi?

  4. #4
    Membre Expert
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Par défaut
    Les fichiers js sont obligatoires, ce sont eux qui vont permettre de generer ta completion. Il faut bien penser aussi a inserer ton CSS. Mais ton probleme ne vient pas de la. Ton probleme est qu'il te manque la librairie commons-lang.jar, ou que celle que tu as n'est pas la bonne version. C la 2.1 apperement qu'il te faut. Il faut aussi le commons-beanutils.

    Tu peux voir les dependances dont tu as besoin sur http://ajaxtags.sourceforge.net/dependencies.html (mais elles ne sont pas toutes obligatoires car certaines sont juste utilise pour la compilation ou pour d'autres composants).

    Angelo

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Par défaut
    Re,

    Grace à tes conseils je n'ai plus l'exception, par contre l'autocomplétion ne se fait toujours pas.

    Si je tape des lettres dans le champ model rien ne se passe, et si j'en tape dans le champ make j'ai une erreur de javascript suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Ligne:872
    Caractère:7
    Code:0
    Erreur:Objet requis
    URL:http://localhost:8084/gesam/
    Pourtant j'ai bien placé tous les .js dans le dossier /web de ma webapp, au même niveau que la jsp.

    Le seul truc qui m'a paru bizarre c'est que dans le tuto on nous dis d'inclure ce fichier : <script type="text/javascript" src="ajaxtags-1.2.js"></script>

    alors que dans l'archive il s'appelle juste ajaxtags.js, alors bon j'ai modifié la directive pour qu'elle aille chercher le ajaxtags.js, mais j'ai toujours cette erreur...

    EDIT :

    Je me demande si coté serveur j'ai fait ce qu'il fallait, parce que quand j'appelle l'action dans le navigateur j'ai bien le fichier xml qui apparait, mais je vois que comparé au code que tu m'a donné je ne constuit pas exactement le xml de la même manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public String getXmlContent(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception {
     
            ArrayList<LabelValueBean> liste = new AgentMetier().getListePourSelect();
     
            AjaxXmlBuilder builder = new AjaxXmlBuilder();
     
            for (LabelValueBean l:liste){
                builder.addItem(l.getLabel(),l.getValue());
            }
            return(builder.toString());
        }

  6. #6
    Membre Expert
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Par défaut
    Premier test, verifie que tes include js soit bien appele. Tu mets par exemple
    alert('debug'); ds chacun de tes fichiers js, pour verifier qu'ils sont tous appeles.

    Deuxieme test : met un point d'arret sur ta methode getXmlContent, pour verifier q'apres avoir tappe uen lettre ds ta completion, l'url est appele.

    En ce qui me concerne j'utilise pas derniere version d'ajaxtags, du coup j'ai besoin de moins de fonction js.

    Essaie de t'inspirer de la demo ajaxtags-demo-1.2-beta2-src.zip

    Angelo

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Par défaut
    re,

    la méthode getXmlContent n'est pas appellé mais par contre les 4 fichiers js sont inclus.

    J'avais déjà regardé le code de la webapp d'exemple, mais je m'y replonge

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Par défaut
    j'essaye de passer en version 1.1.5 car je me dis que c'est peut être la beta qui bug (ca m'etonnerai quand même)

    J'ai donc remplacé le jar de la 1.2 par celui de la 1.1.5, par contre au niveau des js, dans la webapp de démo de la 1.1.5 ils incluent 2 fichiers alors que dans le zip il n'y en a qu'un dans le repertoire js, c'est normal?

  9. #9
    Membre Expert
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Par défaut
    Avec 1.1.5, voici ma config :

    Dans ta JSP :
    Javscript a inclure :
    <!-- AJAX -->
    <script type="text/javascript" src="<c:url value='/js/ajax/prototype-1.3.1.js'/>"></script>
    <script type="text/javascript" src="<c:url value='/js/ajax/ajaxtags-1.1.5.js'/>"></script>
    <link href="<c:url value='/css/ajaxtags.css'/>" rel="stylesheet" type="text/css"/>

    <html:text property="nomCollaborateur" styleClass="form-autocomplete" styleId="nomCollaborateur" />

    <ajax:autocomplete
    source="nomCollaborateur"
    target="nomCollaborateur"
    baseUrl="${contextPath}/user/ajaxcollaborateurs.do"
    className="autocomplete" parameters="nomCollaborateur={nomCollaborateur},idAgence={idAgence}"
    progressStyle="throbbing"
    minimumCharacters="1" />

    Verifie que baseUrl pointe bien sur ton action de ton serveur.

    Si tu n'arrives pas a trouver les bonnes sources (notemment prortypes, tu peux telecharger mon projet sur http://gestcv.sourceforge.net/fr/index.html

    Angelo

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Par défaut
    j'ai téléchargé tes sources, comparé ton code au mien, et je n'y arrive toujours pas.

    Je n'ai plus d'erreur javascript mais rien ne se passe lorsque je saisi dans les champs, il y a juste une erreur lorsque je submit le form.
    Mon action n'est jamais appellée, donc je pense que ca bug pendant le javascript qui est executé avant l'appel de l'action.

    Je vais essayer de te donner tous mes fichiers au cas ou tu repère une erreur :

    login.jsp qui est ma page de démmarage de l'appli
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    <%@page contentType="text/html"%>
    <%@page pageEncoding="UTF-8"%>
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
     
    <%@ taglib uri="http://ajaxtags.org/tags/ajax" prefix="ajax" %>
     
    <HTML>
      <HEAD>      
          <link rel="stylesheet" href="/gesam/gui-tiles/styles.css" type="text/css">
          <script type="text/javascript" src="prototype-1.3.1.js"></script>
          <script type="text/javascript" src="ajaxtags-1.1.5.js"></script>  
     
    		<link href="ajaxtags.css" rel="stylesheet" type="text/css"/>
    		<link href="form-view.css" rel="stylesheet" type="text/css"/>
     
      </HEAD>
     
    <body>
     
        <form action="" >      
                <input id="model" name="model" type="text" size="30" />    
                <input id="make" name="make" type="text" size="30" />
        </form>
     
        <ajax:autocomplete
        source="model"
        target="model"
        baseUrl="/ajaxListeAgent.do"
        className="autocomplete"
        parameters="model={model}"
        progressStyle="throbbing"
        minimumCharacters="1" />    
    </body>
    l'action qui génère le xml :
    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
     
    public class AjaxListeAgent  extends BaseAjaxAction  {
       public String getXmlContent(ActionMapping mapping, ActionForm actionForm, HttpServletRequest request, HttpServletResponse response) throws Exception {
     
            System.out.println("on rentre");     
            ArrayList<LabelValueBean> liste = new AgentMetier().getListePourSelect();
     
            AjaxXmlBuilder builder = new AjaxXmlBuilder();
     
            for (LabelValueBean l:liste){
                builder.addItem(l.getLabel(),l.getValue());
            }
            System.out.println("on sors");
            return(builder.toString());
        }
    }
    la déclaration de l'action dans le struts-config
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        <action path="/ajaxListeAgent" validate="false" scope="request" type="com.myapp.struts.Action.Ajax.AjaxListeAgent"/>
    et pour finir la structure de ma webapp :



    merci d'avance

  11. #11
    Membre Expert
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Par défaut
    1. Essaie d'appeler ton url dans ton navigateur pour verifier que ton action struts fonctionne :

    http://localhost:8084/gesam/ajaxListeAgent.do

    2. S c bon , je pense qu'il manque ton contexte gesam dans ton baseurl de la taglib
    Essaie ca :
    <ajax:autocomplete
    baseUrl="http://localhost:8084/gesam/ajaxListeAgent.do"
    ...

    Mais bon il faudra que tu recupere ton contexte en EL.

    Angelo

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Par défaut
    C'est super ca fonctionne ! quel soulagement !

    par contre comme tu dis il faut que je trouve la syntaxe pour récupérer le contexte correctement.

    Pour terminer j'ai encore une question à te poser : quel moyen utilises-tu pour vérifier que l'utilisateur submit le form avec une valeur correcte, c'est à dire pour éviter qu'il ne tape un libellé qui n'existe pas?

    si jamais je regarderai dans ton appli (ps je vais l'installer elle a l'air pas mal du tout)

  13. #13
    Membre Expert
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Par défaut
    Desole vallica,
    la je ne peux pas t'aider, je ne sais pas si le composant sait le gerer.
    A mon avis, il va falloir mettre les mains dans le javascript de ajaxtags et ajouter ta fonctionnalite.

    Angelo

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 746
    Par défaut
    j'en ai bien peur, en tout cas merci beaucoup pour ton aide, c'est grace à toi que j'ai reussi à mettre en place cette autocomplétion

Discussions similaires

  1. [Struts-ajaxTags] Problèmes autocomplete
    Par Elmout33 dans le forum Struts 1
    Réponses: 1
    Dernier message: 17/02/2010, 14h10
  2. problème d'installation du compilateur Borland C++
    Par Hakkou dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 02/06/2003, 11h02
  3. [SAPdb]Problème d'installation
    Par manou dans le forum SAP
    Réponses: 3
    Dernier message: 17/04/2003, 09h20
  4. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18
  5. Réponses: 3
    Dernier message: 26/07/2002, 23h02

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