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 :

download d'un fichier


Sujet :

Spring Web Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 14
    Points : 19
    Points
    19
    Par défaut download d'un fichier
    Bonjour,

    Je travaille avec Spring Webflow 2.0.8 et j'ai un problème. L'application web doit générer un fichier excel et le proposer en téléchargement à l'utilisateur. Donc, j'ai suivi ce qui est donné dans la doc de référence spring http://static.springsource.org/sprin...l/ch05s07.html paragraphe streaming actions.

    Dans le flow (qui s'appelle consultation), on a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        <view-state id="syntheseView" model="syntheseModel" view="syntheseJsp">
            <transition on="retour" to="rechercheView" />
            <transition on="exporter">
                <evaluate expression="excelService"/>   
            </transition>
        </view-state>
    Le service de génération du fichier excel est le suivant :
    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
    public class ExcelService extends AbstractAction {
     
        @Override
        protected Event doExecute(RequestContext context) throws Exception {
            HttpServletResponse response = (HttpServletResponse)context.getExternalContext().getNativeResponse();
            XlsFileManager xlsFileManager = new XlsFileManager();
            ModeleMetier modeleMetier = (ModeleMetier)context.getFlowScope().get("modeleMetier ");
            HSSFWorkbook wb = xlsFileManager.createXlsStream(modeleMetier );
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-Disposition","attachment; filename=fichiertoutbeantoutpropre.xls; charset=cp1252");
            ServletOutputStream sos = response.getOutputStream();
            wb.write(sos);
            sos.close();
            context.getExternalContext().recordResponseComplete();
            return success();
        }
    }

    Le comportement observé est le suivant :
    dans la page synthèse, on clique sur le bouton "exporter", la génération du fichier excel se fait et on récupère son document. La page synthèse elle, n'a pas bougé. Jusqu'ici, tout va bien.
    Ensuite, on clique sur un bouton de la page (exemple : le bouton "retour" qui appelle la transaction "retour").
    Et là, c'est le drame. L'application plante avec la magnifique trace d'erreur suivante :
    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
    2010/06/03-18:44:58 [ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)' org.springframework.web.servlet.DispatcherServlet DEBUG Could not complete request
    org.springframework.webflow.execution.FlowExecutionException: Exception thrown in state 'syntheseView' of flow 'consultation'
        at org.springframework.webflow.engine.impl.FlowExecutionImpl.wrap(FlowExecutionImpl.java:569)
        at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:263)
        at org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:163)
        at org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:183)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:226)
        at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:124)
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
        at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:378)
        at org.springframework.security.ui.ExceptionTranslationFilter.doFilterHttp(ExceptionTranslationFilter.java:101)
        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
        at org.springframework.security.ui.logout.LogoutFilter.doFilterHttp(LogoutFilter.java:89)
        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
        at org.springframework.security.ui.preauth.AbstractPreAuthenticatedProcessingFilter.doFilterHttp(AbstractPreAuthenticatedProcessingFilter.java:69)
        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
        at org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
        at org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
        at org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
        at org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3393)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(Unknown Source)
        at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2140)
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2046)
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1366)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)
    Caused by: java.lang.ClassCastException: [Ljava.lang.String;
        at org.springframework.web.util.WebUtils.findParameterValue(WebUtils.java:565)
        at org.springframework.webflow.mvc.view.AbstractMvcView.determineEventId(AbstractMvcView.java:317)
        at org.springframework.webflow.mvc.view.AbstractMvcView.getEventId(AbstractMvcView.java:282)
        at org.springframework.webflow.mvc.view.AbstractMvcView.userEventQueued(AbstractMvcView.java:191)
        at org.springframework.webflow.engine.ViewState.resume(ViewState.java:195)
        at org.springframework.webflow.engine.Flow.resume(Flow.java:545)
        at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:259)
        ... 38 more
    2010/06/03-18:44:58 [ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)' org.springframework.security.context.HttpSessionContextIntegrationFilter DEBUG SecurityContextHolder now cleared, as request processing completed
    <3 juin 2010 18 h 44 CEST> <Error> <HTTP> <BEA-101017> <[weblogic.servlet.internal.WebAppServletContext@52d188 - appName: '_appsdir_monAppli_dir', name: 'monAppli', context-path: '/monAppli'] Root cause of ServletException.
    org.springframework.webflow.execution.FlowExecutionException: Exception thrown in state 'syntheseView' of flow 'consultation'
        at org.springframework.webflow.engine.impl.FlowExecutionImpl.wrap(FlowExecutionImpl.java:569)
        at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:263)
        at org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:163)
        at org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:183)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:875)
        Truncated. see log file for complete stacktrace
    java.lang.ClassCastException: [Ljava.lang.String;
        at org.springframework.web.util.WebUtils.findParameterValue(WebUtils.java:565)
        at org.springframework.webflow.mvc.view.AbstractMvcView.determineEventId(AbstractMvcView.java:317)
        at org.springframework.webflow.mvc.view.AbstractMvcView.getEventId(AbstractMvcView.java:282)
        at org.springframework.webflow.mvc.view.AbstractMvcView.userEventQueued(AbstractMvcView.java:191)
        at org.springframework.webflow.engine.ViewState.resume(ViewState.java:195)
        Truncated. see log file for complete stacktrace
    En fait, après avoir envoyé le fichier, il semblerait que le flow soit corrompu. et malgré plusieurs recherches, je ne sais pas quoi faire.
    Donc ma question plus générale est la suivante : comment implémente t-on un download de fichier avec spring webflow ?

    D'avance merci.

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 14
    Points : 19
    Points
    19
    Par défaut
    Finalement, j'ai mis le modèle métier dans la session et j'ai appelé un servlet pour construire le fichier Excel.

    Ca ne résout pas le problème initiale mais ça dépanne.

Discussions similaires

  1. Download d'un fichier
    Par Le Capitaine dans le forum Access
    Réponses: 3
    Dernier message: 09/01/2007, 12h39
  2. [plugin PHP] Download systematique du fichier ouvert
    Par slim dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 03/08/2006, 11h39
  3. Download d'un fichier
    Par arno_web dans le forum ASP
    Réponses: 6
    Dernier message: 19/02/2006, 23h03
  4. [Upload] Gérer les downloads d'un fichier
    Par pirate17 dans le forum Langage
    Réponses: 5
    Dernier message: 18/02/2006, 11h32
  5. [STRUTS][DOWNLOAD] download d'un fichier via une action
    Par FreshVic dans le forum Struts 1
    Réponses: 3
    Dernier message: 16/04/2004, 16h38

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