Toon posts:

[Java/Velocity] Hoe encoding en content type zetten?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zit op dit moment bij een klant te werken in een architectuur die gebaseerd is op Apache Velocity templating. Nu heb ik helaas encoding problemen die (volgens mij) zijn toe te schrijven aan het feit dat de server alles als "text/html" en "ISO-8859-1" verstuurt.

Ik heb gekeken in de VTL documentatie en allerlei searches gedaan naar encoding bij Velocity, maar alle oplossingen gaan uit van het aanpassen van de Velocity configuratie. Het probleem is echter dat ik alleen toegang heb tot de templates (view) en niet tot de achterliggende configuratie.

Ik ben er wel achter dat ik in de templates toegang heb tot een $request en $response object maar helaas heb ik niet genoeg verstand van Java om te weten wat ik daarmee zou kunnen. Helaas werkte iets simpels als $request.setCharacterEncoding('UTF-8') niet :+

Kan iemand mij een tip geven hoe ik de content-type op "text/xml" en de encoding op "UTF-8" kan zetten?

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Als de server netjes aangeeft hoe het zaakje gecodeerd is, dan behoort de ontvangende kant daar toch gewoon mee om te gaan?

Wie trösten wir uns, die Mörder aller Mörder?


Verwijderd

Topicstarter
Confusion schreef op woensdag 09 november 2005 @ 11:43:
Als de server netjes aangeeft hoe het zaakje gecodeerd is, dan behoort de ontvangende kant daar toch gewoon mee om te gaan?
Dat klopt. Het probleem is echter dat de ontvangende kant UTF-8 en text/xml verwacht omdat het verschillende server-side gegenereerde bestanden combineert tot een geheel. Als die bestanden dan verschillen in encoding en content-type zorgt dat voor problemen.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Als ik zo snel even kijk dan kun je methodes aanroepen met velocity.
Het gaat erom dat de client op de juiste manier omgaat met wat hij ontvangt, dus daar moet je de response voor gebruiken. De methode die je zoekt is addHeader en deze heeft twee parameters, een string die aangeeft welke header (meer info) je wilt setten en de tweede ook een string, die de waarde vertegenwoordigt, bijvoorbeeld "Content-Type" met als waarde "text/xml".

Ik hoop dat je hier verder mee komt.

Verwijderd

Topicstarter
That did the trick, thanks! Waar heb je die methode addHeader gevonden? Staat die ook in de documentatie of is het een standaard Java iets?

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Die komt uit de j2ee api documentatie voor HttpServletResponse. Tomcat maakt gebruik van een subset van de j2ee classes, met name diegenen die op een webcontainer van toepassing zijn. Een blik op de documentatie van Velocity was voor mij genoeg om te zien dat je methodes kan aanroepen met Velocity en samen met jouw TS was de link naar het response object snel gelegd.

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Verwijderd schreef op woensdag 09 november 2005 @ 11:45:
Dat klopt. Het probleem is echter dat de ontvangende kant UTF-8 en text/xml verwacht omdat het verschillende server-side gegenereerde bestanden combineert tot een geheel. Als die bestanden dan verschillen in encoding en content-type zorgt dat voor problemen.
Is het problematisch om 'verkeerd' gecodeerde bestanden aan de ontvangende kant naar UTF-8 omzetten? Het is al opgelost begrijp ik, maar was dat geen optie, of wilde je gewoon de moeite niet doen als het makkelijker kon?

Wie trösten wir uns, die Mörder aller Mörder?


Verwijderd

Topicstarter
Helaas is dat problematisch, ja. Ik heb slechts controle over één factor in het geheel: de .vm velocity templates. Het probleem bleek uiteindelijk meer bij de content-type te liggen (die default op text/html staat) dan bij de encoding. Vraag me niet waarom, daarvoor heb ik niet genoeg verstand van de materie.
code:
1
$response.addHeader("Content-Type", "text/xml")

loste mijn probleem op. :)
Pagina: 1