JSF f:param konvertiert 'blank' nach '+' in mailto-link

LStrike

Mitglied
Hallo zusammen,

habe hier ein kleines Problem bei der Erzeugung eines (Hyper)Links für einen E-Mail Body in meiner JSF Anwendung.

Ich habe ein Feld (im Code _article.headline), welches in der Entität ein String, in der darunter liegenden Datenbank ein CLOB ist.

Wenn im Feld headline nun folgendes steht:

"Dies ist eine Testzeile."

Dann wird daraus nach dem Klick auf den Link:

"Dies+ist+eine+Testzeile."


Jetzt habe ich schon erfahren, dass das + Zeichen, der "default-Wert" für ein "Space" ist.
Das ist jedoch sehr unbefriedigend.
Was muss ich tun, damit dort wieder ein "blank" anstelle des + steht?

Code:
<h:outputLink style="text-decoration: none;" value="mailto:">
     <f:param name="subject" value="#{_article.headline}" />
     <f:param name="body" value="#{informationCenterHandler.articleToMail(_article)}" />
     <i title="Artikel als Mail verschicken" class="fa fa-envelope-o fa-fw" />
</h:outputLink>

(Habe es schon vor 3 tage auf StackOverflow gepostet, aber bisher keine Antwort.)

Grüße
Markus

PS: Hier auch der Link zu Stackoverflow
java - f:param converts blanks to '+' in mailto-link - Stack Overflow
 
F

fisherman

Gast
Welche Datenbank benutzt du denn? Müsste ja in der Dokumentation dazu stehen, ob und wie man das ggf. ändern kann.
Ansonsten hast du die Möglichkeit, das im Bean zu behandeln und von dort einen sauberen String zu holen. Z.B. so:
Java:
public String getHeadline() {
   return this.headline.replaceAll("+", " ");
}
Allerdings wird's schwieriger, wenn der String ein oder mehrere erwünschte Plus-Zeichen enthält, daher auch nur ein rudimentäres Beispiel.
Etwas unschön ist das allerdings, daher solltest du dir erstmal die DB-Doku zu Gemüte führen und das Problem dort zu lösen versuchen.
 

LStrike

Mitglied
Hallo fisherman,

ich nutze eine MS-SQL, werde da doch mal unsere DB-Admins befragen, bzw. eine Runde googlen.
Danke für den Tipp.

An die Sache mit dem "replaceAll" hatte ich auch schon gedacht, aber aufgrund der von Dir genannten Gründe wieder verworfen.

Melde mich wieder, wenn ich eine Lösung gefunden habe.

Grüße
Markus
 

LStrike

Mitglied
Hallo,

das Problem scheint nicht aus der Datenbank zu kommen.

Auch wenn ich das hier mache:

Code:
    public String getHeadline() {
       return this.headline.replaceAll("+", " ");
    }

bekomme ich am Ende einen String, der mit "+-Zeichen" separiert ist.

Muss jetzt mal schauen, ob es in JSF eine Möglichkeit gibt das Problem zu lösen.
 
F

fisherman

Gast
Code:
    public String getHeadline() {
       return this.headline.replaceAll("+", " ");
    }
bekomme ich am Ende einen String, der mit "+-Zeichen" separiert ist.
Der Code war nur ein Beispiel, ich weiß ja nicht, was in deinen Variablen zur Laufzeit drinsteckt und welche Variablen du verwendest.
Die replaceAll()-Methode ist jedenfalls die Methode der Wahl.
Muss jetzt mal schauen, ob es in JSF eine Möglichkeit gibt das Problem zu lösen.
Es bietet sich an zu schauen, was nach dem Klicken passiert und was da eigentlich übertragen wird.
 

LStrike

Mitglied
Habe mir gerade mal den Inhalt per Java byteweise ausgeben lassen.
Kein einzige +-Zeichen in sicht.
Irgendwie glaube ich, dass JSF aus den Blanks ein +-Zeichen macht, warum auch immer.
 

LStrike

Mitglied
Es muss an dem f:param liegen

Code:
<f:param name="subject" value="#{_article.headline}" />

Ich habe jetzt mal den Wert von _article.headline als String in der Bean hinterlegt (hart reincodiert ohne den Umweg über die DB) und bekomme immer noch die +-Zeichen.


aus:

This is a Test Value!

wird

This+is+a+Test+Value!


Heißt f:param ist Fehlerhaft?
 

LStrike

Mitglied
Vielleicht ist auch Outlook schuld!?

Wenn ich das hier mache:

Code:
<f:param name="subject" value="This is a test value!" />

Passiert genau das gleiche.
 
F

fisherman

Gast
<f:param> ist daran sicher nicht schuld. Könnte ein Encoding-Problem während der Übergabe des Strings von der JSF-Anwendung an den Mail-Client sein.
Wie gesagt: Durch Debuggen bzw. Logging rausfinden, an welcher Stelle der String umgewandelt wird.
 
F

fisherman

Gast
Also, durch ganz normales Debugging in deiner IDE. Du willst doch herausfinden, ob der besagte String schon in deiner JSF-Anwendung umgewandelt wird, also JSF dafür verantwortlich ist, oder erst bei der Übergabe an Outlook.
 

LStrike

Mitglied
Ich denke, da gibt es nicht viel zu sehen und zwar aus folgendem Grund:

Code:
<h:outputLink style="text-decoration: none;" value="mailto:">
     <f:param name="subject" value="This is a test value!" />
     <f:param name="body" value="#{informationCenterHandler.articleToMail(_article)}" />
     <i title="Artikel als Mail verschicken" class="fa fa-envelope-o fa-fw" />
</h:outputLink>

Ich habe den f:param Wert für das Subject jetzt hart in der GUI mit einem Testwert versehen

Code:
<f:param name="subject" value="This is a test value!" />

Klicke ich jetzt auf den Link, so öffnet sich, so soll es auch sein, das Fenster zu meiner Standard-EMail-Anwendung. In meinem Fall Outlook mit dem Fenster "Neue Nachricht".

Hier steht nun bereits in der Subject Zeile der Text, jedoch mit den +-Zeichen:

This + is + a + test + value!

Ich wüsste jetzt nicht, wo ich da Debuggen soll. Es wird ja in diesem Fall für das Subject keine Bean aufgerufenen.
 
F

fisherman

Gast
Das weißt darauf hin, dass die Umwandlung bei der Übergabe an den Mail-Client passiert. Könnte sein, dass du dich mit Encoding näher beschäftigen musst.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B <context-param> Allgemeines EE 2

Ähnliche Java Themen

Neue Themen


Oben