JSPのgetParameterのvalueを文字変数に代入する方法

このQ&Aのポイント
  • JSPのgetParameterを使用して取得した値を文字変数に代入する方法についてご質問です。具体的には、選択フィールドの値を文字変数に代入して表示したい場合の手順が知りたいです。
  • 質問の内容はJSPのgetParameterを使用して選択フィールドの値を取得し、文字変数に代入して表示する方法についてです。現在は数値のまま表示されてしまっており、値を文字に変換して表示する方法が知りたいです。
  • JSPのgetParamterを使用して取得した値は、デフォルトで数値のまま表示されます。しかし、文字として表示したい場合は、以下の手順で変換することができます。1) データを取得した後、getBytesメソッドを使用して文字エンコーディングを指定します。2) 取得したバイト列をStringクラスのコンストラクタに渡し、文字列に変換します。この変換を行うことで、文字として表示することができます。具体的なコード例も提示しましたので、参考にしてください。
回答を見る
  • ベストアンサー

JSPのgetParameterのvalueを文字

変数の宣言部分 String tmp2 = request.getParameter("person"); tmp2 = new String(tmp2.getBytes("8859_1"), "SHIFT-JIS"); 選択フィールド <p>人物名</p> <p class=""><select name="person"> <option value="0" selected>▼下記より選択</option> <option value="1" >あああ</option> <option value="2" >いいい</option> <option value="3" >ううう</option> 表示する箇所 <%= tmp2 %> というプログラムを書きましたが、 このままだと数値のまま取ってきますが、文字(value = 1なら「あああ」)を 取ってこさせるにはどうしたらいいですか?

  • Java
  • 回答数6
  • ありがとう数6

質問者が選んだベストアンサー

  • ベストアンサー
  • itu1989
  • ベストアンサー率44% (37/83)
回答No.6

すみません No5の回答が情報不足でした。 改めて 【Tomcat5.x未満 or 7.x以上】 <% request.setCharacterEncoding("Windows-31J"); %> 【Tomcat5.x以上 and 7.x未満の場合】 <% request.setCharacterEncoding("Windows-31J"); %> ※<form>のmethodがGETの場合、上記設定が無視されるようになっている。 ※<form>のmethodがGETの場合、server.xmlファイルの<connector>タグのuseBodyEncodingForURI属性をtrueに指定することで、setCharacterEncodingメソッドを有効にできます。 【setCharacterEncoding以外の方法】 パラメータを受け取ってから変換する <% String str = request.getParameter("param"); str = new String(str.getBytes("8859_1"), "Windows-31J"); %> <%= str %> そういえば、自分もnew Stringでやっていたのをさっき思い出しました(笑)

KAIJI-000
質問者

お礼

訂正有難うございます。こちらも試してみます。

KAIJI-000
質問者

補足

あまりにも亀レスなので、一旦ベストアンサーを選ばせていただきます。追加質問は別の形でさせていただきます。

その他の回答 (5)

  • itu1989
  • ベストアンサー率44% (37/83)
回答No.5

No4に補足の回答です。 ローカル環境にて事象を確認しました。 jspからリクエストを送る時のエンコード設定が原因だと思います。 正しい対処方法は知りませんが、とりあえずはjspファイルの上部に以下を記述して試してみて下さい。 <% request.setCharacterEncoding("Windows-31J"); %>

KAIJI-000
質問者

お礼

取り敢えず試してみます。

  • itu1989
  • ベストアンサー率44% (37/83)
回答No.4

No.2です 自分の環境でJSPだけでやってみましたが文字化けはしませんでした。 サーブレットで処理させてJSPに返してから表示を行っているのならサーブレットで文字コードを設定する必要があったかと思います。 下記のようにdoGet(またはdoPost)のHttpServletResponseオブジェクトのsetContentTypeで文字コードを設定してみて下さい。 public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html; charset=Windows-31J"); 後、他の回答者さんのやり方をして[Ljava.lang.String;@となっているのはsplitした結果を格納した変数をそのまま表示しようとしていませんか? split結果は配列なので、分割結果の文字列を取得するときは要素を指定してあげて下さい。 bbbbに格納されているのが"1,ああああ"の時、 String ttt2 = request.getParameter("bbbb"); String[] ttt22 = ttt2.split(","); ※ttt22[0]には"1" ※ttt22[1]には"ああああ" ※ttt22は配列のアドレスを示す 間違ってたらごめんなさい

