Récupérer des données après envoie d'un formulaire via Vaadin

Fermé
Sertoif - 16 janv. 2018 à 14:53
 Sertoif - 17 janv. 2018 à 09:20
Bonjour,

Je développe actuellement un module sur une application java EE utilisant Vaadin et Maven, cependant il me faudrait récupérer les données après l'envoie de formulaires ( quel qu'il soit ) pour l'afficher dans un Logger.
Je n'ai pas encore trouver de moyen pour répondre à mon problème...

Merci par avance pour votre réponse.
Cordialement.

A voir également:

1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
16 janv. 2018 à 22:54
Bonjour,

Je ne suis pas sûr d'avoir bien compris le besoin et Vaadin je sais en gros ce que c'est mais sans plus.
Une solution qui marche quasiment tout le temps, c'est de faire un filtre, c'est à dire analyser la requête brute envoyée au serveur avant que Vaadin ne la traite (et éventuellement la réponse après qu'il l'ait traité)

package test;

import java.io.IOException;
import javax.servlet.*;

public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig paramFilterConfig) throws ServletException {
    }
  
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
       // TODO opérations avec la ServletRequest avant l'appel à Vaadin
       chain.doFilter(request, response); // appel à Vaadin
       // TODO opérations avec la ServletResponse après le retour de Vaadin
    }

    @Override
    public void destroy()
    }
}

La config se passe dans le web.xml :

<!-- Filtres -->
<filter>
    <filter-name>myFilter</filter-name>
    <filter-class>test.MyFilter</filter-class>
</filter>

<!-- Servlets -->
<servlet>
    <servlet-name>VaadinApplication</servlet-name>
    <servlet-class>com.vaadin.terminal.gwt.server.ApplicationServlet</servlet-class>
    ...
0
Merci pour ta réponse KX,
En effet, j'ai oublié de signaler que j'ai déjà développer un filtre ^^ (mais au même endroit). Voici le code:

package net.interlog.isp.engine.api.authentication;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URI;

import javax.annotation.Priority;
import javax.ws.rs.Priorities;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.core.Response;
import javax.ws.rs.ext.Provider;

import org.glassfish.jersey.message.internal.ReaderWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import net.interlog.isp.engine.models.UserEntity;

@Provider
@Priority(Priorities.USER)
public class ActionFilter implements ContainerRequestFilter {

  protected static final Logger LOG = LoggerFactory.getLogger(ActionFilter.class);

  @Autowired
  private ISPRequestContext ispRequestContext;


  private String readEntityStream(ContainerRequestContext requestContext) {
    ByteArrayOutputStream outStream = new ByteArrayOutputStream();
    final java.io.InputStream inputStream = requestContext.getEntityStream();
    final StringBuilder builder = new StringBuilder();
    try {
      ReaderWriter.writeTo(inputStream, outStream);
      byte[] requestEntity = outStream.toByteArray();
      if (requestEntity.length == 0) {
        builder.append("");
      } else {
        builder.append(new String(requestEntity));
      }
      requestContext.setEntityStream(new ByteArrayInputStream(requestEntity));
    } catch (IOException ex) {
      LOG.debug("----Exception occurred while reading entity stream :{}", ex.getMessage());
    }
    return builder.toString();
  }

  /**
   * Create a filter that will display useful informations about the user which is connect on the
   * current session
   *
   * @param request http client request
   * @return informations in the main logger, called LOG
   *
   */
  @Override
  public void filter(ContainerRequestContext requestContext) throws IOException {
    try {
      UserEntity user = ispRequestContext.getRequestUser();
      // provide user's informations (id, name, date,...)
      String infoMethode = requestContext.getRequest().getMethod();
      URI url = requestContext.getUriInfo().getAbsolutePath();

      if (infoMethode.equals("PUT") || infoMethode.equals("POST")) {

        String params = readEntityStream(requestContext);
        LOG.debug(String.format("User: %s (id: %s) | url: %s | param: %s", user.getName(),
            user.getId(), url, params));

      } else {

        LOG.debug(String.format("User: %s (id: %s) | url: %s", user.getName(), user.getId(), url));
      }
    } catch (Exception e) {
      LOG.debug("RequestContext abort With " + Response.Status.UNAUTHORIZED);
    }
  }
}

Ce filtre me renvoie effectivement bien ce que je lui demande. Cependant, ce filtre est positionner sur un partie engine de l'application web. Le second filtre que je dois mettre en place est du coté utilisateur (UI) et à cause de Vaadin le code ne se fait pas de la même façon...
0