前提・実現したいこと
フォーム画面で年齢や身長、体重を入力しBMIなどを測定するものを作りたいと思っています。
フォーム画面では年齢などを必須入力としたいため未入力チェックを行っているのですが、現在の状態では全角や半角文字に対してエラーメッセージを表示できません。そのため全角や半角文字に対してもエラーメッセージが出るような処理を行いたいのでtry-catch(NumberFormatException)を使用しようと思っています。また、メッセージの内容は、未入力だった場合と全角や半角文字が入力された場合とで分けたいと思っています。ですがdoGetメソッドが長くなってしまうので他クラス別メソッドで未入力チェックを実装しようと思っています。ですが、他クラスでtry-catchを使用してその値をサーブレットに渡す?イメージが全くつきません。
ageのみなどでも構いませんので、修正箇所を教えていただけないでしょうか。
またtry-catchやNumberFormatException以外のよい方法などありましたらお願いします。
該当のソースコード
Servlet
1protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 // TODO Auto-generated method stub 3 EntityManager em = DBUtil.createEntityManager(); 4 5 String age = request.getParameter("age"); 6 String gender_flag = request.getParameter("gender_flag"); 7 String height = request.getParameter("height"); 8 String weight = request.getParameter("weight"); 9 String fat_percentage = request.getParameter("fat_percentage"); 10 String waist = request.getParameter("waist"); 11 String activity = request.getParameter("activity"); 12 13 Health health = new Health(); 14 15 health.setAge(age); 16 health.setGender_flag(gender_flag); 17 health.setHeight(height); 18 health.setWeight(weight); 19 health.setFat_percentage(fat_percentage); 20 health.setWaist(waist); 21 health.setActivity(activity); 22 23 // 未入力チェック(年齢、身長、体重のみ必須) 24 List<String> errors = HealthValidator.validate(health); 25 if(errors.size() > 0) { 26 em.close(); 27 request.setAttribute("_token", request.getSession().getId()); 28 request.setAttribute("health", health); 29 request.setAttribute("errors", errors); 30 // 元の入力フォームへ戻る 31 RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/health/healthCheck.jsp"); 32 rd.forward(request, response); 33 }
package validators; import java.util.ArrayList; import java.util.List; import models.Health; public class HealthValidator { public static List<String> validate(Health h) { List<String> errors = new ArrayList<String>(); String age_error = _validateAge(h.getAge()); if(!age_error.equals("")) { errors.add(age_error); } String height_error = _validateHeight(h.getHeight()); if(!height_error.equals("")) { errors.add(height_error); } String weight_error = _validateWeight(h.getWeight()); if(!weight_error.equals("")) { errors.add(weight_error); } return errors; } private static String _validateAge(Integer age) { if(age == null || age.equals("")) { return "年齢を入力してください"; } return ""; } private static String _validateHeight(Double height) { if(height == null || height.equals("")) { return "身長を入力してください"; } return ""; } private static String _validateWeight(Double weight) { if(weight == null || weight.equals("")) { return "体重を入力してください"; } return ""; } }
回答1件
あなたの回答
tips
プレビュー