入力された数値などを元にユーザーを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
回答1件
あなたの回答
tips
プレビュー