質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

1回答

2947閲覧

【Apache Tiles3】Tiles3で文字化け問題

isacRu

総合スコア64

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2016/08/01 02:57

【問題になっていること】
以下のようにTiles設定ファイル(tiles-config.xml)でベースレイアウトを宣言し、そしてベースレイアウトから派生し、記述したログイン画面とトップ画面を宣言しました。
tiles-config.xml

xml

1<?xml version="1.0" encoding="UTF-8" ?> 2<!DOCTYPE tiles-definitions PUBLIC 3 "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" 4 "http://tiles.apache.org/dtds/tiles-config_3_0.dtd"> 5<tiles-definitions> 6 7 <!-- ベースレイアウト --> 8 <definition name="baseLayout" template="/WEB-INF/layouts/baseLayout.jsp"> 9 <put-attribute name="title" value="" /> 10 <put-attribute name="header" value="/WEB-INF/layouts/header.jsp" /> 11 <put-attribute name="menu" value="" /> 12 <put-attribute name="body" value="" /> 13 <put-attribute name="footer" value="/WEB-INF/layouts/footer.jsp" /> 14 </definition> 15 16 <!-- ログイン画面 --> 17 <definition name="login" extends="baseLayout"> 18 <put-attribute name="title" value="ログイン画面" /> 19 <put-attribute name="body" value="/WEB-INF/views/login.jsp" /> 20 </definition> 21 22 <!-- トップ画面 --> 23 <definition name="top" extends="baseLayout"> 24 <put-attribute name="title" value="トップ画面" /> 25 <put-attribute name="body" value="/WEB-INF/views/top.jsp" /> 26 </definition> 27 28</tiles-definitions>

以下のソース(login.jsp)のように日本語の含んだformタグを宣言したら、文字化けしてしまいました。
login.jsp

JSP

1<form method="POST" 2 action="${pageContext.request.contextPath}/top" 3 class="form-signin"> 4<!-- <h2 class="form-heading">ログイン</h2> --> 5 <div class="form-group"> 6 <input name="username" type="mail" class="form-control" placeholder="Username" autofocus="true" /> 7 <br/> 8 <input name="password" type="password" class="form-control" placeholder="Password" /> 9 <span>${error}</span> 10 <br/> 11 12 <button class="btn btn-lg btn-primary btn-block" type="submit">ログイン</button> 13 <h4 class="text-center"> 14 <a href="${pageContext.request.contextPath}/top">パスワード忘れた場合</a> 15 </h4> 16 </div> 17</form>

実行結果
実行結果

【行った対策・試したこと】
・web.xmlにフィルターをかけた
web.xml

xml

12 <filter> 3 <filter-name>characterEncodingFileter</filter-name> 4 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 5 <init-param> 6 <param-name>encoding</param-name> 7 <param-value>UTF-8</param-value> 8 </init-param> 9 <init-param> 10 <param-name>forceEncoding</param-name> 11 <param-value>true</param-value> 12 </init-param> 13 </filter> 14 <filter-mapping> 15 <filter-name>characterEncodingFileter</filter-name> 16 <url-pattern>/*</url-pattern> 17 </filter-mapping> 18

・実行したウェブブラウザでソースを参照し、エンコードを確かめた(UTF-8になっていた)

・ligin.jspの一番上の行のところに

html

1<head> 2<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 3</head>

を追加してみた。

・ベースレイアウト(baseLayout.jsp)のbodyタグの中に日本語を記述してみた(文字化けにならず、実行結果が日本語になっていた)

【質問】
以上の四項目は試したが、原因がわからず文字化けした実行状態のままです。原因または対策がわかる方教えてもらえると嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

ベースレイアウトから派生したJSPファイル(login.jspやtop.jsp)の一番上の行に

jsp

1<%@ page language="java" contentType="text/html; charset=utf8" 2 pageEncoding="utf8"%>

を記入することで、文字化けは防げました。しかしここで問題となるのが、各JSPファイルに上記のソースを必ず記述しなければならない。これは非常に面倒で非効率的です。

そこで、ウェブコンテナの起動時にJSPのインクルードファイルをまとめて読み込むという便利な機能があるそうです。include.jsp(名前はなんでもいいけど)を作成し、利用したいタグライブラリをすべて記述します。
そして最後にweb.xmlのところに
web.xml

xml

1<jsp-config> 2<jsp-property-group> 3<url-pattern>*.jsp</url-pattern> 4<el-ignored>false</el-ignored> 5<page-encoding>UTF-8</page-encoding> 6<scripting-invalid>false</scripting-invalid> 7<include-prelude>/WEB-INF/views/include.jsp</include-prelude><!-- include.jspファイルがある場所を記述 --> 8</jsp-property-group> 9</jsp-config>

と記述することでJSPのヘッダ部分はtaglibなどで煩雑せず、他のJSPファイルに同じヘッダーを記述しなくてすむようです。。。が、今はエラーが起きてなかなかうまく行きません。

以上、質問の内容に関しては解決いたしました。

投稿2016/08/01 04:27

isacRu

総合スコア64

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問