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

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

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

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

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

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

2471閲覧

java.lang.NumberFormatException:エラーの解決方法が知りたいです.

enenken

総合スコア3

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Java

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

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2023/03/26 07:51

編集2023/03/26 08:28

実現したいこと

java.lang.NumberFormatException:For input string: "on" エラーを解決したいと思っております

前提

spring boot ,thymeleafを使い,社員管理システムを作成中下記の様なエラーが発生いたしました.
解決方法などをご教授いただければと思います.

発生している問題・エラーメッセージ

java.lang.NumberFormatException: For input string: "on" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) ~[?:?] at java.lang.Integer.parseInt(Integer.java:668) ~[?:?] at java.lang.Integer.parseInt(Integer.java:786) ~[?:?]

該当のソースコード

IndexController.java

1package jp.co.sss.sys.controller; 2 3import java.text.ParseException; 4import java.text.SimpleDateFormat; 5import java.util.Date; 6import java.util.List; 7 8import javax.servlet.http.HttpServletRequest; 9import javax.servlet.http.HttpServletResponse; 10import javax.servlet.http.HttpSession; 11 12import org.springframework.beans.factory.annotation.Autowired; 13import org.springframework.stereotype.Controller; 14import org.springframework.ui.Model; 15import org.springframework.validation.BindingResult; 16import org.springframework.validation.annotation.Validated; 17import org.springframework.web.bind.annotation.RequestMapping; 18import org.springframework.web.bind.annotation.RequestMethod; 19import org.springframework.web.bind.annotation.SessionAttributes; 20 21import jp.co.sss.sys.entity.Employee; 22import jp.co.sss.sys.form.LoginForm; 23import jp.co.sss.sys.repository.EmployeeRepository; 24 25@Controller 26@SessionAttributes(types = Employee.class) 27public class IndexController { 28 29 @Autowired 30 EmployeeRepository empRepository; 31 LoginForm loginform; 32 33 /** 34 * ログイン画面を表示する 35 * @param loginForm 36 * @return login.html 37 */ 38 @RequestMapping(path = "/login", method = RequestMethod.GET) 39 public String login( LoginForm loginForm,BindingResult br,Model model) { 40 return "login"; 41 } 42 @Autowired 43 HttpSession session; 44 45 // 処理 46 47 48 /** 49 * 入力された値を元にログイン認証し、トップ画面に遷移する 50 * 51 * @param req 52 * @param res 53 * @param loginForm 54 * @return top.html 55 */ 56 @RequestMapping(path = "/top", method = RequestMethod.POST) 57 public String login(@Validated LoginForm loginForm, HttpServletRequest req, HttpServletResponse res,BindingResult br,Model model,HttpSession session) { 58 //ログインした人の情報 59 String empId = req.getParameter("empId"); 60 String password = req.getParameter("password"); 61 62 63 Employee employee = empRepository.findByEmpIdAndPassword(empId, password); 64 65 66 67 68 //セッションデータ設定 69 session.setAttribute("userInfo",employee); 70 //ログインユーザー情報 71 model.addAttribute("employee",employee); 72 73 //ログインチェック 74 if(employee == null) { 75 //存在しない場合 76 return "login"; 77 78 }else { 79 80 //存在した場合 81 //社員情報一覧 82 List<Employee> empAll= empRepository.findAll(); 83 model.addAttribute("empAll",empAll); 84 85 return "top"; 86 87 } 88 } 89 90 @RequestMapping(path = "/top", method = RequestMethod.GET) 91 public String top(@Validated LoginForm loginForm, HttpServletRequest req, HttpServletResponse res,BindingResult br,Model model,HttpSession session) { 92 List<Employee> empAll= empRepository.findAll(); 93 model.addAttribute("empAll",empAll); 94 95 return "top"; 96 97 } 98 99 @RequestMapping(path = "/mypage", method = RequestMethod.POST) 100 public String empUser(@Validated LoginForm loginForm, HttpServletRequest req, HttpServletResponse res,BindingResult br,Model model,HttpSession session) throws ParseException { 101 session = req.getSession(); 102 103 String empName = req.getParameter("empName"); 104 String password = req.getParameter("password"); 105 String date = req.getParameter("birthday"); 106 String savegender = req.getParameter("gender"); 107 108 SimpleDateFormat sdFormat = new SimpleDateFormat("yyyy-MM-dd"); 109 Date birthday = sdFormat.parse(date); 110 111 int gender = Integer.parseInt(savegender); 112 113 Employee userInfo = (Employee) session.getAttribute("userInfo"); 114 userInfo.setEmpName(empName); 115 userInfo.setPassword(password); 116 userInfo.setBirthday(birthday); 117 userInfo.setGender(gender); 118 119 Employee updateEmployee = empRepository.save(userInfo); 120 return "edit_fin"; 121 } 122 // TODO 自動生成されたメソッド・スタブ 123 //ログインユーザー情報 124 //マイページリンク押下,既存情報の出力 125 @RequestMapping(path = "/mypage", method = RequestMethod.GET) 126 public String empLink(@Validated LoginForm loginForm, HttpServletRequest req, HttpServletResponse res,BindingResult br,Model model,HttpSession session) { 127 session = req.getSession(); 128 Object userInfo=session.getAttribute("userInfo"); 129 model.addAttribute("userInfo",userInfo); 130 return "mypage"; 131 132 133 } 134 135} 136

mypage.html

1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4<meta charset="UTF-8" /> 5<link th:href="@{/css/style.css}" rel="stylesheet" /> 6<link th:href="@{/css/layout.css}" rel="stylesheet" /> 7<title>マイページ変更・確認画面</title> 8</head> 9<body> 10 <!-- ヘッダー --> 11 12 <header th:include="layout/header :: head"> 13 14 15 </header> 16 17 <!-- サイドバー --> 18 <aside th:include="layout/aside :: side"></aside> 19 <!-- メイン --> 20 <article class="mypage"> 21 <form action="" th:action="@{/mypage}" th:field="${userUpdate}" 22 method="post"> 23 <h3 class="page_title">マイページ変更・確認画面</h3> 24 25 26 <table class="table employee"> 27 28 <tr th:each="userInfo : ${userInfo}" th:object="${userInfo}"> 29 <tr> 30 <th class="cell_title">社員番号</th> 31 <td th:text="*{userInfo.empId}"></td> 32 </tr> 33 <tr> 34 <th class="cell_title">名前</th> 35 <td><input type="text" name="empName" 36 th:value="${userInfo.empName}" /></td> 37 38 </tr> 39 <tr> 40 <th class="cell_title">パスワード</th> 41 <td><input type="password" name="password" 42 th:value="${userInfo.password}" /></td> 43 44 </tr> 45 <tr> 46 <th class="cell_title">生年月日</th> 47 <td><input type="text" name="birthday" 48 th:value="${#dates.format(userInfo.birthday,'yyyy-MM-dd')}" /></td> 49 50 </tr> 51 <tr> 52 <th class="cell_title">性別</th> 53 <td><input type="radio" name="gender" 54 th:value="${userInfo.gender}" 55 th:switch="*{userInfo.gender == 1}" 56 th:checked="${userInfo.gender == 1}" /> 男 <input type="radio" 57 name="gender" th:switch="*{userInfo.gender == 2}" 58 th:checked="${userInfo.gender == 2}"> 女</td> 59 60 61 </tr> 62 </table> 63 <div class="btn_area_center"> 64 <input type="submit" value="変更確定" class="btn"> 65 </div> 66 67 </form> 68 </article> 69 <!-- フッダー --> 70 <footer th:include="layout/footer :: foot"></footer> 71 72</body> 73</html>

試したこと

java.lang.NumberFormatException:
文字列からint型へ変換する際のエラーと認識しておりました.
⇨IndexController.java内のint型変換のソースコードの確認.
該当箇所が見つけられませんでした.

補足情報(FW/ツールのバージョンなど)

eclipce2022
postgreSQL
javaSE-16

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

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

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

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

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

jimbe

2023/03/26 08:03

コードのマークダウンの「```」はコードの前後を囲むように、始めと終わりが対応するようにしてください。
enenken

2023/03/26 08:22

申し訳ございません. 間違えて削除してしまいました.
jimbe

2023/03/26 08:43

修正ありがとうございます。
guest

回答1

0

ベストアンサー

java.lang.NumberFormatException: For input string: "on"

java.lang.NumberFormatException:
文字列からint型へ変換する際のエラーと認識しておりました.

プログラムはコードだけで動作するのではありません。
コードが正しくてもデータが間違っていれば想定通りの結果にはなりません。

メッセージに有る通り、 数値にしようとしたら "on" という文字列だったので数値に出来ない、ということです。
数値に変換しようとした文字列変数にちゃんと数値が入っているか、入っていないならそれは何故なのかを調べてください。

投稿2023/03/26 08:05

編集2023/03/26 08:10
jimbe

総合スコア12646

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

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

enenken

2023/03/27 05:49

値をデバッグで確認させていただいたところ,全て正常に値の格納がされておりました.. この場合ですと,mypage.htmlの性別項目に誤りがあるという認識で宜しかったのでしょうか. ご確認宜しくお願い致します.
jimbe

2023/03/27 07:01 編集

"on" という文字列が入っているのが正しく、それを数値化する方法が間違っているのか、数値化する方法が正しく、 "on" という文字列が入っているのが間違っているのか、仕様としてはどちらなのでしょうか。 細かいことですが「確認させていただいた」「確認よろしく」等と言う必要はありません。主役は jung さん(のコード)で私は顧客でも何でもありませんので、仕様やコードをどうしたいのか/どうしてそうしているのかも含めて全て jung さんが知っている立場で、私はただこのコードならこう動くと想像する以外何も知らないのです。
enenken

2023/03/27 07:12

数値化する方法が正しく、 "on" という文字列が入っているのが間違っている仕様でございます
jimbe

2023/03/27 07:34

"on" が入っているのが間違っているのでしたら、なぜ「全て正常に値の格納がされておりました」となるのでしょう。 mypage を表示する時のデータ(例えば 1 )と同じ形( 1 や "1")で受け取ることが出来るわけではありません。 mypage がブラウザに表示された時のソース(html) はどうなっているでしょうか。
enenken

2023/03/27 08:09

radioボタンによる切り替えをし,変更確定ボタンを押下した際に,上記のエラーが確認されました. かつ,一番最初に数値変換を行った際は正常に変換できました為, ⇨数値化する方法が正しく、 "on" という文字列が入っているのが間違っている仕様と認識をいたしました. mypage がブラウザに表示された時のソース(html) は上記で記載されているソースになっております.
jimbe

2023/03/27 12:10 編集

>mypage がブラウザに表示された時のソース(html) は上記で記載されているソースになっております. 「mypage がブラウザに表示された時」というのは、お作りになっているシステムを(ラジオボタンの動作を確認するため等で)動作させた際のクライアントのブラウザの表示のことです。 ご質問に提示されている mypage.html は thymeleaf によって処理される前のもので、 thymeleaf (を通して spring?) によって各変数の値等が処理・展開されて得られる結果の html がクライアウトのブラウザに送られます。その結果のほうをご確認ください。 該当項目の値はどうなっているでしょうか。
enenken

2023/03/28 01:53

>>各変数の値等が処理・展開されて得られる結果の html がクライアウトのブラウザに送られます。その結果のほうをご確認 初心者のため申し訳ございません。 こちらについて送られたブラウザというのはどのように確認すればよろしいのでしょうか。
jimbe

2023/03/28 08:59 編集

> 送られたブラウザというのはどのように確認すれば ブラウザは、URL を入力して該当ページを表示したりしているブラウザのことです。その表示している html を確認する方法は、お使いのブラウザによって異なると思います。 私は Google Chrome を使っていますが、 Chrome では表示されているページ上で右クリックするとコンテキストメニューが出てきてその中に「ソースを表示」があります。
enenken

2023/03/31 07:15

ブラウザの値を確認したところ,性別を1,2で表しているのですが,value属性が切り替わっていない状態になっておりました。 認識としては,value周辺の表記方法が誤っているという認識でよろしかったのでしょうか。
enenken

2023/03/31 08:16

th:value属性を確認したところ,そもそもvalueを書き忘れておりました。 ご回答いただきありがとうございました。
jimbe

2023/03/31 08:16

>value属性が切り替わっていない状態 というのは何なのか良く分かりませんが…。 html の form の input タグで、ラジオボタンで gender を 1,2 として選択する形にする場合 <form ~> <input type="radio" name="gender" value="1" checked>男 <input type="radio" name="gender" value="2">女 </form> のようなコードになっている必要があります(これは html の仕様です)。ですから、そうなるような thymeleaf の html を書かなければならないでしょう。 thymeleaf は詳しくないので具体的に書けませんが、質問本文の "女" の input には th:value が見当たりませんし、 "男" の input の th:value は "${userInfo.gender}" では違うと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問