Wert hinter JSP-Tag nach Java-String in Skriptlet

Status
Nicht offen für weitere Antworten.

ruutaiokwu

Top Contributor
hallo zusammen,

bin gerade an einer jsp-page von einer webapplikation, welche unter struts läuft. nun wird mit dem tag

Code:
<html:errors property="text">

eine fehlermeldung ausgegeben, wenn ein bestimmtes textfeld nicht ausgefüllt wird. das problem ist, dass dort zeichen, welche entitäten erfordern (z.b. umlaute), "original" sind - dies geht aber nicht, da die page nicht utf-8-codiert wird.

alle (fehler)meldungen sind in einer resourcendatei gespeichert. und dort will ich AUF KEINEN FALL irgendwelche html-entities haben. (z.b. fehlermeldung à la "Sie m&uuml;ssen das Feld xy ausfüllen.")

meine frage: wie wandle ich dieses tag, welches im browser KEIN element ist, sondern nur einen wert, in einen "normalen" String um, damit ich diesem in einem skriptlet in einen konformen, entitätsbehafteten wert konvertieren kann?

ich stelle mir das sinngemäss so vor:

Code:
String lInputString = <html:errors property="text">;        // Wird wohl kaum stimmen...!

<%

HTMLEntities lHTMLEntities = new HTMLEntities();
String lOutputString = lHTMLEntities.htmlentities(lInputString);
out.println(lOutputString);

%>

besten dank in voraus!


grüsse,
jan
 
Zuletzt bearbeitet von einem Moderator:

HLX

Top Contributor
Code:
String lInputString = <html:errors property="text">;        // Wird wohl kaum stimmen...!

<%

HTMLEntities lHTMLEntities = new HTMLEntities();
String lOutputString = lHTMLEntities.htmlentities(lInputString);
out.println(lOutputString);

%>
Nein, das geht wirklich nicht. Mir fallen auf Anhieb erstmal 2 Möglichkeiten ein:

1. Du überschreibst das ErrorsTag mit einem eigenen benutzerdefinierten Tag. Hier müsstest du leider die komplette doStartTag()-Methode überschreiben, d.h. sie vollständig reimplementieren und die von dir oben beschriebene Konverertierung an geeigneter Stelle einbauen. Leider ist die Methode groß und delegiert nur an Singletons, so dass hierbei tatsächlich nur eine reimplementierung der Methode möglich ist.

2. Du überschreibst die Klasse 'ActionMessage' mit einer eigenen Message-Klasse. Hier fügst du die Konvertierung in die Methode 'getValues()' ein. Das ist m.E. die einfachste Variante. Sähe in etwa so aus:
Code:
public class ConvertableMessage extends ActionMessage {

    @override
    public Object[] getValues() {
          if(this.values != null) {
                Object[] result = new Object[values.length];
                for(int i = 0; i < values.length; i++) {
                    Object converted = lHTMLEntities.htmlentities(values[i]);
                    result[i] = converted;
                }
                return result;
           }
           return null;
     }
}
 

ruutaiokwu

Top Contributor
hallo HLX,

besten dank für deine antwort - doch leider funktioniert der unter punkt 2 beschriebene weg nicht.

die funktion getValues() der Klasse ActionMessage beinhaltet nicht die werte, welche im MessageResources.properties-file sind. vielmehr ist diese funktion für irgendwelche platzhalter (?) gedacht.

wenn ich die Klasse überschreibe, kann ich gerade so gut die getValues()-funktion folgendermassen gestalten:

[HIGHLIGHT="Java"]public Object[] getValues()
{
return null;
}[/HIGHLIGHT]

...und alles funktioniert noch immer gleich wie vorher!


