アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

Java6のサーブレット内で、半角の&(アンド)文字を
String属性の変数であるstrMessageにセットした上で、
その文字データを、
request.setAttribute("err_message", strMessage);
this.getServletContext().getRequestDispatcher(
"/WEB-INF/jsp/errorMessage/FormError.jsp").forward(
request, response);
としてセットすると、JSP画面上では、

&

という文字で、Webブラウザ上に表示されてしまいます。

これを正しい半角の&(アンド)文字で表示させるには、
Javaのサーブレット内において、
どのように値をセットすればよろしかったでしょうか?

以上になります。
よろしくお願いいたします。

A 回答 (3件)

><c:out value="${fn:escapeXml(err_message)}" />


c:outで出力するときには、デフォルトでエスケープ処理されます。
(escapeXml="false"とすればエスケープ処理はされません。)
この記述ではfn:escapeXmlでエスケープ処理した文字列をさらにエスケープ処理することになります。
つまり、
& → &amp; →&amp;amp;
となるため、「&amp;」と表示されてしまうのです。
ですので、
<c:out value="${err_message}" />
とすればいいです。
    • good
    • 0
この回答へのお礼

「yamada_g」様

お世話になります。
お礼のレスポンスが遅くなってすみません。

先週、ご回答いただきましたように、
私の方で、つい先ほど、
<c:out value="${err_message}" />
として試したところ、
半角の&(アンド)文字を、無事に
JSP画面上に表示することが出来ました。

丁寧なご回答をいただきまして、
本当に助かりました。

また機会がございましたら、
よろしくお願い致します。
ありがとうございました。

お礼日時:2011/04/18 17:45

それはサーブレットでの問題ではなく、画面表示時のエスケープ処理の問題です。


JSPのソースも記載した方がいいと思いますよ。

この回答への補足

了解いたしました。
JSPのソースを以下に添付いたします。

<%@ page session="false" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="../error/SystemError.jsp" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>システムエラー画面</title>
<link rel="stylesheet" type="text/css" href="./style.css">
</head>
<body>
<h1>入力エラー</h1>
<p>
入力された内容に対して、次のエラーが発生しました。<br>
</p>
<ul><c:out value="${fn:escapeXml(err_message)}" /></ul>
<a href="javascript:history.back()">戻る</a><br />
</body>
</html>

以上になります。
よろしくお願いいたします。

補足日時:2011/04/15 17:29
    • good
    • 0
この回答へのお礼

お世話になります。
上記No3のお礼入力で、まとめてお礼申し上げますので、
宜しくお願い致します。

お礼日時:2011/04/18 17:39

JSP側で「&amp;」に変換していませんか?


ブラウザに「&amp;」って表示されるってことはブラウザのソース表示したら
「&amp;amp;」になっているはずですが。
そう考えると2回変換していると思われます。
途中のソースがないのでなんとも分かりませんが。
    • good
    • 0
この回答へのお礼

「tegra」様

このたびは、ご回答いただきまして、
本当にありがとうございました。
大変参考になりました。

お礼日時:2011/04/18 17:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!