doPostメソッドで、新規登録で入力した値がnullでないか?
またはその値が、すでにデータベースにないか?
そのどちらでもない場合に、新規登録を実行して、データベースに登録したいです。
どのように書けば、if else がしっかり組み立てられるのでしょうか?
package servlet;
import java.io.IOException;
import java.util.List;
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.Mutter;
import model.User;
import model.SetLogic;
import model.LoginLogic;
/**
* Servlet implementation class Set
*/
@WebServlet("/Set")
public class Set extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher dispatcher=request.getRequestDispatcher("/WEB-INF/jsp/set.jsp");
dispatcher.forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String name=request.getParameter("name");
String pass=request.getParameter("pass");
User user=new User(name,pass);
if(name.length()==0 || pass.length()==0){
request.setAttribute("newerrorMsg", "未入力があります。");
RequestDispatcher dispatcher=request.getRequestDispatcher("/WEB-INF/jsp/set.jsp");
dispatcher.forward(request, response);
}
//LoginLogicを使ってmutterListを取得
LoginLogic loginLogic=new LoginLogic();
List<Mutter>mutterList=loginLogic.execute(user);
if(mutterList.size()!=0){
request.setAttribute("setErrorMsg","すでに登録されています。");
RequestDispatcher dispatcher=request.getRequestDispatcher("/WEB-INF/jsp/set.jsp");
dispatcher.forward(request, response);
}
//mutter1とする
for(Mutter mutter1:mutterList){
if(mutter1.getUserName().length()!=0||mutter1.getUserPass().length()!=0){
request.setAttribute("setErrorMsg", "すでに登録されています。");
RequestDispatcher dispatcher=request.getRequestDispatcher("/WEB-INF/jsp/set.jsp");
dispatcher.forward(request, response);
}else{
HttpSession session=request.getSession();
session.setAttribute("loginUser",user);
User loginUser=(User)session.getAttribute("loginUser");
Mutter mutter=new Mutter(loginUser.getName(),loginUser.getPass());
SetLogic setLogic=new SetLogic();
try{
setLogic.execute(mutter);
}catch(ClassNotFoundException e){
e.printStackTrace();
}
RequestDispatcher dispatcher=request.getRequestDispatcher("/WEB-INF/jsp/setResult.jsp");
dispatcher.forward(request, response);
}
}
}
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
List<Mutter>mutterList=loginLogic.execute(user);
if(mutterList.size()!=0){
request.setAttribute("setErrorMsg","すでに登録されています。");
RequestDispatcher dispatcher=request.getRequestDispatcher("/WEB-INF/jsp/set.jsp");
dispatcher.forward(request, response);
}
//mutter1とする
for(Mutter mutter1:mutterList){
if(mutter1.getUserName().length()!=0||mutter1.getUserPass().length()!=0){
request.setAttribute("setErrorMsg", "すでに登録されています。");
RequestDispatcher dispatcher=request.getRequestDispatcher("/WEB-INF/jsp/set.jsp");
dispatcher.forward(request, response);
}
内容は細かくわからないのですが、おそらくここは入力された情報でデータベースを照合して、データが有ればエラーメッセージを出す、という仕様ですよね?
であれば、照合結果のリストが空でない(mutterList.size()!=0
)時点で終わってますよね?
リストが空ならその次のfor文に入れませんし、空でないならデータベースにその情報が存在したということでその次のループに入る意味がないように思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
新規登録できないということが判明したら例外を投げちゃえばいいのではないでしょうか。そして、例外を捕捉した場合は(いろんな原因で例外が飛んでくるわけですが)まとめて処理すればすっきりしそうです。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.20%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
A-pZ
2016/04/30 00:42
if文やfor文など、処理が分岐または繰り返しするコードに関してはインデントをそろえたほうがデバッグしやすいですし、他の方も見やすいのでできればインデントは整えたほうがよいでしょう。データを取得していると思われる loginLogic.execute(user) の LoginLogic.execute(user)で行われている処理とその結果の内容がわからないですが、おそらく mutter1 の処理は不要かと思われます。
edoooooo
2016/04/30 14:23
ありがとうございます。修正してみます。