- ベストアンサー
JSPのgetParameterのvalueを文字変数に代入する方法
- JSPのgetParameterを使用して取得した値を文字変数に代入する方法についてご質問です。具体的には、選択フィールドの値を文字変数に代入して表示したい場合の手順が知りたいです。
- 質問の内容はJSPのgetParameterを使用して選択フィールドの値を取得し、文字変数に代入して表示する方法についてです。現在は数値のまま表示されてしまっており、値を文字に変換して表示する方法が知りたいです。
- JSPのgetParamterを使用して取得した値は、デフォルトで数値のまま表示されます。しかし、文字として表示したい場合は、以下の手順で変換することができます。1) データを取得した後、getBytesメソッドを使用して文字エンコーディングを指定します。2) 取得したバイト列をStringクラスのコンストラクタに渡し、文字列に変換します。この変換を行うことで、文字として表示することができます。具体的なコード例も提示しましたので、参考にしてください。
- みんなの回答 (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でやっていたのをさっき思い出しました(笑)
その他の回答 (5)
- itu1989
- ベストアンサー率44% (37/83)
No4に補足の回答です。 ローカル環境にて事象を確認しました。 jspからリクエストを送る時のエンコード設定が原因だと思います。 正しい対処方法は知りませんが、とりあえずはjspファイルの上部に以下を記述して試してみて下さい。 <% request.setCharacterEncoding("Windows-31J"); %>
お礼
取り敢えず試してみます。
- itu1989
- ベストアンサー率44% (37/83)
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は配列のアドレスを示す 間違ってたらごめんなさい
お礼
回答有難うございます。少し検証してみます。
補足
>サーブレットで処理させて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)
こんにちは。 どう表示したらそうなりましたか? プログラムの質問をする際は、 何をどうしたら、こうなりました。 やりたいことはこうです。 ってのを書かないと無駄なやり取りが増えます。
お礼
何度もすいません!
補足
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)
<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がわからなければ配列をグルグル回しても良いと思うよ(^ω^)
お礼
回答有難うございます。HashMapは知りませんでした。一度試して、補足をさせていただくかもわかりません。
補足
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)
こんにちは。 JavaScriptを利用するか <option value="1,あああ">あああ</option> <option value="2,いいい">いいい</option> として String person = request.getParameter("person"); これで"1,あああ"という文字列が取得できます。 String[] persons = person.split(","); こうすることで persons[0]に"1" persons[1]に"あああ" が入ってきます。
お礼
早速回答有難うございます。 試してみます。JavaScriptも検討します。
補足
[Ljava.lang.String;@ebcdbb という文字化けを起こしてしまいました。
お礼
訂正有難うございます。こちらも試してみます。
補足
あまりにも亀レスなので、一旦ベストアンサーを選ばせていただきます。追加質問は別の形でさせていただきます。