das wäre fast zu schön gewesen, so einfach :-(

vorschlag 1 werde ich auch noch ausprobieren!


gruss, jan
 
Zuletzt bearbeitet von einem Moderator:

HLX

Top Contributor
Stimmt, mein Fehler. Die ActionMessages werden anhand des Schlüssels aus dem Resource-Bundle bezogen. Die values haben nur eine untergeordnete Bedeutung. Damit ist das Überschreiben der ActionMessages doch komplizierter als ich angenommen habe. Dann bleibt leider nur Weg 1 übrig - der sollte allerdings funktionieren.
 

ruutaiokwu

Top Contributor
...so, jetzt habe ich ne eigene tag-library erstellt, und zwar habe ich den "errors"-tag-eintrag aus der datei "struts-html" dorthin kopiert und angepasst. (z.b. tag-class etc.)

die tag-class für mein neues errors-tag heisst dann "MyErrorsTag" (extends ErrorsTag...)

bei allen funktionen, ausser doStartTag() rufe ich einfach die entsprechende funktion der superklasse ErrorsTag auf. (wie gehabt)

der inhalt der doStartTag()-funktion habe ich vom original kopiert & angepasst:

überall wo der string message zugewiesen wird von

message = xyz; // Was auch immer

nach

message = HTMLEntities.htmlentities(xzy);


klappt soweit gut, super sache. besten dank!


grüsse,
jan
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand API output Wert, statt ID Web Tier 19
A Dojo: Tab deaktivieren wenn in einem Listenfeld ein bestimmter Wert steht Web Tier 3
F JSF h:selectOneMenu Wert vorbelegen klappt nicht? Web Tier 2
G JSF Radio Button ValueChangeListener Wert wird nicht übernommen Web Tier 2
T Checkbox einbauen und wert in DB übertragen Web Tier 16
D JSF <rich:select, "Überprüfungsfehler: Wert ist ungültig" Web Tier 10
H JSF ActionListener wird ausgeführt, aber ändert den Wert nicht. Web Tier 7
T Seam-Projekt Eingabefeld mit "null"-Wert Web Tier 7
M SelectoneMenu Default Wert Web Tier 4
J JSF: Initialisieren einer Property mit Wert? Web Tier 5
D JSF: locale verliert Wert nach Navigation Web Tier 6
E Wert aus JSF-Selectonemenu in Textfeld schreiben Web Tier 4
G wert für hiddenfield per javascript setzten Web Tier 4
G WebSeite hinter einem Login auslesen Web Tier 8
I HTML nach Image Web Tier 1
F Formular nach erfolgreichem Login ausblenden Web Tier 0
J Session ist nach Klick auf Zurück-Button wieder aktiv Web Tier 3
N RequestDispatcher: include-Aufruf einer jsp scheitert nach mehreren forward-Aufrufen Web Tier 1
J Suche nach einem Webframework Web Tier 5
A Faces Context nicht mehr erreichbar nach Servlet Aufruf Web Tier 1
S Rendern einer Komponente nach actionListener Web Tier 2
A Wartezeit nach Tomcat start wegen Servlets zu hoch Web Tier 2
F JSF - Submit nach Validation-Failed Web Tier 6
W JSF Komisches Verhalten nach Login per Realm Web Tier 4
J Nach SVN-Update alle Beans resolved to null Web Tier 3
V JSF oncomplete-Attribut nach action-Attribut auswerten Web Tier 3
K JSP String[] Array nach Javascript Web Tier 4
M JSF Dialog nur nach erfolgreicher Action schließen Web Tier 4
R Errorpage nach ViewExpiredException Web Tier 7
T Seam-Komponenten oder Java Bean soll direkt nach Appserver-Start "leben" Web Tier 4
P JSF Ajax refresh nach Linkklick Web Tier 4
M JSF Kein Zugriff auf ManagedBeans, nach JSF Migration von 1.2 nach 2.0 Web Tier 4
T JSF URL "hängt nach" - warum? Ausblenden möglich? Web Tier 4
T JSF ViewScoped - Zustand verliert sich nach Seitenaktualisierung Web Tier 8
F Migration eines CMS von PHP nach JAVA Web Tier 3
K Bilder nach dem Upload nutzen Web Tier 10
J Memory Leak in Servlet nach längere Laufzeit Web Tier 6
C Formulardaten der Reihe nach auslesen Web Tier 5
E JSF Datatable erst nach Buttonklick anzeigen Web Tier 2
S Webapp und mysql. mysql verliert die verbindung nach langer zeit Web Tier 6
E CSS wird nach RequestDispatcher.redirect nicht mehr geladen Web Tier 7
U SessionAttribut nach j_security_check setzen Web Tier 3
F Redirect nach Aufruf einer JSP Web Tier 5
S [SelectItems value(herkunft bean)] in [UI:repeat] lädt daten nicht neu nach Web Tier 3
hdi File Upload erst nach Prüfung Web Tier 4
D JSF: Best Practice "Session invalidate nach Schließen des Browsers"? Web Tier 3
D Die ewige Suche nach dem richtigen Web-Framework Web Tier 34
M Properties der JSP nach input-result leer (Struts 2) Web Tier 2
S Attribute in Objektliste nach gecheckten Checkboxen setzen Web Tier 4
T Liste nach Anfangsbuchstaben getrennt ausgeben? Web Tier 2
Q browserfenster schließen nach HTTP-Authentifizierung Web Tier 3
T Selectbox nach klick submit Web Tier 1
G Seitenumbruch nach x Elementen Web Tier 3
M Authentifizierung über PhaseListener je nach Seite Web Tier 11
L Argumentübergabe von JSP nach Applet Web Tier 4
F nach Update auf RichFaces 3.2.0 Fehlermeldungen Web Tier 5
I servlet: init wird auch nach ServletException aufgerufen Web Tier 3
S JSF: Ändern von CSS Styles in commandLink nach Klick Web Tier 4

Ähnliche Java Themen

Neue Themen


Oben