# hx:commandExButton DAtei erstellen und dem User zum Download



## TRunKX (29. Apr 2008)

Hallo Leute,

habe eine Grundsatzfrage: 

Ich versuche folgendes und komme nicht weiter:


```
<hx:commandExButton type="submit" action="#{gencadAdminActivity.doActionExportUserList}" title="Exportieren" value="Exportieren" id="export" styleClass="commandExButton"></hx:commandExButton>
```

Nachdem der button in der GUI gedrückt wurde erstellt der Server eine Datei mit eienr Liste :


```
public String doActionExportUserList()
	{

		int g=0;
		File f = new File ("s");
		Writer fw = null;
		
		try { 
			fw = new FileWriter( f.createTempFile("List",".csv"));
			setFilename(f.getAbsolutePath());
			fw.write("User Liste des Repositorys: \n");
			while (g!=repositoryUsers.size())
			{
				fw.write (((RepositoryUser)repositoryUsers.get(g)).getName()+" \n");
				g++;
			}
			} catch ( IOException e ) 
			{ 
				System.err.println( "Konnte Datei nicht erstellen" );
				} 
			finally 
			{ 
				if ( fw != null ) 
					try { fw.close();
					} catch ( IOException e ) 
					{ 	
					} 
					}
		
		
		
		return GenCADKonstanten.EXPORT_USER_LIST;
	}
```

Nun will ich aber eigentlich das der User die gerade erstellte Datei direkt Downloaden kann ohne das ein weiterer Klick Notwendig ist. 

Jemand ne Idee wie das zu handlen ist? Ich mache mich da jetzt seit 3 Stunden kaputt und weiß nichtmal wo ich anfangen soll.

Bin für jede hilfe dankbar.


----------



## maki (29. Apr 2008)

http://wiki.apache.org/myfaces/Sending_Files

Das hier:

```
return GenCADKonstanten.EXPORT_USER_LIST;
```
Wird dann aber nicht mehr ausgeführt.


----------



## TRunKX (29. Apr 2008)

Erstmal Danke für die Antwort!

Ich werde das noch heute ausprobieren und dann gegebenenfalls den Thread als gelöst markieren. 

Ich danke für die schnelle Antwort und schäme mich das ich das nicht schon selbst gefunden habe.


----------



## TRunKX (29. Apr 2008)

Hmm also wenn ich immer weiß wo die Datei liegt dann geht das ja super. 

Aber in meinem Fall habe ich doch folgendes gemacht:


```
fw = new FileWriter( f.createTempFile("List",".csv"));
```

Nur bekomme ich jetzt von 

f weder Pfad noch dateiname geliefert. Kann mir jemand sagen warum bzw. wie ich beide Infos bekomme. 

Das wichtige an dem Programm ist das ers derzeit in einem lokalen TestEnvironment löuft und später auf einen WebSphere Application Server kommt. Also ist arbeiten mit absoluten Pfaden einfach nicht drin.


----------



## maki (29. Apr 2008)

> Nur bekomme ich jetzt von
> 
> f weder Pfad noch dateiname geliefert. Kann mir jemand sagen warum bzw. wie ich beide Infos bekomme.


Brauchst du das denn wikrlich?
FileINputStream nimm auch ein bestehendes File objekt, Pfad und Name sind dann nicht mehr wichtig.



> Das wichtige an dem Programm ist das ers derzeit in einem lokalen TestEnvironment löuft und später auf einen WebSphere Application Server kommt. Also ist arbeiten mit absoluten Pfaden einfach nicht drin.


Ich empfehle Tests auf dem Webspehere, willst ja später keine Überraschungen erleben.


----------



## freez (29. Apr 2008)

Ist das nicht eine klassische Anwendung für ein Servlet? Vorteilhaft ist auch, dass man direkt schreiben kann, und nicht extra ein File erstellen muss.


----------



## TRunKX (30. Apr 2008)

Habs geschafft es geht. Habe einfach ne normale Datei gemacht. Da habe ich die angaben geht in beiden Welten.


----------



## maki (30. Apr 2008)

> Ist das nicht eine klassische Anwendung für ein Servlet?


Wenn man kein JSF nutzt, dann ja 



> Vorteilhaft ist auch, dass man direkt schreiben kann, und nicht extra ein File erstellen muss.


Braucht man bei dieser Lösung mit JSF auch nicht.

Genaugenommen macht die Action der ManagedBean nix anderes als das Servlet, HttpSerlvetResponse holen und Daten durchschieben, kein Unterschied.

Sieh dir mal den Code unter dem Link an 

Aber ein Servlet an JSF zu gewöhnen ist nicht so elegant umzusetzen imho.


----------

