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

Wicket Java Discussion :

DownLoadLink et ListView


Sujet :

Wicket Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut DownLoadLink et ListView
    Bonjour,

    J'utilise wicket, et je face aujourd'hui face à un comportement étrange.

    Lorsque je définit un tableau dont le contenu est chargé avec une listView, et que l'un des items de la listView (une colonne du tableau) correspondant au composant DownloadLink.

    Le problème intervient lorsque le fichier référencé par le downloadLink est inaccessible : Méthode onClick :

    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
    DownloadLink downloadOutLink = new DownloadLink("fileLink",
                    new File("")) {
     
                @Override
                public void onClick() {
     
                    File bigFile = getFileFromURL(url);
     
                    if (bigFile != null) {
                        this.setDefaultModelObject(bigFile);
                        super.onClick();
                    } else {
                        // Popup file is not available
                        String message = "file is not available";
                        dialog.setLabel(message);
                        dialog.setInitialHeight(200);
                        dialog.setInitialWidth(350);
                        dialog.showDialog();
                    }
                }
            };
    Dès qu'on arrive dans la condition else, il y a une sorte de rafraichissement de la page, et la méthode protected void populateItem(ListItem item), est de nouveau appelé.

    Cela est gênant car je permet a l'utilisateur d'effectuer un tri par colonne via des méthodes javascript. Mais a cause de ce comportement étrange, dans le cas ou le downloadLink ne "débouche" pas sur le téléchargement d'un fichier, mon tableau est ré-initialisé et je perd le tri qui a été effectué en javascript.

    Si vous avez des idées, n'hésitez pas.

    Cordialement,

    P-A

  2. #2
    Membre émérite

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    bonjour

    je pense que dans le cas où la pop up ne s'affiche pas, alors la page est réaffichée, perdant tout état présent uniquement côté client.

    Je vois essentiellement une solution : laisser connaitre l'état du tri au serveur, pour qu'il puisse le réaffficher.

    ++
    joseph

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    En fait la popup s'affiche systématiquement lorsque l'url ne retourne pas un fichier...

    Et c'est dans le cas où elle s'affiche que la page est "rechargée"

    Le cas ou le fichier est téléchargeable ne pose pas de problème, en faite c'est dès que le downloadLink ne "débouche" pas sur un fichier que sa pose problème.

    Pour ce qui est de la solution que tu me propose j'y est effectivement pensé, malheureusement je recherche plus une solution au niveau du paramétrage / configuration ou meme modification du composant downloadLink pour évite que celui-ci ne re-déclenche le repopulate de la listView.

    Cordialement,

    P-

  4. #4
    Membre émérite

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    Citation Envoyé par diophantes Voir le message
    Pour ce qui est de la solution que tu me propose j'y est effectivement pensé, malheureusement je recherche plus une solution au niveau du paramétrage / configuration ou meme modification du composant downloadLink pour évite que celui-ci ne re-déclenche le repopulate de la listView.
    désolé du délai, j'étais très occupé la semaine passée et après ce topic m'est un peu sorti de l'esprit.

    pour en revenir au sujet, le "hic" est que le navigateur attend une réponse du serveur. Dans le cas où la popup est affichée, c'est une nouvelle fenetre, donc tout va bien pour le cas présent.

    par contre, en l'absence de pop up, wicket reste sur la même page et... la ré affiche telle que connue dernièrement...

    la solution de contournement serait de passer par de l'ajax. En effet, via ajax, le serveur peut aisément ne rien retourner à une requête. Rien n'est alors redessiné et tout le monde est heureux.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Par défaut
    Hello,

    merci des informations, j'ai effectivement fait le même constat,

    je suis entrain de "bidouiller" quelque chose, en gros l'idée est de mettre un AjaxLink qui se charge de récupérer le fichier, affiche une popup si pas de fichier (donc pas de rafraichissement de la page)

    et le cas ou le fichier est disponible, soit le renvoyer a l'utilisateur (ce que je n'arrive pas a faire pour l'instant avec le code ci dessous :

    final DownloadLink downloadOutLink = new DownloadLink("lienFichierDownload",
    new File("")) {
    };

    AjaxLink<String> lienFichier = new AjaxLink<String>("lienFichier") {
    private static final long serialVersionUID = 1L;

    @Override
    public void onClick(AjaxRequestTarget target) {
    final File bigFile = getFileFromURL(url);

    if (bigFile != null) {
    // Set DownloadLink Model Object
    downloadOutLink.setDefaultModelObject(bigFile);
    downloadOutLink.onClick();

    } else {
    // Popup fichier indisponible
    String message = "<p class='textenormalXnetM2M'>"
    + MessagesM2M.getMessage("message.echec.demande")
    + "</p>";
    message += ("<label>"
    + MessagesM2M.getMessage("message.erreur") + "</label>");
    message += ("<span class='textenormalXnetM2M'>Fichier indisponible</span>");
    dialog.setLabel(message);
    dialog.setInitialHeight(200);
    dialog.setInitialWidth(350);
    dialog.show(target);
    }
    }
    };

    seule petit problème est que maintenant la popup s'affiche sans problème et sans recharger la page et mon tableau, en revanche l'appel brutal a la méthode downloadOutLink.onClick(); ne semble pas marché ..

    Cordialement

  6. #6
    Membre émérite

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    bonsoir

    je pense que cette page du wiki, AJAX update and file download in one blow, devrait apporter les réponses nécessaires.



    ++

Discussions similaires

  1. [Kylix] prob listview
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 22/10/2002, 21h37
  2. Une gauge dans un ListView
    Par Thom@s dans le forum Composants VCL
    Réponses: 3
    Dernier message: 22/10/2002, 10h32
  3. listview ??
    Par Galdarion dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/09/2002, 17h02
  4. ListView->Items->Clear() !!! Qques probl de perf
    Par Nicolas_a69 dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/08/2002, 11h49
  5. ListView
    Par SnickeursMan dans le forum Composants VCL
    Réponses: 2
    Dernier message: 14/08/2002, 10h42

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