《再掲》条件分岐がうまくいかず、エラーメッセージが出力されません。
受付中
回答 0
投稿
- 評価
- クリップ 0
- VIEW 793
再掲致します。
表題の通り、
①まずJspファイルでinputタグを使い、
userName2 ,newPassword,newPassword2属性にそれぞれ値を入力してサーブレットに処理を任せます。
②同時に未入力チェックを行いたいので、
userName2がnullの場合、userPass1がnullの場合、userPass2がnullの場合に
それぞれエラーメッセージを生成し、①で使用したJspファイルにフォワードしてエラーメッセージを出力します。
③そして、すべてのnullチェックをパスしたとき、userPass1とuserPass2の値が一致した場合、
Userインスタンスを生成して、元のJspファイルにフォワードする。
(ここではエラーメッセージの出力のみ確認したいので、Jspファイルには出力コードを書いていません。)
以上①~③の処理を実行したいです。
しかし実際に未入力チェック(①)を行うと、想定下通りに動きません。
具体的には、
userName2を未入力 newPasswordを入力 newPassword2を入力
→パスワードと再入力パスワードが一致しません。が出力。
userName2のみを入力
→何も表示されない
といった具合です。
対策としてデバックをしてみたもののなぜか毎回、
if (userName2 == null)
の部分をスキップしてしまいます。
そこで、何か値が混入しているのか思いUserクラスのインスタンスを生成し、userName2の値をsetUserName(User.javaがもつメソッド)でインスタンスに設定→requestScopeに保存→元のJspファイルへフォワード→Jspファイルで出力
といった手順を試してもなにも値が出力されませんでした。
どなたかJavaに詳しい方、お助け下さい。
長文駄文となってしまい誠に申し訳ございません。どうかご回答よろしくお願いいたします。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix= "c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cafede Botti</title>
</head>
<body>
<h2>新規ユーザー登録</h2>
<form action = "/CafedeBotti/FC" method = "post">
<div align = center>
Name<input type = "text" name = "userName2"><br>
Pass1<input type = "text" name = "newPassword"><br>
Pass2<input type = "text" name = "newPassword2">
<input type = "hidden" name = "ButtonID" value = "a006">
<input type = "submit" value = "submit">
</div>
</form>
<!-- <form action ="/CafedeBotti/FC" method = "post"> -->
<!-- <input type = text name = "userName2"><br> -->
<!-- <!-- パスワードを入力してください:<input type = "text" name = "newPassword"><br> -->
<!-- <!-- 再度パスワードを入力してください:<input type = "text" name = "newPassword2"> -->
<!-- <input type = "hidden" name = "ButtonID" value = "a006"> -->
<!-- <input type ="submit" value = "登録"> -->
<!-- </form> -->
<!-- </div> -->
<c:out value = "${message2.message}"/>
</body>
</html>
package Servlet;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import model.FilterSearchLogic;
import model.Message;
import model.ShopList;
import model.User;
import model.UserLoginLogic;
/**
* Servlet implementation class FrontController
*/
@WebServlet("/FC")
public class FrontController extends HttpServlet {
private static final long serialVersionUID = 1L;
ArrayList<ShopList> arraylist;
/**
* @see HttpServlet#HttpServlet()
*/
public FrontController() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
request.setCharacterEncoding("UTF-8");
String ButtonID = request.getParameter("ButtonID");
if(ButtonID == null) {
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/Top.jsp");
dispatcher.forward(request, response);
}else if(ButtonID.equals("a001")) {
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/FilterdSearch.jsp");
dispatcher.forward(request, response);
}else if (ButtonID.equals("a002")){
}else if (ButtonID.equals("a003")) {
String wifi = request.getParameter("Wifi");
String customerBase = request.getParameter("CustomerBase");
if(wifi == null || customerBase == null) {
Message message = new Message ("全てのradioboxをマークしてください。");
request.setAttribute("message", message);
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/FilterdSearch.jsp");
dispatcher.forward(request, response);
}
//Wifi,CustomerBaseが共にnull出ない場合、
else {
ShopList ShopList = new ShopList();
ShopList.setWifi(wifi);
ShopList.setCustomerBase(customerBase);
//FilterSearchLogicメソッドを呼び出す。
FilterSearchLogic FilterSearchLogic = new FilterSearchLogic();
arraylist = FilterSearchLogic.FilterSearchLogicExecute(ShopList);
request.setAttribute("list",arraylist);
//FilterdSearchResult.jspにフォワードする
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/FilterdSearchResult.jsp");
dispatcher.forward(request, response);
}
}else if (ButtonID.equals("a005")) {
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/NewRegist.jsp");
dispatcher.forward(request, response);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException {
// TODO Auto-generated method stub
//ログイン画面から送られてきたrequestからuserNameとuserPassを取り出す。
request.setCharacterEncoding("UTF-8");
//requestインスタンスからButtonIDを取り出す。
String ButtonID = request.getParameter("ButtonID");
//String userName = request.getParameter("userName");
//String userPass = request.getParameter("userPass");
//userNameかuserPassが未入力だとMessageインスタンスを生成し、リクエストスコープに格納する。
if(ButtonID.equals("a004")) {
String userName = request.getParameter("userName");
String userPass = request.getParameter("userPass");
if (userName == null || userPass == null) {
Message message2 = new Message("ユーザー名またはパスワードが未入力です。");
request.setAttribute("message", message2);
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/LoginFail.jsp");
dispatcher.forward(request, response);
}else {
//Userインスタンスを生成。
User user = new User (userName,userPass);
boolean loginistrue;
//UserLoginLogicメソッドを呼び出す。
UserLoginLogic UserLoginLogic = new UserLoginLogic();
loginistrue = UserLoginLogic.loginExcecute(user);
//loginistrueの値で条件分岐
if (loginistrue == true) {
//SessionScopeに名前のみ保存
HttpSession session = request.getSession();
session.setAttribute("user", user);
//ログイン結果画面にフォワードする。
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/LoginSuccess.jsp");
dispatcher.forward(request, response);
}else {
Message message = new Message("ユーザー名またはパスワードが正しくありません。");
request.setAttribute("message", message);
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/LoginFail.jsp");
dispatcher.forward(request, response);
}
}
}else if (ButtonID.equals("a006")) {
String userName2 = request.getParameter("userName2");
String userPass1 = request.getParameter("newPassword");
String userPass2 = request.getParameter("newPassword2");
if (userName2 == null) {
Message message2 = new Message("ユーザー名が未入力です。");
request.setAttribute("message2",message2 );
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/NewRegist.jsp");
dispatcher.forward(request, response);
}else if(userPass1 == null) {
Message message2 = new Message("パスワードが未入力です。");
request.setAttribute("message2",message2 );
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/NewRegist.jsp");
dispatcher.forward(request, response);
}else if(userPass2 == null) {
Message message2 = new Message("再入力パスワードが未入力です。");
request.setAttribute("message2",message2 );
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/NewRegist.jsp");
dispatcher.forward(request, response);
}
else if(userPass1.equals(userPass2)) {
User user2 = new User(userName2,userPass1);
request.setAttribute("user2",user2 );
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/NewRegist.jsp");
dispatcher.forward(request, response);
}else {
Message message2 = new Message("パスワードと再入力パスワードが一致しません。");
request.setAttribute("message2",message2 );
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/NewRegist.jsp");
dispatcher.forward(request, response);
}
}
}
}
package model;
public class Message {
//メンバ変数
private String message;
//引数1コンストラクタ
public Message (String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cafede Botti</title>
</head>
<body>
<h2>Cafede Botti</h2>
<form action = "/CafedeBotti/FC" method = "post">
<div align = center>
Name<input type = "text" name = "userName"><br>
Pass<input type = "password" name = "userPass"><br>
<input type = "hidden" name = "ButtonID" value = "a004">
<input type = "submit" value = "submit">
</div>
</form>
<div align = "center">
<a href = "/CafedeBotti/FC?ButtonID=a005" > 初めての方はこちら </a><br>
</div>
</body>
</html>
Java #jsp #質問 #エンジニア
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
まだ回答がついていません
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.33%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正の依頼
gentaro
2019/08/08 07:08
二重投稿はやめましょう。運営に削除リクエストをしてください。
https://teratail.com/help/delete-policy
gentaro
2019/08/08 07:18
「《再掲》」って書いてるところを見ると意図的にやってるみたいですけど、推奨されない行為であることはちゃんとガイドラインに書いてあります。
https://teratail.com/help/avoid-asking
「閲覧数を増やす目的などにより、過去に投稿した質問と同じ内容の質問を新たに投稿することは推奨していません。」
takasima20
2019/08/08 07:36
null と 空文字列は違うんじゃないスか? 知らんけど
Zuishin
2019/08/08 07:51
再掲してはいけません。
こちらは PC で開いてごみ箱アイコンから削除リクエストしてください。
前の質問も再掲のようですが、回答が気に食わないからと言って無言で低評価して新しく質問するのはやめてください。
前の質問の追記修正依頼や回答にコメントし、質問を編集し直してください。
Zuishin
2019/08/08 07:56
編集をし直す場合、全部書き換えると既についている回答が意味不明なものになるので、追記という形をとってください。
asahina1979
2019/08/08 08:56
元の質問を編集すればアクティブ(デフォルト)の上位にくるので回答しないリストに入る要因は再掲行為
azuapricot
2019/08/08 09:07
NULL なのか 空文字 なのかで値が入ってるか入ってないかって変わるんですけど、
空文字のチェックはしましたか?
あと元質問に追記すればよいと思います。何度も何度も似たような質問を上げるのは、後世同じことで困っている後輩たちのためになりません。
m.ts10806
2019/08/08 09:08
前の質問に既に回答ついてますよ。
その回答を無視して再掲は回答してくれた人に対して失礼です。
azuapricot
2019/08/08 09:10
あとは 「なぜか毎回スキップしてしまいます。」って言ってますが、
デバッグのやり方が悪いのでは?
スキップする前の処理でもuserName2の中身は見れますよね?
コーディングしていく上でデバッグスキルは必須ですよ