JFileChooser + WEB

Boa tarde galera. Estou com um problema aqui que está me tirando o sono.
Já revirei o forum e o google atras de informações mas não estou conseguindo resolver.

Vamos lá… vou tentar resumir o problema:

Tenho uma aplicação web em que o usuário vai fazer o download de um relatório em formato csv e xml. Até ai, sussa.
O problema é quando eu tento fazer esse donwload de qualquer estação que não seja o servidor.

No servidor, abre normalmente o ambiente para selecionar diretorios do JFileChooser.
Mas gostaria que salvasse na máquina do usuário que está fazendo a pesquisa, e não no servidor.

Entenderam?

A aplicação está no 192.168.1.1 e quando acesso pelo 192.168.1.10 e tento fazer o download pelo JFileChooser, ele abre o box do “salvar como” no 192.168.1.1;

Andei pesquisando sobre JNLP mas não é bem isso que eu preciso, encontrei esse link (http://www.coderanch.com/t/252452/Applets/java/JFileChooser-applet) com algo que parece a solução, mas não consigo fazer funcionar no meu caso.

Agradeço qualquer ajuda

segue codigo

[code] JFileChooser escolha = null;
String formatoExtensao = null;

            Iterator<?> it2 = lista.iterator();
	for (; it2.hasNext();)
	{
		// Caso seja XML
		usuarioXML = new Usuario();
		usuarioXML = (Usuario) it2.next();
		dados += xstream.toXML(usuarioXML);
	}
	escolha = new JFileChooser();
	escolha.setFileFilter(new xmlFilter());
	formatoExtensao = ".xml";
	// Salvando arquivos
	try
	{
		escolha.setDialogTitle("Salvar arquivos para cobrança");
		escolha.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
		int valor = escolha.showSaveDialog(null);
		
		if (valor == JFileChooser.APPROVE_OPTION)
		{
			File salvar = escolha.getSelectedFile().getAbsoluteFile();
			FileWriter fw = new FileWriter(salvar + formatoExtensao);
			fw.write(dados);
			fw.flush();
			fw.close();
		}
	}
	catch (Exception e)
	{
		e.printStackTrace();
	}[/code]

Filtro XML

[code]public class xmlFilter extends FileFilter
{
private final static String xml = “xml”;

/** construtor vazio da classe */
public xmlFilter()
{
}

public boolean accept(File f)
{
	if (f.isDirectory())
	{
		return true;
	}
	
	String extension = getExtension(f);
	if (extension != null)
	{
		if (extension.equals(xml))
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	
	return false;
}

// a desc. dos tipos de arquivos que irão aparecer no jfilechooser
public String getDescription()
{
	return "*.xml";
}

public static String getExtension(File f)
{
	String ext = null;
	String s = f.getName();
	int i = s.lastIndexOf('.');
	
	if (i > 0 && i < s.length() - 1)
	{
		ext = s.substring(i + 1).toLowerCase();
	}
	return ext;
}

}[/code]

Se você está escrevendo uma aplicação Web que chama alguma coisa escrita em Swing (como o javax.swing.JFileChooser), alguma coisa está errada com certeza.

Você está confundindo os conceitos de aplicação Web e Desktop de forma bastante ingênua.

Oi leandropietrosantos,

no caso, a classe JFileChooser só pode ser usada em aplicações desktop. Realmente, do lado servidor, quando for executar, a janelinha irá aparecer, porque a aplicação “pensa” ser desktop.
No entanto, do lado cliente o JFileChooser não vai aparecer porque o browser pensa que se trata de uma aplicação web.

É importante mencionar que sua aplicação web não pode definir aonde o arquivo será salvo na máquina do usuário. Ela só envia os dados para o cliente. Nesta situação, uma solução interessante é disponibilizar o arquivo como um link ou como resposta para o cliente, de tal modo que este se vire com aonde o arquivo deva ser salvo.

Galera consegui resolver, não com JFileChooser, (realmente nunca conseguiria), e sim com Jquery;

Pra quem quer mais detalhes:

o código é esse

Código java

response.setContentType("application/force-download");
		response.setHeader("Content-Transfer-Encoding", "binary");
		response.setHeader("Content-Disposition", "attachment;filename=arquivo.xml");

		String conteudoArquivo = LISTA_A_SER_USADA
		StringBuffer sb = new StringBuffer(conteudoArquivo);
		InputStream in = new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));
		 
	    OutputStream out = response.getOutputStream();  
	  
	    int buflen = 1024;  
	    byte[] buffer = new byte[buflen];
	  
	    int read;  
	    int length = 0;  
	  
	    while ((read = in.read(buffer, 0, buflen)) > 0) {  
	        length += read;  
	        out.write(buffer, 0, read);  
	    }  
	  
	    response.setContentLength(length);  
	  
	    out.flush();  
	    out.close();  
	  
	    in.close(); 

Código javascript


<script type="text/javascript" src="script/jquery-1.8.2.js"></script>
<script type="text/javascript" src="script/jquery.fileDownload.js"></script>

<script>
$.fileDownload('classe_exportacao.do?acao=downloadArquivo&id=' + id,
					{
						successCallback: function (url) {			        
						},
						failCallback: function (html, url) {				 
							alert('Erro ao exportar o arquivo');
						}
					});

</script>