###実行したいこと
ユーザーの情報を新規登録したい
必須項目と任意項目を分けている
入力内容にエラーがあればアラートを出し
入力内容に誤りがなければ登録できるようにしたい
###解決したいこと
必須入力項目にすべて入力しても必ず「ふりがな」項目のみエラーのアラートが出てくるため、新規登録ができません。
しかし、一度登録しようと入力した内容(「ふりがな」を入力してください、のエラーで返されて知ったもの)とは異なるものを入力した場合真っ白な画面となります。
この2パターンの違いも今のところ分かっておりません。
エラー原因を探し登録できるようにしたいです。
ただJava初心者のためエラー内容が理解できず。。。
###エラー内容
↓ eclipseのコンソール画面を載せておきます。↓
Hibernate:
create table belongsNum ( belongs_id varchar(255) not null, belongs_name varchar(255) not null, primary key (belongs_id) ) engine=MyISAM
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@a59217] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode. [金 6 12 10:39:52 JST 2020]
WARN: GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement [金 6 12 10:39:52 JST 2020]
Hibernate:
create table employees ( id bigint not null auto_increment, admin_flg integer not null, belongs_num varchar(255) not null, birthday_at date not null, code varchar(255) not null, delete_flg integer not null, join_at date not null, leave_at date, name_kana varchar(255) not null, name_kanzi varchar(255) not null, primary key (id) ) engine=MyISAM
WARN: GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement [金 6 12 10:39:52 JST 2020]
Hibernate:
create table password ( password_id varchar(255) not null, password varchar(64) not null, primary key (password_id) ) engine=MyISAM
WARN: GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement [金 6 12 10:39:52 JST 2020]
Hibernate:
create table report ( report_id varchar(255) not null, create_at datetime not null, create_name varchar(255) not null, report_name varchar(255) not null, updated_at datetime not null, primary key (report_id) ) engine=MyISAM
WARN: GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement [金 6 12 10:39:52 JST 2020]
Hibernate:
alter table employees add constraint UK_3um79qgwg340lpaw7phtwudtc unique (code)
WARN: GenerationTarget encountered exception accepting command : Error executing DDL via JDBC Statement [金 6 12 10:39:52 JST 2020]
INFO: HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@1febd37' [金 6 12 10:39:52 JST 2020]
INFO: HHH000397: Using ASTQueryTranslatorFactory [金 6 12 10:39:52 JST 2020]
Hibernate:
select
employee0_.id as id1_1_,
employee0_.admin_flg as admin_fl2_1_,
employee0_.belongs_num as belongs_3_1_,
employee0_.birthday_at as birthday4_1_,
employee0_.code as code5_1_,
employee0_.delete_flg as delete_f6_1_,
employee0_.join_at as join_at7_1_,
employee0_.leave_at as leave_at8_1_,
employee0_.name_kana as name_kan9_1_,
employee0_.name_kanzi as name_ka10_1_
from
employees employee0_
order by
employee0_.id DESC limit ?
WARN: SQL Error: 1054, SQLState: 42S22 [金 6 12 10:39:54 JST 2020]
ERROR: Unknown column 'employee0_.admin_flg' in 'field list' [金 6 12 10:39:54 JST 2020]
重大: サーブレット controllers.employees.EmployeeIndexServlet のServlet.service()が例外を投げました [金 6 12 10:39:54 JST 2020]
Hibernate:
select
count(employee0_.id) as col_0_0_
from
employees employee0_
where
employee0_.code=?
###エラーが発生していると思われるコード関連部分
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { EntityManager em = DBUtil.createEntityManager(); int page = 1; try{ page = Integer.parseInt(request.getParameter("page")); } catch(NumberFormatException e) {} List<Employee> employees = em.createNamedQuery("getAllEmployees", Employee.class).setFirstResult(15 * (page - 1)).setMaxResults(15).getResultList(); long employees_count = (long)em.createNamedQuery("getEmployeesCount", Long.class).getSingleResult(); em.close(); request.setAttribute("employees", employees); request.setAttribute("employees_count", employees_count); request.setAttribute("page", page); if(request.getSession().getAttribute("flush") != null){ request.setAttribute("flush", request.getSession().getAttribute("flush")); request.getSession().removeAttribute("flush"); } RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/employees/index.jsp"); rd.forward(request, response); } }
@Table(name = "employees") @NamedQueries({ @NamedQuery( name = "getAllEmployees", query = "SELECT e FROM Employee AS e ORDER BY e.id DESC" ), @NamedQuery( name = "getEmployeesCount", query = "SELECT COUNT(e) FROM Employee AS e" ), @NamedQuery( name = "checkRegisteredCode", query = "SELECT COUNT(e) FROM Employee AS e WHERE e.code = :code" ) }) @Entity public class Employee{ @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; @Column(name = "code", nullable = false, unique = true) private String code; @Column(name = "name_kana", nullable = false) private String name_kana; public long getId(){ return id; } public void setId(long id){ this.id = id; } public String getCode(){ return code; } public void setCode(String code){ this.code = code; } public String getName_kana(){ return name_kana; } public void setName_kana(String name_kana){ this.name_kana = name_kana; } }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String _token = (String)request.getParameter("_token"); if(_token != null && _token.equals(request.getSession().getId())){ EntityManager em = DBUtil.createEntityManager(); Employee e =new Employee(); Password p =new Password(); Report r =new Report(); p.setPassword_id(request.getParameter("code")); r.setReport_id(request.getParameter("code")); e.setCode(request.getParameter("code")); e.setName_kana(request.getParameter("name_kana")); } List<String> errors = EmployeeValidator.validate(e, p, true, true); if(errors.size() > 0){ em.close(); request.setAttribute(_token, request.getSession().getId()); request.setAttribute("employee", e); request.setAttribute("errors", errors); RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/employees/new.jsp"); rd.forward(request, response); } else{ em.getTransaction().begin(); em.persist(e); em.getTransaction().commit(); em.close(); request.getSession().setAttribute("flush", "登録が完了しました。"); response.sendRedirect(request.getContextPath() + "/employees/index"); } } }
public class EmployeeValidator { public static List<String> validate(Employee e, Password p, Boolean code_duplicate_check_flag, Boolean password_check_flag){ List<String> errors = new ArrayList<String>(); String code_error = _validateCode(e.getCode(), code_duplicate_check_flag); if(!code_error.equals("")){ errors.add(code_error); } String name_kana_error =_validateName_kana(e.getName_kana()); if(!name_kana_error.equals("")){ errors.add(name_kana_error); } // 社員番号の必須入力チェック private static String _validateCode(String code, Boolean code_duplicate_check_flag){ // 必須入力チェック if(code == null || code.equals("")){ return "社員番号を入力してください。"; } // 既に登録されている社員番号との重複チェック if(code_duplicate_check_flag){ EntityManager em = DBUtil.createEntityManager(); long employees_count = (long)em.createNamedQuery("checkRegisteredCode", Long.class).setParameter("code", code).getSingleResult(); em.close(); if(employees_count > 0){ return "入力された社員番号の情報は既に存在しています。"; } } return ""; } // 氏名(かな)の必須入力チェック private static String _validateName_kana(String name_kana){ if(name_kana == null || name_kana.equals("")){ return "ふりがなを入力してください。"; } return ""; } }
どうかお力添えを
回答2件
あなたの回答
tips
プレビュー