KAIJI-000
質問者

お礼

回答有難うございます。少し検証してみます。

KAIJI-000
質問者

補足

>サーブレットで処理させてJSPに返してから表示を行っている 今はHTMLに<form action="http://localhost:8080/自分のフォルダ/ jspファイル名" method="GET"> を入れて後はjspだけで処理させようとしているだけです。 提案されたやり方で、 HTML側 <p class=""><select name="prefecture"> <option value="0" selected>▼下記より選択</option> <option value="1,aaaa" >aaaa</option> <option value="2,bbbb" >bbbb</option> jsp側 String ttt2 = request.getParameter("bbbb"); String[] ttt22 = ttt2.split(","); としてやってみたところ、 1,?k?C???¬?M?s となってしまっています。 1だけはちゃんと表示されているようですが。 サーブレットのjavaファイルは作っていません。 作ったほうがいいでしょうか?

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.3

こんにちは。 どう表示したらそうなりましたか? プログラムの質問をする際は、 何をどうしたら、こうなりました。 やりたいことはこうです。 ってのを書かないと無駄なやり取りが増えます。

KAIJI-000
質問者

お礼

何度もすいません!

KAIJI-000
質問者

補足

JSPファイルの<html>のタグの前に <% String ttt1 = request.getParameter("aaaa"); String ttt2 = request.getParameter("bbbb"); String[] ttt22 = ttt2.split(","); String ttt3 = request.getParameter("cccc"); String ttt4 = request.getParameter("dddd"); %> のプログラムをややそのまま入れ、 HTML側で <option value="1,あああ">あああ</option> <option value="2,いいい">いいい</option> とし, HTMLのテキストフィールドやオプション選択などをして、 サーブレットの処理結果画面を見ると HTML側のname で指定している"bbbb" の部分が [Ljava.lang.String;@3caa4b?¬?M?s と出ています。 他のやつ(ttt1・3・4)は今まで通りの文字化け状態です。 アルファベットならそのまま正常に表示されています。

  • itu1989
  • ベストアンサー率44% (37/83)
回答No.2

<option>で渡される値はvalue値だけなので表示用文字の取得はNo1さんの回答のようにvalue値に含まないと出来ないと思います。 もしくは<option>タグを構成する段階でJavaの配列やHashMapを使用すれば可能になると思います ------------------------------------------------------------------ 【変数およびMap宣言】 <% TreeMap<String,String> map = new TreeMap<String,String>(); map.put("1", "あああ"); map.put("2", "いいい"); map.put("3", "ううう"); // パラメータを取得 String tmp = request.getParameter("person"); tmp = new String(tmp.getBytes("8859_1"), "SHIFT-JIS"); // パラメータの値をKeyとしてmapからデータを取得 tmp = map.get(tmp); %> 【選択フィールド】 <select name="person"> <option value="0">▼下記より選択</option> <% for(Map.Entry<String,String> e: map.entrySet()){ out.println("<option value=\"" + e.getKey + "\">" + e.getValue + "</option>"); } %> </select> 【表示箇所】 <%= tmp %> ------------------------------------------------------------------ (1)TreeMapにてリストを作成(TreeMapはkeyでソート行ってくれるので便利) (2)受け取ったパラメータをmapに照合する (3)選択フィールド構成(固定部分は直接。可変部はロジックで!) (4)表示箇所。(2)でmapのkeyに存在する値があれば対象のvalueが表示される Mapがわからなければ配列をグルグル回しても良いと思うよ(^ω^)

KAIJI-000
質問者

お礼

回答有難うございます。HashMapは知りませんでした。一度試して、補足をさせていただくかもわかりません。

KAIJI-000
質問者

補足

HTML側に <select name="person"> <option value="0">▼下記より選択</option> 中略 <option value="99" >その他(外国)</option> <% for(Map.Entry<String,String> e: map.entrySet()){ out.println("<option value=\"" + e.getKey + "\">" + e.getValue + "</option>"); } %> </select> JSP側で、 <% String ttt 1 = request.getParameter("aaaa "); String ttt 3 = request.getParameter("cccc""); String ttt 4 = request.getParameter("dddd "); TreeMap<String,String> map = new TreeMap<String,String>(); map.put("1", "あああ"); map.put("2", "いいい"); map.put("3", "ううう"); // パラメータを取得 String ttt2 = request.getParameter("bbbb"); ttt 2 = new String(ttt 2.getBytes("8859_1"), "SHIFT-JIS"); // パラメータの値をKeyとしてmapからデータを取得 ttt 2 = map.get(ttt 2); %> としましたが、相変わらず文字化けのままでした。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 JavaScriptを利用するか <option value="1,あああ">あああ</option> <option value="2,いいい">いいい</option> として String person = request.getParameter("person"); これで"1,あああ"という文字列が取得できます。 String[] persons = person.split(","); こうすることで persons[0]に"1" persons[1]に"あああ" が入ってきます。

KAIJI-000
質問者

お礼

早速回答有難うございます。 試してみます。JavaScriptも検討します。

KAIJI-000
質問者

補足

[Ljava.lang.String;@ebcdbb という文字化けを起こしてしまいました。

関連するQ&A

  • 文字化けで困っています。

    文字化けで困っています。 下記のJSPからrequest.getParameterで他のJSPに取得させようとしているのですが、文字化けが起こってしまいます。どなたか、考えられる原因をご教授お願い致します。(eclipse 3.5) <%@page contentType="text/html; charset=Shift-JIS"%> <html:form action="/**/***"> <select name="color_name" > <option value="赤" selected>赤</option> <OPTION value="青">青</option> <OPTION value="黄">黄</option> <OPTION value="緑">緑</option> </select></TD> </html:form> -------------------------------------------------------- <%@page contentType="text/html; charset=Shift-JIS"%> <%=request.getParameter("color_name") %>

    • ベストアンサー
    • Java
  • request.getParameter()

    以下のような複数選択可能なメニューを用意しました。 <form action=...> <select name="opt" size=1 multiple> <option value>first <option value>second <option value>third </select><p> <input type="submit"> firstとsecondを選択してボタンを押した時に、 servletのプログラムの中で、 String option=request.getParameter("opt"); と実行したら、二つのオプション(first,second)を取ってきてくれるんですか? それとも、配列で取得しないとだめなんですか?

  • 文字コード

    少し、聞かせてください。 今、WEBアプリケーションを作っています。 HTMLからのリクエスト文字を受け取りServletで処理を考えています。 そこで、 String para = request.getParameter(para); String param = new String(para.getBytes("8859_1","JISAutoDetect"); で、8859_1,Shift_JIS,EUC-JP,ISO-2022-JP の Unicode 変換することが できるのは、分かりました。 では、この HTML からのリクエスト文字が、どのタイプの文字コード でかかれているかを検出できるのでしょうか? 自分では、バイト列をつかさどる方法が浮かぶのですが・・・。 HPでもかまいませんので、教えてください。

    • ベストアンサー
    • Java
  • 登録ボタンを押すとjspファイルが開かれてしまう

    環境は IE 8 MySQL 5.5 Java 6 です。 form method="POST" で取得したデータをDBに登録させたいと思いますが、 登録ボタンを押すとなぜかファイルを開く・保存の画面が出てしまいました。 どの部分がおかしいのでしょうか? HTML側 <html> <head> <title>情報登録</title> </head> <body> <h1 style="background:#cccccc">情報登録</h1> <form method="POST" action="p_insert.jsp"> <table border="0"> <tr> <th style="color:#FFffFF;background:#0086b2;text-align:right;">名前</th> <td><input type="text" name="nam" size="35" /></td> </tr> <tr> <th style="color:#FFffFF;background:#0086b2;text-align:right;">URL</th> <td><input type="text" name="url" size="100" /></td> </tr> <tr> <th style="color:#FFffFF;background:#0086b2;text-align:right;">入手日</th> <td><input type="text" name="gdate" size="14" />(YYYY/MM/DD)</td> </tr> <tr> <th style="color:#FFffFF;background:#0086b2;text-align:right;">ランク</th> <td> <select name="grade"> <option value="5">大変良い</option><option value="4">良い</option> <option value="3">普通</option><option value="2">悪い</option> <option value="1">非常に悪い</option> </select> </td> </tr> <tr> <th style="color:#FFffFF;background:#0086b2;text-align:right;">メモ</th> <td><input type="text" name="memo" size="100" /></td> </tr> <tr> <td colspan="2"> <input type="submit" value="登録" /> <input type="reset" value="取消" /> </td> </tr> </table> </body> </html> JSP側 <%@ page contentType="text/html; charset=Shift_JIS" import="java.sql.*,java.io.*" %> <%! public String strEncode(String strVal) throws UnsupportedEncodingException{ if(strVal==null){ return (null); }else{ return (new String(strVal.getBytes("ISO-8859-1"),"JISAutoDetect")); } } %> <% Class.forName("org.gjt.mm.mysql.Driver"); Connection db=DriverManager.getConnection( "jdbc:mysql://localhost:3306/データベース名" + "?user=jsp10&password=jsp10&useUnicode=true&characterEncoding=Shift_JIS"); Statement sttSql=db.createStatement(); sttSql.executeUpdate( "INSERT INTO aaalist(name,url,gdate,grade,memo) VALUES('" + strEncode(request.getParameter("name")) + "','" + request.getParameter("url") + "','" + request.getParameter("gdate") + "'," + request.getParameter("grade") + ",'" + strEncode(request.getParameter("memo")) + "')"); sttSql.close(); db.close(); response.sendRedirect("p_insert.html"); %>

    • ベストアンサー
    • Java
  • jspでデータベースにレコード追加

    表題のことをしたいのですが、 「HTTPステータス 500 - An exception occurred processing JSP page」という エラー表示がされてしまいます。 名前、会社、住所というテキストボックスに入力して 決定ボタンを押下するとデータベースにレコード追加されるのを 目的としていますが、下記のコードで間違いはありますでしょうか? ----------------------------------------------- <%@ page language="java" %> <%@ page import="java.sql.*"%> <%@ page contentType="text/html; charset=Shift_JIS"%> <% request.setCharacterEncoding("Shift_JIS"); String strName=request.getParameter("name"); String strCompany=request.getParameter("company"); String strAddress=request.getParameter("address"); Class.forName("com.mysql.jdbc.Driver"); String strConn= "jdbc:mysql://localhost/***" + "?user=****&password=****" + "&useUnicode=true&characterEncoding=Shift_JIS"; Connection conn = DriverManager.getConnection(strConn); Statement stmt = conn.createStatement(); String strSql="insert into person (name,company,address) values('"+ strName + "'," + strCompany + "'," + strAddress + ")"; int result= stmt.executeUpdate(strSql); stmt.close(); conn.close(); %> <%//一覧ページにforward%> <jsp:forward page="****.jsp"/> ----------------------------------------------- >int result= stmt.executeUpdate(strSql); の行でエラーが出ているっぽいのですが。。。 TomcatとMySQLを使用しています。 ※環境など情報が不足していましたら、そちらもご指摘ください。  開発勉強中で、まだ理解が足りていない所が多数あります。

    • ベストアンサー
    • Java
  • JBuilderの文字化け

    JBuilderでサーブレットでパラメータを渡す際に日本語が文字化けしてしまいます。 Enumeration enum=request.getParameterNames(); while(enum.hasMoreElements()){ String key=(String)enum.nextElement(); String value=new String(request.getParameter(key).getBytes("8859_1"),"JISAutoDetect"); out.println(value); } ソースは上記のようになっていますが日本語を表示できません。直す方法がわかる方どうかよろしくお願いします。

  • JSP→JSP フォームチェック

    困っているので助けてください。 まずプログラムの説明をさせてもらいます。 JSPからfromをつかってJSPにフォーム情報を送ります。 プログラムはこんな感じです。 <form action="abcdefg.jsp" method="post"> <input type="hidden" name="abc" value="abc"> <input type="hidden" name="def" value="def"> <input type="checkbox" name="aa" value="aa"> <input type="checkbox" name="bb" value="bb"> <input type="checkbox" name="cc" value="cc"> <input type="submit" value="次へ"> </form> これをabcdefg.jspで受け取る場合 String hidden_abc = request.getParameter("abc"); String hidden_def = request.getParameter("def"); とhiddenは必ず値が入っているのでこれで受け取れるのですが チェックボックスは選択しているかどうかわからないので上の記述では だめなようなのですがどのようなプログラムを書いたらいいのですか? 説明がうまく出来なく申し訳ないです。よろしければ教えてください。

    • ベストアンサー
    • Java
  • [JAVA]Servlet → JSP 文字化け発生!

    こんばんわぁ♪ サーブレットにおきまして・・・ ErrMsg = "【認証エラー】MSP情報(キーコードorパスワード)が違います!"; response.sendRedirect("../F_LogInOut.jsp?ErrMsg=" + ErrMsg); とJSPに接続します。 JSPでは・・・ <%@ page contentType="text/html; charset=Shift_JIS" %> とし、 <% if (request.getParameter("ErrMsg") != null){ out.println(request.getParameter("ErrMsg")); } %> とこれを表示します。 しかし、うまく表示できません・・・ 何ででしょうか? お願いします、お教えください。

    • ベストアンサー
    • Java
  • String <=> byte配列 の際のエンコード(続)

    前回の質問(4つほど前の)の続きですが、 8859-1が日本語を扱うことができるという勘違いは、 サーブレットで日本語のリクエストパラメータを使用する際の、 次のようなコードに起因してます。 String param = new String(request.getParameter("test")).getBytes("8859_1"), "JISAutoDetect"); ここで、request.getParameter("test") から返ってくる String は 8859-1エンコーディングされたものだと単純に考えていたのですが、 今回、あらためてこれについて考えてみました。 request.getParameter("test").getBytes("8859_1") で、 ブラウザのエンコーディングを用いた、パラメータを表現するバイト列が ちゃんと取得できています。 では、request.getParameter("test") の結果返ってくる String は ブラウザのエンコードでパラメータを表現するバイト列を用い、 値はそのままで、エンコード名だけを8859-1として構築されたもの、 になると思うのですが、 そういう認識で正しいのでしょうか。 また、それで正しいのなら、それと同じことを自分で行うには どうすればよいのでしょうか。 とても気になります。 もしわかる方がいらっしゃったら、是非回答お願いします。

    • ベストアンサー
    • Java
  • 文字化けについて困ってます。

    スケジュールの内部運用を作ってます。 指定した年月日、ユーザーID、内容について、23件レコードがあります。 1ページのレコードを5件として設定、「次へ」のリンクを押しますと、リンクで値をサーブレット側に渡してます。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> -略- <a href="http://localhost:8080/scheduleWork/RetrievalServlet? add=<%=ad+1%>&year=<%=scheduleBean.getYear()%>&month= <%=scheduleBean.getMonth()%>&day=<%=scheduleBean.getDay()%> &user_id=<%=scheduleBean.getUser_id()%>&contents= <%=scheduleBean.getContents()%>">・・・次へ</a> -略- </html> RetrievalServlet.java public class RetrievalServlet extends HttpServlet{ -略- public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{ request.setCharacterEncoding("Shift_JIS"); response.setContentType("text/html; Charset=Shift_JIS"); try{ int month=(Inteter.parseInt(request.getParameter("month")));//月 int year=(Inteter.parseInt(request.getParameter("year")))//年 int day=(Integer.parseInt(request.getParameter("day"))); //日 String user_id=request.getParameter("user_id");//ユーザーID String contents=request.getParameter("contents");//内容 int add=(Integer.parseInt(request.getParameter("add")));//前後指定数 -略- } 年、月、日、ユーザーID、前後指定数はそのとおりに渡されますけど、、内容だけが文字化けになってます。 すごく困ってます。 どうぞ、ご指導お願いいたします。

    • ベストアンサー
    • Java

専門家に質問してみよう