10MinuteMail and Form Submission Charsets in Seam/JSF

I launched a minor update to 10MinuteMail.com last night. It contained:

  1. Changed the mail domain to owlpic.com
  2. Updated the Russian language translation (thanks to Vladimir)
  3. Fixed a bug where replying to an e-mail using a non-latin character set would result in an unreadable e-mail (also thanks to Vladimir for pointing this out)

This last issue was an odd one to fix, so I wanted to document it here (although the same fix can be found elsewhere on the net).

10MinuteMail.com is pretty well internationalized. The site content is translated into over 30 languages and the pages are served as UTF-8. Incoming e-mails are also displayed using UTF-8 and display non-latin character sets correctly. However, until this latest release, if you replied to an e-mail using non-latin characters, the resulting e-mail contained gibberish instead of the correct characters.

I started off by adding UTF-8 as the specified character set for outgoing e-mails. That didn’t help. I added UTF-8 encoding declaration attribute to the form element. That didn’t help. Finally after some frustration, googling, and trying a ton of things, I discovered that for some reason, and I”m not sure if the bug is in JBoss, JSF, Seam, or where exactly, but you have to set the request objects character encoding programmatically for each request, otherwise it will use the wrong encoding on the form contents and you end up with gibberish. The easiest way to solve this that I’ve found so far is to create a small Servlet Filter that sets the encoding on the request, and add that filter in before your Seam filter in your web.xml. It worked for me.

The filter:

[fusion_builder_container hundred_percent=”yes” overflow=”visible”][fusion_builder_row][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][java]
package com.digitalsanctuary.seam;

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;

/**
* The Class UTF8Filter.
*/
public class UTF8Filter implements Filter {

/** The Constant UTF_8. */
private static final String UTF_8 = "UTF-8";

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

/**
* Do filter.
*
* @param pRequest
* the request
* @param pResponse
* the response
* @param pChain
* the chain
* @throws IOException
* Signals that an I/O exception has occurred.
* @throws ServletException
* the servlet exception
* @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 {
pRequest.setCharacterEncoding(UTF_8);
pChain.doFilter(pRequest, pResponse);
}

/**
* Inits the.
*
* @param arg0
* the arg0
* @throws ServletException
* the servlet exception
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig arg0) throws ServletException {
}

}
[/java]

An excerpt of web.xml:

[/fusion_builder_column][fusion_builder_column type=”1_1″ background_position=”left top” background_color=”” border_size=”” border_color=”” border_style=”solid” spacing=”yes” background_image=”” background_repeat=”no-repeat” padding=”” margin_top=”0px” margin_bottom=”0px” class=”” id=”” animation_type=”” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”no” center_content=”no” min_height=”none”][xml]
….
<filter>
<filter-name>UTF8 Filter</filter-name>
<filter-class>com.digitalsanctuary.seam.UTF8Filter</filter-class>
</filter>

<filter-mapping>
<filter-name>UTF8 Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
<filter-name>Seam Filter</filter-name>
<filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>Seam Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
….

[/xml]

Does anyone have a better fix or know exactly why this happens?
[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]


Posted

in

,

by

Comments

3 responses to “10MinuteMail and Form Submission Charsets in Seam/JSF”

  1. Ferenc Avatar
    Ferenc

    Hi there, thanks for 10minute mail !
    Great and awesome work man !

    I have just one question; I want to donate but I can’t create a paypal account; but I can donate through IDeal (http://www.ideal.nl/?lang=eng-GB)

    Is it possible to donate some money, I really want to help you guys !!

    Greetings from The Netherlands..

    Ferenc.

    1. Devon Avatar

      Thanks! I’m really glad you like the site.

      Unfortunately it looks like I’d have to have an account with a European bank to use Ideal. I’ll happily settle for your words of thanks. Just nice to know people like it.

      Thanks!

      Devon

  2. Marc Anthony Avatar
    Marc Anthony

    Pls add FAVICON again.
    Thanks!

Leave a Reply

Your email address will not be published. Required fields are marked *

PHP Code Snippets Powered By : XYZScripts.com