# Zeichensatz Problem?



## mario87b (16. Okt 2012)

Hallo.

Ich bemerke folgendes merkwürdiges Verhalten. Ich habe eine kleine Testanwendung geschrieben, um das genauer zu checken.

JSF 2.x, Tomcat 7.0.14

Meine index.xhtml hat ein kleines Formularfeld mit zwei inputtext Elemeten. Das ganze UTF-8 codiert.

Die Seite wird per commandbutton action wiederum aufgerufen - entsprechenden Nav Eintrag in der faces-config.xml.

Die ManagedBean hat die entsprechenden Getter und Setter.

Gebe ich nun direkt nach dem Start der Anwendung Umlaute ein - etwa ööö, dann übergibt der Setter tatsächlich hyroglyphen Sonderzeichen. Die werden dann auch auf der Webseite dargestellt.

Aber jetzt kommt das merkwürdige. Gebe ich nun wieder ööö ein und drücke den Knopf, dann passt alles. In der ManageBean kommen die ööö an (seh ich im Debugger) und auf der Webseite passt es dann auch.

Die Fehlinterpretation kommt nur bei ersten Ausführen vor!!??

Hat jemand eine Idee?

Danke.






```
<?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:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        Hello from Facelets
        
        <f:view>
            <h:form>
            <h:panelGrid columns="2">
                <h:outputText value="Vorname:" />
                <h:inputText value="#{MB.vorname}" />
                <h:outputText value="Nachname:" />
                <h:inputText value="#{MB.nachname}" />
                
                <h:commandButton action="ok" value="send" /> 
        </h:panelGrid>
            </h:form>
            
        </f:view>
    </h:body>
</html>
```

ManagedBean

```
/**
     * @return the vorname
     */
    public String getVorname() {
        return vorname;
    }

    /**
     * @param vorname the vorname to set
     */
    public void setVorname(String vorname) {
        this.vorname = vorname;
    }

    /**
     * @return the nachname
     */
    public String getNachname() {
        return nachname;
    }

    /**
     * @param nachname the nachname to set
     */
    public void setNachname(String nachname) {
        this.nachname = nachname;
    }
```


----------



## F.S.WhiTeY (16. Okt 2012)

Kenn ich, ist so ne kleine JSF macke. Da hilft nur nen Filter:


```
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package *****;

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;

/**
 *
 * @author david
 */
public class EncodingFilter implements Filter
{
  /*
   * (non-Javadoc)
   *
   * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
   * javax.servlet.ServletResponse, javax.servlet.FilterChain)
   */
  public void doFilter(
    ServletRequest pRequest,
    ServletResponse pResponse,
    FilterChain pChain )
    throws IOException, ServletException
  {
    if ( pRequest.getCharacterEncoding() == null )
      pRequest.setCharacterEncoding("UTF-8");
    pChain.doFilter(pRequest, pResponse);
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.servlet.Filter#destroy()
   */
  public void destroy()
  {
  }

  /*
   * (non-Javadoc)
   *
   * @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
   */
  public void init( FilterConfig pFilterConfig )
    throws ServletException
  {
  }
}
```


[XML]
    <filter>
        <filter-name>EncodingFilter</filter-name>
        <filter-class>*****.EncodingFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>EncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
[/XML]


----------



## mario87b (17. Okt 2012)

Hallo.

Danke für die Hilfe, aber irgendwas stimmt noch nicht.

Ich hab die Filter Klasse entsprechend erstellt.


```
public class EncodingFilter implements Filter {

    
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        
        if (request.getCharacterEncoding() == null) {
            request.setCharacterEncoding("UTF-8");
            chain.doFilter(request, response);
        }
        
        
        //throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void destroy() {
        //throw new UnsupportedOperationException("Not supported yet.");
    }
    
}
```

Wenn ich allerdings dann starte, bekomme ich bei den Übergabe der Eingabewerte in die MAnagedBean eine Fehlermeldung.

Eine ELException?


----------



## mario87b (17. Okt 2012)

OK, jetzt funktioniert es.

Eigene Dummheit, man sollte Code den man zum Debuggen einfügt auch wieder rechtzeitig löschen bzw. auskommentieren.

DANKE!!


----------

