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

Spring Web Java Discussion :

Utilisation de jQuery File Upload


Sujet :

Spring Web Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Points : 37
    Points
    37
    Par défaut Utilisation de jQuery File Upload
    Bonjour à tous,

    j'essaye de créer un petit service d'update pour une application. Ce que je souhaite réaliser:
    1- Uploader un fichier zip vers le serveur
    2- Le serveur traite le zip, et mets à jour la base de données
    3- Le serveur renvoie la page avec les nouvelles informations mises à jour

    J'ai réussi les étapes 1 et 2, mais je n'arrive pas à rafraîchir la page (application web avec une seule et même page). Voici mes controllers, ma jsp, et mon code js pour la gestion de l'upload.

    UploadController
    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
    37
    38
    39
     
    @Controller
    public class UploadController {
     
    	private static final Logger LOG = LoggerFactory
    			.getLogger(UploadController.class);
     
    	@RequestMapping(value="/upload", method = RequestMethod.GET)
    	public String uploadResult(ModelMap model) {
    		model.addAttribute("updated",true);
    		return "updateServiceManager";
    	}
     
    	/***************************************************
             * URL: /upload upload(): receives files
             * 
             * @param request
             *            : MultipartHttpServletRequest auto passed
             * @param response
             *            : HttpServletResponse auto passed
             * @return void
             ****************************************************/
    	@RequestMapping(value = "/upload", method = RequestMethod.POST)
    	public String upload(MultipartHttpServletRequest request,
    			HttpServletResponse responsel) {
     
    		Iterator<String> itr = request.getFileNames();
    		MultipartFile mpf = null;
     
    		while (itr.hasNext()) {
     
    			mpf = request.getFile(itr.next());
    			LOG.debug(mpf.getOriginalFilename() + " uploaded!");
     
    			/** Traitement **/
    		}
    		return "redirect:/upload";
    	}
    }
    updateServiceManager.jsp (jQuery et jQuery File Upload sont chargés correctement dans footer.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
    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
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@ page isELIgnored="false"%>
    <!DOCTYPE html>
    <html>
    <head>
    <c:import url="head.jsp" />
    </head>
    <body>
    	<c:import url="navbar.jsp" />
    	<div class="container">
    		<div class="starter-template">
     
    			<div class="panel panel-primary">
    				<div class="panel-heading">
    					<h3 class="panel-title">Nouvelle version</h3>
    				</div>
    				<div class="panel-body text-center">
     
    					<button type="button" class="btn btn-success btn-file btn-lg">
    						<span class="glyphicon glyphicon-upload">
    						</span> Upload
    						<input
    							id="fileupload" type="file" name="file" accept="application/zip"
    							data-url="<c:url value='/upload'/>" />
    					</button>
     
    					<div id="progress-container"
    						class="progress progress-striped active hidden">
    						<div id="progress-bar" class="progress-bar progress-bar-info"
    							role="progressbar" aria-valuenow="0" aria-valuemin="0"
    							aria-valuemax="100" style="width: 0%"></div>
    					</div>
    				</div>
    			</div>
    			<c:forEach items="${applications}" var="app">
    				<div class="panel panel-primary">
    					<div class="panel-heading">
    						<h3 class="panel-title">${app.getName()}</h3>
    					</div>
    					<div class="panel-body">
     
    						<table class="table">
    							<thead>
    								<tr>
    									<th>Version</th>
    									<th>Type</th>
    									<th>Date</th>
    								</tr>
    							</thead>
     
    							<c:forEach items="${app.getVersions()}" var="version">
    								<tr>
    									<td>${version.getVersionNumber()}</td>
    									<c:if test="${version.isBeta()}">
    										<td>Beta</td>
    									</c:if>
    									<c:if test="${!version.isBeta()}">
    										<td>Release</td>
    									</c:if>
    									<td>${version.getCreationDate()}</td>
    								</tr>
    							</c:forEach>
    						</table>
    					</div>
    				</div>
    			</c:forEach>
    		</div>
    		<c:import url="footer.jsp" />
    	</div>
    </body>
    </html>
    upload.js (pour la gestion de la pogressbar lors de l'upload)
    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
    $(function () {
        $('#fileupload').fileupload({
            maxNumberOfFiles: '1',
     
            start: function (e, data) {
            	$('#progress-container').attr('class',"progress");
            },
     
            progressall: function (e, data) {
                var progress = parseInt(data.loaded / data.total * 100, 10);
                $('#progress-bar').css('width',progress + '%').attr('aria-valuenow',progress).text(progress+'%');
                if(progress==100){
                	$('#progress-container').attr('class',"progress progress-striped active");
                	$('#progress-bar').text('Mise à jour...')
                }
            },
        });
    });
    Des idées sur la bonne manière de réafficher ma page updateServiceManager.jsp APRES l'envoi du fichier?

    Merci d'avance de votre aide

  2. #2
    Membre confirmé Avatar de ruscov
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2007
    Messages : 347
    Points : 500
    Points
    500
    Par défaut
    Il faut que tu sorte de ta jsp la partie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <c:forEach items="${app.getVersions()}" var="version">
    								<tr>
    									<td>${version.getVersionNumber()}</td>
    									<c:if test="${version.isBeta()}">
    										<td>Beta</td>
    									</c:if>
    									<c:if test="${!version.isBeta()}">
    										<td>Release</td>
    									</c:if>
    									<td>${version.getCreationDate()}</td>
    								</tr>
    							</c:forEach>
    Et que ta méthode upload renvoie une page contenant ce code.
    Ensuite tu charges le contenu dans ta page actuelle.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Je ne suis pas sûr d'avoir saisi...

    En gros, j'enlève le code permettant l'affichage de ma page unique, et après:
    - je crée une autre jsp pour mettre ce code?
    - j'inclue cette jsp dans ma page unique?
    - comment est ce que je recharge uniquement cette page?
    - dois-je réaliser le rechargement de la page via Swing MVC, ou bien via le javascript de jQuery Upload?

    En tout cas merci de ton aide

  4. #4
    Membre confirmé Avatar de ruscov
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2007
    Messages : 347
    Points : 500
    Points
    500
    Par défaut
    En gros, tu crées une page JSP contenant le code. Appelons la versionsList.jsp. Tu peux inclure cette page dans ta page principale (updateServiceManager.jsp).
    disons que tu met un div autour de ton inclusion.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <div id="versionsList>
       <jsp include versionsList.jsp />
    </div>
    Au premier chargement, versionsList.jsp sera chargé également.
    Ensuite la deuxième partie, le traitement du retour après upload. Le retour est ta page versionsList.jsp
    Dans ton code javascript, tu dois faire un truc du style $('#versionsList').html([ton retour]);
    Je ne connais pas les fonctions dispo pour fileUpload, mais si c'est https://github.com/blueimp/jQuery-Fi...i/Basic-plugin alors tu as done: function (e, data).
    Alors j'imagine que c'est $('#versionsList').html(data);

    J'espère avoir été plus précis et clair

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2011
    Messages : 66
    Points : 37
    Points
    37
    Par défaut
    Merci Ruskov,

    j'ai réalisé tout cela, et ça fonctionne plutôt bien.

    Cependant il me reste un détail qui ne va pas, c'est le rechargement de la page après l'upload (via fileupload.done).
    Je crois que je n'ai pas bien compris l'enchaînement entre le Controller de Swing MVC qui récupère la demande, son retour, et la manière dont j'interprète ça dans jquery fileupload.

    J'ai fait ceci:
    upload.js
    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
    $(function () {
        $('#fileupload').fileupload({
            maxNumberOfFiles: '1',
     
            done: function (e, data) {
            	$('#updatedAppList').html(data);
            },
     
            start: function (e, data) {
            	$('#progress-container').attr('class',"progress");
            },
     
            progressall: function (e, data) {
                var progress = parseInt(data.loaded / data.total * 100, 10);
                $('#progress-bar').css('width',progress + '%').attr('aria-valuenow',progress).text(progress+'%');
                if(progress==100){
                	$('#progress-container').attr('class',"progress progress-striped active");
                	$('#progress-bar').text('Mise à jour...')
                }
            },
        });
    });
    updatedAppList.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
    26
    27
    28
    29
    30
    31
    32
    33
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <c:forEach items="${applications}" var="app">
    	<div class="panel panel-primary">
    		<div class="panel-heading">
    			<h3 class="panel-title">${app.getName()}</h3>
    		</div>
    		<div class="panel-body">
     
    			<table class="table">
    				<thead>
    					<tr>
    						<th>Version</th>
    						<th>Type</th>
    						<th>Date</th>
    					</tr>
    				</thead>
     
    				<c:forEach items="${app.getVersions()}" var="version">
    					<tr>
    						<td>${version.getVersionNumber()}</td>
    						<c:if test="${version.isBeta()}">
    							<td>Beta</td>
    						</c:if>
    						<c:if test="${!version.isBeta()}">
    							<td>Release</td>
    						</c:if>
    						<td>${version.getCreationDate()}</td>
    					</tr>
    				</c:forEach>
    			</table>
    		</div>
    	</div>
    </c:forEach>
    updateServiceManager.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
    26
    27
    28
    29
    30
    31
    32
    33
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <c:forEach items="${applications}" var="app">
    	<div class="panel panel-primary">
    		<div class="panel-heading">
    			<h3 class="panel-title">${app.getName()}</h3>
    		</div>
    		<div class="panel-body">
     
    			<table class="table">
    				<thead>
    					<tr>
    						<th>Version</th>
    						<th>Type</th>
    						<th>Date</th>
    					</tr>
    				</thead>
     
    				<c:forEach items="${app.getVersions()}" var="version">
    					<tr>
    						<td>${version.getVersionNumber()}</td>
    						<c:if test="${version.isBeta()}">
    							<td>Beta</td>
    						</c:if>
    						<c:if test="${!version.isBeta()}">
    							<td>Release</td>
    						</c:if>
    						<td>${version.getCreationDate()}</td>
    					</tr>
    				</c:forEach>
    			</table>
    		</div>
    	</div>
    </c:forEach>
    uploadController.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @RequestMapping(value = "/upload", method = RequestMethod.POST)
    	public String upload(MultipartFile file,
    			HttpServletResponse responsel, ModelMap model) {
     
    			LOG.debug(file.getOriginalFilename() + " uploaded!");
    return "updateAppList";
    	}
    Je ne comprends pas trop comment gérer le retour pour mettre ma liste à jour...

  6. #6
    Membre confirmé Avatar de ruscov
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2007
    Messages : 347
    Points : 500
    Points
    500
    Par défaut
    Ta page updateServiceManager.jsp, c'est ta page principale qui contient tout le tralala html comme tu avais dans ton premier post.
    Tout ton code qui contient la liste de tes app est dans updatedAppList.jsp. Dans ta page updateServiceManager.jsp de ton premier post, tu remplace la liste des app par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div id="updatedAppList">
    <jsp include updatedAppList.jsp/>
    </div>
    Comme ça au premier affichage, c'est chargé normalement. Et à la fin de l'upload, tu remplis ton div par le retour de Spring MVC qui te fournit updatedAppList.jsp. Et avec jquery tu charge les données dans ta page actuelle sans la recharger.

Discussions similaires

  1. [UI] Comment passer à jQuery File Upload ?
    Par antoinegui dans le forum jQuery
    Réponses: 2
    Dernier message: 25/03/2014, 23h01
  2. utilisation jquery file upload avec codeigniter
    Par skawll dans le forum Langage
    Réponses: 1
    Dernier message: 26/03/2013, 23h07
  3. Suppression plugin JQuery File Upload
    Par goku19 dans le forum Langage
    Réponses: 3
    Dernier message: 22/03/2013, 20h15
  4. blueimp jQuery-File-Upload Drag'n'drop
    Par KiranoO dans le forum jQuery
    Réponses: 1
    Dernier message: 03/09/2011, 20h37
  5. ouverture de box dans jquery file upload
    Par doud180878 dans le forum jQuery
    Réponses: 9
    Dernier message: 17/08/2011, 07h32

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