2016-08-09 345 views
0

Download Was ich versuche zu tun:Automatische Leerzeichen einfügen während Struts2

auf dem Server generieren eine txt-Datei und laden Sie es auf der Client-Seite. Ich Streben 2 verwenden, sind hier die Codeteile:

AwesomeAction.java

InputStream fileInputStream; 

public InputStream getFileInputStream(){ 
    return fileInputStream; 
} 

public String execute() { 
    res = "toto"; 
    fileInputStream = new StringInputStream(res); 
    return SUCCESS; 
} 

struts.xml

<action name="awesomeAction" class="pathtomyawesomeaction"> 
    <result name="success" type="stream"> 
       <param name="contentType">text/plain</param> 
       <param name="inputName">fileInputStream</param> 
       <param name="contentDisposition">attachment;filename="id_opp.txt"</param> 
       <param name="bufferSize">1024</param> 
    </result> 
    <result name="error" type="redirect">/erreur.do</result> 
</action> 

Was nicht funktioniert:

Wenn ich klicke Auf dem Link, der die Aktion auslöst, wird tatsächlich eine Datei mit dem Namen "id_opp.txt" heruntergeladen, die den gesamten Text ("toto") enthält, aber vor jedem Zeichen einen Leerraum hinzufügt.

"t o t o"

Mit Server debuggt, ich bin sicher, dass mein Variable "toto" Server-Seite enthält, also muss es eine Config sein, die ich vermisse ...

Jede Idee?


Verwendung des Imports org.hsqldb.lib.StringInputStream; Für den InputStream, da der String in dieser Klasse gebaut wird, kann ich keinen FileInputStream oder irgendetwas verwenden, mir ist keine andere Möglichkeit bekannt, dies zu tun?

auf der Codierung überprüfen, wird aktualisiert, sobald ich


gelöst dank Thomas einige Ergebnisse erhielt:

Mit der StringInputStream die Wurzel des Problems war, sondern schaltete es auf: fileInputStream = neuer ByteArrayInputStream (res.getBytes (StandardCharsets.UTF_8));

, die eine input für die „res“ Variable bauen, mit der eigentlichen Codierung etc ...

+1

Es könnte ein Codierungsproblem sein, da Sie keine zur Verfügung gestellt haben. Abgesehen davon, welche 'StringInputStream' Klasse benutzt du? AFAIK es ist keine der Struts 2 Core-Bibliotheken und keine JDK-Klasse. Und ist dein Beispiel korrekt? Sie übergeben das "t" in Kleinbuchstaben, aber in Großbuchstaben? – Thomas

+0

Ich werde die Frage mit diesen Details bearbeiten, so dass jeder sie auch sehen kann! –

+0

@Thomas der Großbuchstabe T war ein Tippfehler, mein Schlechter. Versuchen Sie, dies mit einem ByteArrayInputStream zu lösen, der wie ein besserer Weg erscheint, um meinen InputStream zu erstellen, werde ich Sie in einer Minute auf dem Laufenden halten –

Antwort

1

Probleme wie könnte dies aufgrund der unterschiedlichen Kodierungen auftreten. Intern speichert Java Strings unter Verwendung von 16-Bit-Zeichen, und wenn Sie diese in eine Byte-Darstellung konvertieren (z. B. zum Schreiben in einen Stream), wird eine Codierung verwendet (entweder die vom Aufrufer bereitgestellte oder die Standardcodierung, die häufig die Systemcodierung ist).

Es hängt also davon ab, was StringInputStream mit der Zeichenkette macht, d. H. Wie sie die Zeichenkette in Bytes konvertiert und welche Kodierung verwendet wird (falls vorhanden).

Darüber hinaus kann es vom Leser abhängen, wie die TXT-Datei interpretiert wird, wenn Sie keine Informationen hinzufügen, um die Codierung anzuzeigen (wie die BOM (Byte Order Mark) für UTF-8).

Dies zu tun, d. H. Mit ByteArrayInputStream(res.getBytes(StandardCharsets.UTF_8)), würde zumindest das Problem beim Schreiben lösen. Die Editoren könnten die Daten dann korrekt interpretieren, selbst wenn die Stückliste fehlt (und UTF-8 stellt übliche Zeichen wie ISO-Latin 1 (ASCII) dar und daher ist möglicherweise sogar die "falsche" Codierung im Lesegerät kein Problem).

+0

Vielen Dank für Ihre Hilfe und Schnelligkeit! –

+1

@AlexandreBeaudet du bist willkommen :) – Thomas