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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

216閲覧

【Java】ラジオボタン選択結果が文字化けする

UnaMightever

総合スコア1

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2024/04/18 02:26

編集2024/04/18 04:18

実現したいこと

初投稿です。
Java初学者で教本を使い学習しているのですが、下記機能のあるWebアプリの作成課題があります。

・名前、住所、性別、電話番号をフォームで送信する。
・送信後、フォームに入力した情報が初期値として入力された同じフォームを再度表示する。

発生している問題・分からないこと

性別のみラジオボタン(input type="radio")で処理しているのですが、女を選び送信をすると女、男を選び送信をしても女が初期値に設定されてしまいます。

サーブレットでラジオボタンの値をgenで受け取り、Beanを使用し下記コードで条件指定しています。

Java

1 public void setGen(String gen) { 2 this.gen = gen; 3 if(gen.equals("男")) { 4 this.ma="checked"; 5 this.fe=""; 6 } 7 else { 8 this.fe="checked"; 9 this.ma=""; 10 } 11 }

エラーメッセージ

error

1エラーメッセージは発生していません。

該当のソースコード

HTML

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>Helloサーブレット</title> 6</head> 7<body> 8 9<form method="post"action="ModifyServlet"> 10名前&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="name"><br> 11住所&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="add"><br> 12性別&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="radio"name="gender" value="男">男 13&nbsp;&nbsp;&nbsp;<input type="radio"name="gender"value="女">女<br> 14電話番号<input type="text" name="ph"><br> 15<br> 16 <input type="submit" value="おk"> 17</form> 18</body> 19</html>
package servlet; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import beans.CustomerBean; @WebServlet("/ModifyServlet") public class ModifyServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //文字コードを設定 response.setCharacterEncoding("UTF-8"); //Beanのインスタンス化 CustomerBean cs=new CustomerBean(); //inputされた値を取得 String name=request.getParameter("name"); String add =request.getParameter("add"); String gen=request.getParameter("gender"); String ph=request.getParameter("ph"); //Beanに値をセットする cs.setName(name); cs.setAdd(add); cs.setGen(gen); cs.setPh(ph); //リクエストスコープに保存する request.setAttribute("cs", cs); //JSPに転送する String jsp="jsp/modify03.jsp"; RequestDispatcher rd=request.getRequestDispatcher(jsp); rd.forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

ラジオボタンの値である”女”や”男”の部分が文字化けしているところまでは確認ができました。
文字化けのせいでBeanで設定している条件の分岐がうまくいってないことが原因かと思うのですが、値は必ずアルファベットで設定する必要があるのかが不明です。
(教本には上記の通り、日本語で値を設定するよう記載されています・・・。)
テキストボックスは文字化けせず表示されているため、他に何か原因があればお教えいただけませんでしょうか。
テキストボックス部分の日本語入力を試していませんでした。
こちらも文字化けしてしまいます・・・。
UTF-8で指定しているつもりなのですが、コードの記載誤りだと思われます。
どの部分が誤っているのか、お教え頂ければ幸いです。


実現しようとしている機能については、こちらの質問者様と同様かとお見受けしております。
【Java】ラジオボタン選択結果をセッションで記憶したい

補足

特になし

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

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

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

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

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

dodox86

2024/04/18 06:07

1. まず、フォームを記載しているHTMLファイル”自体”が正しくUTF-8でエンコーディングされているかを確認してください。  ※<meta charset="UTF-8"> とは別の話です。ここで間違っていると話がややこしくなります。 2. 次に、リクエストからgetParameterメソッドでフォームのパラメータを読み出すModifyServlet で、リクエストを"UTF-8"で扱うようにします。以下のサイト様の記事が参考になると思います。 https://www.javadrive.jp/servlet/request/index4.html 具体的には恐らく request.setCharacterEncoding("UTF-8"); と記載することになると思います。 現在ご提示のコードではレスポンスの方にセットしていますね。 > response.setCharacterEncoding("UTF-8"); 試してみてください。
UnaMightever

2024/04/18 11:20

コメントありがとうございます。 お教えいただいた内容で試したところ解決しました! エンコードの文字コードは問題ありませんでしが、requesを誤ってresponseと記載しており、恥ずかしい限りです・・・。 ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか? よろしくお願いいたします。
dodox86

2024/04/18 17:32

解決できて何よりでした。 > ベストアンサーに選びたいので同じ内容を回答欄に投稿いただけますでしょうか? それにはおよびませんので、改修した内容と原因(<後で本質問を読んだ第三者が情報として利用できるように)をご自身で回答として投稿し、自己解決としてしてください。よろしくお願いします。
guest

回答1

0

自己解決

<解決方法>
servletの「//文字コードを設定」部分のコードを下記の「正」に修正する。
誤:response.setCharacterEncoding("UTF-8");
正:request.setCharacterEncoding("UTF-8");

<原因>
responseとrequestの誤記。
input.html(クライアント)から送信される情報を適切な文字コードに変換する必要があるため、正しくは「request」である。

参考URL:日本語パラメータの対応(setCharacterEncoding)
参考URL:「HTTPリクエスト」と「HTTPレスポンス」

<補足>
上記の解決方法を実施する前に、HTMLファイルのエンコードがUTF-8であることを確認する必要がある。
※エンコードが「UTF-8」で設定されていない場合は別途対応が必要。

投稿2024/04/19 00:50

編集2024/04/19 00:54
UnaMightever

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問