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

JSF Java Discussion :

[RichFaces] <rich:fileUpload> et javascript


Sujet :

JSF Java

  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Par défaut [RichFaces] <rich:fileUpload> et javascript
    Bonjour.
    Je m'adresse à vous car après maintes recherches et essais je reste sans solution.

    Dans ma page jsp, j'ai un composant fileUpload

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <rich:fileUpload id="fuEch0045"
      autoclear="true"
      fileUploadListener="#{voterRegisterDetailsPageBean.processUpload}"
      noDuplicate="true"			 
      immediateUpload="true"
      maxFilesQuantity="1"
      acceptedTypes="xml">
      <a4j:support status="supportStatusXml"
        event="onuploadcomplete" 
        action="#voterRegisterDetailsPageBean.actionProcessUploadedFileXml}" />
    </rich:fileUpload>
    Ce composant fonctionne très bien lorsque je clique sur le bouton add, il me lance la fenêtre d'upload, execute la methode processUpload de mon bean et une fois le fichier uploadé, effectue le traitement via actionProcessUploadedFileXml.

    Le problème survient lorsque je veux lancer l'upload depuis un autre bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h:commandButton
      value="#{label.importButton}" 				
      onclick="document.getElementById('mainForm:fuEch0045:file').click();" />
    La fenêtre d'upload s'ouvre bien, l'upload se fait en apparence, mais les méthodes du FileuploadListener et du composant a4j:support ne sont pas executées.

    Je en vois pas où cela coince.

    Je suis ouvert a toutes sortes d'idées, merci d'avance.

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu essaye avec quel navigateur?

    teste avec ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <script type="text/javascript">
     var f = $('mainForm:fuEch0045').component;
     f.processButtons = function () {
     f.disableAddButton();
     }.bind(f);
     
     f.getFileEntryWidth = function () {
     }.bind(f);
    </script>
    je ne l'ai pas testé mais il a été fournie par un développeur richfaces, il surcharge les fonctions processButtons et getFileEntryWidth, il désactive les boutons Uplaod et Clean ensuite ça permet d'éviter les erreurs jaavscript pour le click sur le button ADD.

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Par défaut
    Je suis sous IE7.

    Par contre le javascript est un peu obscur pour moi.
    Le getElement avec click je m'en sors, par contre je ne vois pas comment avec ce script mes methodes vont être executées.

    Est ce quoi je dois remplacé function () par quelque chose?

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par len1sensibl Voir le message
    Je suis sous IE7.

    Par contre le javascript est un peu obscur pour moi.
    Le getElement avec click je m'en sors, par contre je ne vois pas comment avec ce script mes methodes vont être executées.

    Est ce quoi je dois remplacé function () par quelque chose?
    non tu le déclare dans ta page, ça remplace les fonctions js de richfaces, et garde le click, faut juste s'assurer du bon id.

  5. #5
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Par défaut
    J'ai ajouté le script dans ma page mais rien n'y fait, le résultat est toujours le même.
    Y aurait il quelque chose que j'e n'ai pas compris avec ce script?

    Petite précision si jamais sa peut aider, le fileUpload sera invisible au final, je souhaite l'executer depuis mon commandButton. Je ne sais pas si cela change quelquechose

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    ouiii s'il est avec un rendered à false, son code ne sera pas généré.

  7. #7
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Par défaut
    Nan nan pas de rendered, je defini un style pour qu'il soit invisible.
    Mais pour le moment je n'ai pas appliquer de style ni de rendered et le code ne marche quand meme pas.

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu as une erreur javascript?
    tu teste aussi avec Firefox?

  9. #9
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Par défaut
    Nan pas d'erreur javascript, sa s'execute mais pas de reaction particulière.
    Pour firefox ce sera a voir plus tard c'est pas l'important pour le moment.

  10. #10
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Par défaut
    Un peu de neuf quand même depuis hier et quelques changement que j'ai fait.
    J'ai viré tous les trucs inutiles de mon fileUpload
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <rich:fileUpload id="fuEch0045"
      addControlLabel="#{label.importButton}"
      maxFilesQuantity="1"
      acceptedTypes="xml">
      <a4j:support status="supportStatusXml" />
    </rich:fileUpload>
    Puis mon bouton de "telecommande"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <h:commandButton
    styleClass="commandButton"	
    value="#{label.importButton}"
    onclick="document.getElementById('mainForm:fuEch0045:file').click();jsupload();" />
    Sur l'évènement du click, j'ouvre la fenêtre parcourir et j'execute la fonction jsupload(); que voici

    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
    35
    36
     
    function jsupload(){
    	alert('jsupload');
    	if(document.getElementById('mainForm:fuEch0045').component.entries[0].state == FileUploadEntry.INITIALIZED)
    	{
    		alert('initialized');
    		document.getElementById('mainForm:fuEch0045:upload1').click();	
    	}
    	if(document.getElementById('mainForm:fuEch0045').component.entries[0].state == FileUploadEntry.UPLOAD_IN_PROGRESS)
    	{
    		alert('inprogress');
    	}
    	if(document.getElementById('mainForm:fuEch0045').component.entries[0].state == FileUploadEntry.READY)
    	{
    		alert('READY');
    	}
    	if(document.getElementById('mainForm:fuEch0045').component.entries[0].state == FileUploadEntry.UPLOAD_CANCELED)
    	{
    		alert('UPLOAD_CANCELED');
    	}
    	if(document.getElementById('mainForm:fuEch0045').component.entries[0].state == FileUploadEntry.UPLOAD_SIZE_ERROR)
    	{
    		alert('UPLOAD_SIZE_ERROR ');
    	}
    	if(document.getElementById('mainForm:fuEch0045').component.entries[0].state == FileUploadEntry.UPLOAD_TRANSFER_ERROR)
    	{
    		alert('erruer');
    		return false		
    	}	
    	if(document.getElementById('mainForm:fuEch0045').component.entries[0].state == FileUploadEntry.UPLOAD_SUCCESS)
    	{
    		alert('success');
    	}
    	setTimeout('jsupload()', 2000);
     
    }
    Je test toutes les propriétés de mon file upload pour voir ou en est le chargement.

    Donc au lancement sa m'affiche bien le popup jsupload suivi de l'initialized.
    au second tour je suis in progress, et ce jusqu'au rafraichissement de la page, qui selojn moi est fait a la fin de l'upload.

    Mais je ne vois jamais le popup success qui me permettrai d'executer une methode du bean via un autre bouton et la d'executer le traitement.

    Comment faire soit pour empecher ce refresh, soit pour executer la methode quand le fichier est uploader??

  11. #11
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 28
    Par défaut
    Donc voila, après deux semaines de taf, j'ai réussi a faire un upload de fichier en CSV, qui récupère mon fichier, le stock en blob dans la base.
    Avec sa j'ai réussi à me faire un traitement en spring-batch pour exporter toutes les personnes du fichier et les injecter dans ma BDD.

    Et après deux jours de recherche c'est un p***** de bouton de m**** qui me fait galerer et qu'il m'est impossible d'utiliser via un simple bouton.

    Donc pour ma part je n'ai ni le temps ni l'envie de continuer dans cette direction, mon appli par en test dans 1 semaine.

    Pour ceux qui voudrait faire comme moi, j'ai utilisé un rich:modalpanel lancer depuis un a4j:commandbutton afin de réaliser mon importation via un popup. De plus il prend bien en compte les exceptions que je traite et m'affiche bien mes messages person via la balise h:messages.

    Donc merci d'avoir passer du temps pour m'aider a résoudre ce problème.
    Je met quand même en résolu sa peut servir à d'autre.

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

Discussions similaires

  1. Richfaces rich:FileUpload : NullPointerException
    Par Nounoursonne dans le forum JSF
    Réponses: 4
    Dernier message: 26/03/2010, 15h14
  2. [RichFaces] Action Cancel sur rich:fileUpload
    Par Fafhrd dans le forum JSF
    Réponses: 0
    Dernier message: 10/09/2009, 17h32
  3. Réponses: 1
    Dernier message: 03/09/2009, 10h37
  4. Réponses: 5
    Dernier message: 05/08/2009, 16h48
  5. [Richfaces] utilisation de <rich:FileUpload >
    Par sendoshi dans le forum JSF
    Réponses: 12
    Dernier message: 18/12/2008, 18h49

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