Hi Victor,
this is no special JSF issue. But anyway. I had the same problem. You have to
set the correct encoding before the first character is read from the stream.
My solution was writing a filter which is put as the very first instance to
handle the request. Example:
public class CharacterEncodingFilter implements Filter
{
private String encoding;
private FilterConfig filterConfig;
/**
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig fc) throws ServletException
{
this.filterConfig = fc;
this.encoding = filterConfig.getInitParameter("encoding");
}
/**
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,
javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException
{
// Before reading the first information we have to set the
encoding to
// utf-8. Otherwise the characterencoding is lost and special
characters
// as for example "€" are misinterpreted.
req.setCharacterEncoding(encoding);
chain.doFilter(req, resp);
}
/**
* @see javax.servlet.Filter#destroy()
*/
public void destroy()
{
}
}
In your web.xml:
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.bla.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
and the filtermapping as FIRST filtermapping:
<!-- EncodingFilter is only needed together with request control filter.
Otherwise
the encoding is not correct -->
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/jsp/*</url-pattern>
</filter-mapping>
Hope it helps,
Andrej
-----Ursprüngliche Nachricht-----
Von: Victor H De la Luz [mailto:[email protected]]
Gesendet: Donnerstag, 26. Februar 2009 23:58
An: [email protected]
Betreff: faces+mysql+tomcat and error in codification
Hi!
I have a problem very funny:
I get my data from
<h:inputText value="#{blogBean.blogPage.title}" />
I have in the header of my .xhtml like:
<?xml version="1.0" encoding="utf-8"?>
Now, I have Mysql 5.0.51a with
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
and the collation of the table "blog" like
utf8_unicode_ci
I have the all the data into the database with utf8 codification.
The problem is:
When I get the data from the input text I get a wrong text
with special characters, for example ó is substituted for ó.
Then when I store the data in the database I write the ó character.
The funny is that before I had this configuration:
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
with the codification latin1 for all the database
and utf-8 codification for the .xhtml.
Now, with this configuration, when I get the data from the inputText
the data is stored correctly in the String variable and in the
database but when I
get the data from the database this is displayed wrong
(the same problem: ó is replaced by ó and etc when I get the data
with title= rs.getString("title"); )
I tried to configure the connection to use explicit character encoding
but this method fail, then I tried of get the data like
byte[] stringValue = rs.getBytes("title");
String str = new String(stringValue,"utf-8");
but fail too, I changue the codification to latin1, ISO..., etc but
always fails.
In resume, the funny is that with utf8 codification in all the
aplication the data is corrupted
when I get the data from inputtext and if the codification is latin1
in the db and utf8
in the aplication then fails when I get the data from the database.
Im using: Linux Debian Lenny, mysql 5.0.51a-24-log (Debian),
myfaces-impl-1.2.5.jar
and mysql-connector-java-5.1.5-bin.jar.
Thanks in advanced!
--
ItZtLi