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

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

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

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

Q&A

解決済

1回答

1000閲覧

数値を入力してもnullのままでエラーが出てきます

archipelago

総合スコア17

Java

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

0グッド

2クリップ

投稿2021/01/21 10:59

入力された数値などを元にユーザーをDBに登録するだけなのですが、
入力された数値がサーブレットに投げられていないのか、エラー500のnullが出てきてしまいます。

nullの時にはバリデーションで注意文を出すようにしたのですが、それすらも出てこない状態です。
各DBの絡むの名称や型は間違っていないはずなのですが、どうして送信されないのかがわかりません。

初歩的なミスだと思うのですが、どうかご教示お願いします。

Java

1package controllers; 2 3 4import java.io.IOException; 5import java.util.List; 6 7import javax.persistence.EntityManager; 8import javax.servlet.RequestDispatcher; 9import javax.servlet.ServletException; 10import javax.servlet.annotation.WebServlet; 11import javax.servlet.http.HttpServlet; 12import javax.servlet.http.HttpServletRequest; 13import javax.servlet.http.HttpServletResponse; 14 15import models.Users; 16import models.validators.UserValidator; 17import utils.DBUtil; 18import utils.EncryptUtil; 19 20/** 21 * Servlet implementation class CreateNewUserDoneServlet 22 */ 23@WebServlet("/create_newuser_done") 24public class CreateNewUserDoneServlet extends HttpServlet { 25 private static final long serialVersionUID = 1L; 26 27 /** 28 * @see HttpServlet#HttpServlet() 29 */ 30 public CreateNewUserDoneServlet() { 31 super(); 32 // TODO Auto-generated constructor stub 33 } 34 35 /** 36 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 37 */ 38 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 39 // TODO Auto-generated method stub 40 String _token = (String)request.getParameter("_token"); 41 if(_token != null && _token.equals(request.getSession().getId())) { 42 EntityManager em = DBUtil.createEntityManager(); 43 44 //ユーザーの情報の取得 45 Users u = new Users(); 46 47 u.setId(Integer.parseInt(request.getParameter("id"))); 48 u.setName(request.getParameter("name")); 49 u.setPassword(EncryptUtil.getPasswordEncrypt( 50 request.getParameter("password"), 51 (String)this.getServletContext().getAttribute("pepper") 52 )); 53 54 //バリデーション 55 List<String> errors = UserValidator.validate(u, true, true); 56 if(errors.size() > 0) { 57 em.close(); 58 59 request.setAttribute("_token", request.getSession().getId()); 60 request.setAttribute("user", u); 61 request.setAttribute("errors", errors); 62 63 RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/home/create_newuser.jsp"); 64 rd.forward(request, response); 65 } else { 66 em.getTransaction().begin(); 67 em.persist(u); 68 em.getTransaction().commit(); 69 em.close(); 70 71 response.sendRedirect(request.getContextPath() + "/home/index"); 72 } 73 } 74 } 75 76} 77

JSP

1<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 2<!DOCTYPE html> 3<html lang="ja"> 4 <head> 5 <meta charset="UTF-8"> 6 <title>個ログ 新規ユーザー作成</title> 7 </head> 8 9<!-- ロゴ配置 --> 10<img src="${pageContext.request.contextPath}/img/kologLOGO.png" alt="logo"> 11 <body> 12 <form method="POST" action="${pageContext.request.contextPath}/create_newuser_done"> 13 <label for="id">ID</label><br /> 14 <input type="text" name="code" value="${users.id}" /> 15 <br /><br /> 16 17 <label for="name">表示名</label><br /> 18 <input type="text" name="name" value="${users.name}" /> 19 <br /><br /> 20 21 <label for="password">パスワード</label><br /> 22 <input type="password" name="password" /> 23 <br /><br /> 24 25 <input type="hidden" name="_token" value="${_token}" /> 26 <button type="submit">登録</button> 27 </form> 28 29 <button type="submit">戻る</button> 30 31 </body> 32</html>

Java

1//バリデーション 2package models.validators; 3 4import java.util.ArrayList; 5import java.util.List; 6 7import javax.persistence.EntityManager; 8 9import models.Users; 10import utils.DBUtil; 11 12public class UserValidator { 13 public static List<String> validate(Users u, Boolean codeDuplicateCheckFlag, Boolean passwordCheckFlag) { 14 List<String> errors = new ArrayList<String>(); 15 16 String code_error = validateId(u.getId(), codeDuplicateCheckFlag); 17 if(!code_error.equals("")) { 18 errors.add(code_error); 19 } 20 21 String name_error = validateName(u.getName()); 22 if(!name_error.equals("")) { 23 errors.add(name_error); 24 } 25 26 String password_error = validatePassword(u.getPassword(), passwordCheckFlag); 27 if(!password_error.equals("")) { 28 errors.add(password_error); 29 } 30 31 return errors; 32 } 33 34 // ID 35 private static String validateId(Integer id, Boolean codeDuplicateCheckFlag) { 36 // 必須入力チェック 37 if(id == null || id.equals("")) { 38 return "IDを入力してください。"; 39 } 40 41 // すでに登録されているIDとの重複チェック 42 if(codeDuplicateCheckFlag) { 43 EntityManager em = DBUtil.createEntityManager(); 44 long user_count = (long)em.createNamedQuery("checkRegisteredId", Long.class) 45 .setParameter("id", id) 46 .getSingleResult(); 47 em.close(); 48 if(user_count > 0) { 49 return "入力されたIDはすでに存在しています。"; 50 } 51 } 52 53 return ""; 54 } 55 56 // ユーザー名の必須入力チェック 57 private static String validateName(String name) { 58 if(name == null || name.equals("")) { 59 return "表示名を入力してください。"; 60 } 61 62 return ""; 63 } 64 65 // パスワードの必須入力チェック 66 private static String validatePassword(String password, Boolean passwordCheckFlag) { 67 // パスワードを変更する場合のみ実行 68 if(passwordCheckFlag && (password == null || password.equals(""))) { 69 return "パスワードを入力してください。"; 70 } 71 return ""; 72 } 73} 74

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

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

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

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

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

takasima20

2021/01/21 12:34

とりあえず、id じゃなくて code じゃないのかな?
archipelago

2021/01/21 15:28

たしかにそうでした!すみません、ありがとうございます。 ただ、その点を修正してもバリデーションでうまくいかなかったので、 一旦バリデーションは置いておいて書き直そうと思います。 教えていただきありがとうございました!
guest

回答1

0

ベストアンサー

素のjavaでWebAppは開発したことないからよくわからないところもあるんですけど

ID欄のnameが一致してないからじゃないですか?
あと、IdをParseIntするならテキストタイプもNumberにした方がいいのでは、、、?
NumberFormatException吐かれるかもしれないですよ

投稿2021/01/21 14:48

kkrn

総合スコア15

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

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

archipelago

2021/01/21 15:29

IdをStringで統一したのですが、バリデーションのところでうまくいかなったので、 一旦バリデーション抜きで書き直そうと思います。 教えていただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問