browserwindowopener FileDownloader jasper

Estimados,

Necesito visualizar un pdf generado apartir de la seleccion de objetos cargados en una tabla.
Tengo dos btns abajo de dicha tabla uno para generar el pdf y otro para verlo. Similar a lo planteado aca → https://vaadin.com/forum#!/thread/9768587
El problema que se presenta es que la primera vez lo hace de forma correcta, pero al seleccionar otro elemento de la tabla se generarn dos veces los tabs mostrando/bajando el pdf generado (el pdf lo generar correctamente)y si selecciono un tercero lo realiza 3 veces asi se repite n veces.
Genera correctamente el pdf pero es como que queda residual los generado anteriormente.
Copio parte del codigo:

[code]
if(event.getSource() == this.getBtnGenerarReporte()){

            // Probe declarando Resource y fd dentro de este bloque sin resultado
            //paciente lo obtengo de valueChange de la tabla
            resource = generarSource(paciente);    <-generarSoruce esta declarado abajo
            fd = new FileDownloader(resource);           
            fd.extend(btnVerReporte); <-btn que dispara y muetra pdf
 }

private StreamResource generarSource(final VistaAdmEstudiosPorRealizar paciente) {

    return new StreamResource(new StreamResource.StreamSource() {
        
        /**
         *
         */
        private static final long serialVersionUID = 1L;

        @Override
        public InputStream getStream() {
            
             Conexion conexion = null;
             String reportFile = "";
             byte b = null;
             log.trace("IdRutina del paciente seleccionado: " + paciente.getIdRutina());
             Map<String, Object> parameters = new HashMap<String, Object>();
             parameters.put("filter",paciente.getIdRutina());
             parameters.put("parametro1", paciente.getTipoExamen());
             parameters.put("parametro2", paciente.getRazonSocial());
             parameters.put("parametro3", paciente.getApellidoPaciente()+", "+paciente.getNombrePaciente());
             parameters.put("parametro4", paciente.getDireccion());
             parameters.put("parametro5", paciente.getNumeroDeDocumento());
             parameters.put("parametro6", paciente.getFechaNacimiento());
             parameters.put("parametro7", paciente.getNombreArt());
             parameters.put("parametro8", paciente.getEstadoCivil());
             parameters.put("parametro9", paciente.getTelefono());
             parameters.put("parametro10",paciente.getTipoDeDocumento());
             parameters.put("parametro11",paciente.getNacionalidad());
             parameters.put("parametro12",paciente.getFechaIngreso());
             parameters.put("parametro13",paciente.getOrientacionRutina());
              try {
                     if(paciente.getTipoExamen().equalsIgnoreCase("periodico")){
                            reportFile = "com/report/rutinasAVisarPeriodico.jasper";
                            }else{
                            reportFile = "com/report/rutinasAVisarIEO.jasper";    
                            }                
                     InputStream report = getClass().getClassLoader().getResourceAsStream(reportFile);
                     
                        if (report == null) {
                            Notification.show("No report!", Type.ERROR_MESSAGE);
                            return null;
                        }
                       
                     conexion = new Conexion();
                     b = JasperRunManager.runReportToPdf(report, parameters, conexion.getConexion());
                    //  conexion.getConexion().commit();
                  
                     } catch (SQLException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (JRException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
            
                    
                    }
              return new ByteArrayInputStream(b);
              }
    }, "reporte"+paciente.getTipoExamen()+".pdf");
}

[/code]Al realizar la traza y al realizar click en btnVerReporte la primera vez lo realiza correctamente. Luego al seleccionar otro paciente de la tabla genera bien el pdf pero tambien me genera el paciente anterior, es decir que si hago esa operacion 10 veces, 10 veces generar para ver-bajar (dependiendo si uso FileDownloader o BrowserWindowOpener).

Espero a ver sido claro.
Saludos !!!

intente esto
resource = generarSource(paciente);
resource.setCacheTime(1);
el argumento podria ser -1 o 0 para desabilitar el cahe en el browser

Hola Wilson. No tuve exito con lo que comentas. Te muestro unas capuras quizas pueda a ayudar a enteder lo que me sucede. Te comento que en caso de seleccionar por tercera vez otro elemento de la tabla me generará 3 pdf. La ventana siempre es correcta, es decir, me trae el pdf generado pero las demas son las residuales

Todas las veces lo genera correctamente el tema es que para la vez n me genera n veces ventanas con las respectivas n veces que genere anteriormente los pdf

Gracias!
26043.png
26044.png

Estimados, pude resolver mi situación
Lo que hice fue declarar StreamResource resource = null; BrowserWindowOpener fd = new BrowserWindowOpener(""); Por unica vez, luego en el contructor de mi layout [code]

fd.extend(btnVerReporte);

[/code]En el escuchador del btn que genera el PDF hice lo siguiente:

[code]
if(event.getSource() == this.getBtnGenerarReporte()){

            resource = generarSource();
            fd.setResource(resource);      
            this.getBtnVerReporte().setEnabled(true); //habilito btn para ver pdf
            
        }

[/code]Y generarSource() lo que hice fue tomar directamente el valor de la tabla con getTablaAprobaciones().getValue();
y listo!!

Saludos