アクションフォームの値をで書きだすと文字化けしてしまう

アクションフォームBeanはエンコード方式が指定されていても、それを確かめる前に値が格納されるため日本語を扱う場合は、文字化けが起こります。

アクションフォームクラスの中で、毎回エンコード処理を記述するのは面倒なので、フィルターという機能で解決しました。

参考記事:Javaの道:アクション・フォームBean

tomcatのサンプルプロジェクトにあるSetCharacterEncodingFilter.javaを使います。これを自分のプロジェクトに入れた後に、web.xmlで設定します。下記を記述して下さい。

<web-app>
    <filter>
        <!-- フィルタ名を記載します。 -->
        <filter-name>EncodeFilter</filter-name>
        <!-- フィルタ処理の際のクラスを指定します。 SetCharacterEncodingFilterクラスは filtersパッケージ内にあります。 -->
        <filter-class>filters.SetCharacterEncodingFilter</filter-class>
        <!-- パラメータ値にエンコード方式を指定します。 -->
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <!-- すべてのURLパターンでフィルタ処理が 行われるように指定します。 -->
    <filter-mapping>
        <filter-name>EncodeFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

 今回はUTF-8を指定しています。アクションフォームの値の文字コードを設定しても、それを表示するjsp側にも文字コードUTF-8と設定しないと文字化けは治りません。下記を記述しておきましょう。

<%@ page language="java" contentType="text/html; charset=UTF-8"%>