Sonderzeichen (Umlate) in JSF Seiten

rwe aus Hamburg

Grünschnabel
Hallo

ich bin ein relativer Neuling im Bereich von JSF und XHTML habe aber bereits einige Erfahrung mit Java (einige Jahre). Umso mehr hat mich verwundert, dass ich mit meiner Testanwendung Probleme mit den deutschen umlauten habe.
Beispiel:
Eingabe meiner Daten
ScreenShot 003 Personverwaltung Bearbeiten - Mozilla Firefox.png

Und die Ausgabe in einer anderen View
ScreenShot 004 Personverwaltung Ansehen - Mozilla Firefox.png

ich habe folgende Schritte bereits (ohne Erfolg) versucht:
web.xml
Code:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  <session-config>
    <session-timeout>
      30
    </session-timeout>
  </session-config>
  <welcome-file-list>
    <welcome-file>faces/index.xhtml</welcome-file>
  </welcome-file-list>
  <filter>
    <filter-name>UTF8Filter</filter-name>
    <filter-class>de.hamburg.faces.UTF8Filter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>UTF8Filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

Die passende JavaKlasse UTF8Filter sieht so aus:
Code:
package de.hamburg.faces;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class UTF8Filter implements Filter {

  @Override
  public void init(FilterConfig config) throws ServletException {
  }

  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    chain.doFilter(request, response);
  }

  @Override
  public void destroy() {
  }
}

in meinem template.xhtml
HTML:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core">
  <f:view contentType="text/html" encoding="UTF-8"/>
  <h:head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>#{headline}</title>
    <!--  more code here - for the template include sections -->
  </h:head>
  <h:body>
  </h:body>
</html>

Der Quellcode zur Eingabe der Daten sieht folgendermaßen aus:
HTML:
          <h:outputLabel for="person_salutation" value="#{bundle.person_salutation}:" class="tbl_label"/>
          <h:panelGroup id="person_salutation_current" class="tbl_input">
            <h:selectBooleanCheckbox id="person_salutation" value="#{personController.selected.female}">
              <f:ajax event="click" render="person_salutation_current"/>
            </h:selectBooleanCheckbox>
            <h:outputLabel value="#{bundle.person_salutation_female}"    rendered="#{true == personController.selected.female}"/>
            <h:outputLabel value="#{bundle.person_salutation_male}"      rendered="#{false == personController.selected.female}"/>
            <h:outputLabel value="#{bundle.person_salutation_undefined}" rendered="#{null == personController.selected.female}"/>
          </h:panelGroup>

          <h:outputLabel for="firstname" value="#{bundle.person_firstname}:" class="tbl_label"/>
          <h:inputText id="firstname" value="#{personController.selected.vorname}" converter="tt.StringConverter" class="tbl_input">
            <f:attribute name="code" value="UTF8"/>
          </h:inputText>

          <h:outputLabel for="lastname" value="#{bundle.person_lastname}:" class="tbl_label"/>
          <h:inputText id="lastname" value="#{personController.selected.nachname}" converter="tt.StringConverter" class="tbl_input">
            <f:attribute name="code" value="UTF8"/>
          </h:inputText>

((Unnützen Kommentarschleim habe ich entfernt!))

Die Daten werden bereits an die Validatoren und Convertern falsch übergeben.
Wie erreiche ich, dass meine Daten richtig in meine Java Umgebung weitergereicht werden?
Ich danke für Deine Unterstützung!

(Umgebung Java 7; GlassFish Open Source Edition 4.0)
 
Zuletzt bearbeitet von einem Moderator:

rwe aus Hamburg

Grünschnabel
So Ihr lieben - ich habe das Problem selber gelöst! :D
Zuerst meine Analyse: offensichtlich wurden die Formulardaten vom Browser nicht im UTF-8 Format an die Anwendung übertragen. Dies habe ich im FireFox mit Hilfe des FireBug Plugins entdeckt (Danke an die Entwickler dieses Plugins!). Daraufhin habe ich mich auf diese Fähre gesetzt :google: und gemerkt, dass in der "glassfish-web.xml" entsprechende Einträge enthalten sein können...
Bei mir fehlte die "glassfish-web.xml" leide vollständig. Auch das einfache Einfügen dieser brauchte zwar noch keine Besserung, aber nachdem ich dort dann auch gesagt habe, dass die Parameter auch UTF-8 Encodiert möchte, klappte es auch mit dem Nachbarn ;-)
Hier meine aktuelle "glassfish-web.xml":
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app error-url="">
  <context-root>/myapp</context-root>

  <parameter-encoding default-charset="UTF-8"/>

  <class-loader delegate="true"/>

  <jsp-config>
    <property name="keepgenerated" value="true">
      <description>Keep a copy of the generated servlet class' java code.</description>
    </property>
  </jsp-config>
</glassfish-web-app>

Ich hoffe, ich erleichtere einem anderen hiermit die Fehlersuche und -Beseitigung! ;-)