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

お世話になります。

2フレームの画面(画面A,画面B)にて
次の操作を行った場合、
「+」が入ったパラメタがうまく送信されません

(1)画面Aに検索条件を入力
(2)画面Aの「検索ボタン」を押下
(3)該当する情報を画面Bに表示

普通は、
「検索ボタン」→サーブレット→画面Bのjsp
という順番ですが

今回作っているものは
「検索ボタン」→画面Bのjspを呼び出す→画面Bのjsp内で、条件取得クラスを呼ぶ

という作りです。

条件取得クラスを呼ぶ前に、入力された条件を
取得したいのですが、
入力条件に「+」が入っていると、「 (スペース)」に
変換されます。。。

例:入力条件「123+45」→「123 45」

原因・対処がおわかりの方、よろしくお願い致します
---------------------------------------------
【画面A→画面Bの呼び出し】
parent.画面B.location.href
= '画面B.jsp?KEY=' + 入力値


(alert()でurlを見てみると→「画面B.jsp?KEY=123+45」)

【画面Bでの入力値取得】
String key = request.getParameter("KEY");
(System.out.printlnで見てみると「123 45」になる)

----------------------------
【開発環境】
WinXP
Weblogic8.1
JDK1.4.2
Ecripse2

A 回答 (3件)

>入力条件に「+」が入っていると、「 (スペース)」に


変換されます。。。

遷移先の画面B.jspでrequest.getParameter("KEY");を呼んでいますが、
getParameterはURL(画面B.jsp?KEY=' + 入力値)をURLデコードしてから値を取り出すからです。
URLデコードすると+はスペースに置き換えられます。
つまり、デコードされる前提ならば、URLをエンコードして置かないといけません。
具体的には以下のような感じだと思います。

A.jsp
<%@page import="java.net.*"%>
<html>
<a href='b.jsp?key=<%= URLEncoder.encode("1+2") %>'>B.jsp</a>
</html>

B.jsp
<%@page import="java.net.*"%>
<html>
<%
out.println(request.getParameter("key"));
%>
</html>
    • good
    • 1
この回答へのお礼

potedoraさん、ご回答ありがとうございました。

ご指摘のとおり、URLEncoder.encode()を追加しましたら、うまくいきました!

具体的にソースまで書いていただき、
大変勉強になりました。

ありがとうございました!

お礼日時:2005/08/19 16:50

検索に日本語とかはいるなら str = URLEncoder.encode(str) とした方がいいですね。

    • good
    • 0
この回答へのお礼

php504さん、再びありがとうございます。
URLEncoder.encode()を追加致しました。
うまくいきました!

お礼日時:2005/08/19 16:39

+の代わりに%2Bを使えばいいと思います。


urldecode処理で+はスペースに変換され、%2Bは+に変換されるはずです
    • good
    • 0
この回答へのお礼

php504さん、ご回答ありがとうございます。

>urldecode処理で+はスペースに変換され
大変参考になりました!ありがとうございました

お礼日時:2005/08/19 16:15

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