質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

1回答

3524閲覧

フォローした人はフォロー解除ボタンを表示させたい

Yoshi--

総合スコア62

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

1グッド

1クリップ

投稿2017/06/07 01:03

サーブレット

java

1//フォロー登録に関するリクエストを処理するコントローラ 2 3package servlet; 4 5import java.io.IOException; 6 7import javax.servlet.ServletException; 8import javax.servlet.annotation.WebServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11 12import model.FollowLogic; 13import model.User; 14 15@WebServlet("/FollowServlet") 16public class FollowServlet extends ServletBase { 17 private static final long serialVersionUID = 1L; 18 19 protected void doPost(HttpServletRequest request, HttpServletResponse response) 20 throws ServletException, IOException { 21 22 // ログインユーザの取得 23 User loginUser = getLoginUser(request); 24 25 // リクエストパラメータの取得 26 request.setCharacterEncoding("UTF-8"); 27 String sFollowId = request.getParameter("followId"); 28 int followId = Integer.parseInt(sFollowId); 29 30 // フォロー処理 FOLLOWテーブルに追加 31 FollowLogic logic = new FollowLogic(); 32 logic.execute(loginUser.getUserId(), followId); 33 34 // フォロー完了画面にフォワード 35 forward("WEB-INF/jsp/followConfirm.jsp", request, response); 36 37 } 38} 39

DAO

java

1package dao; 2 3import java.sql.Connection; 4import java.sql.PreparedStatement; 5import java.sql.ResultSet; 6import java.util.ArrayList; 7import java.util.List; 8 9import model.FollowViewModel; 10import util.JDBCUtils; 11 12public class FollowDAO { 13 14 // FOLLOWテーブルに追加する 15 public void follow(int userId, int followId) { 16 try (Connection conn = JDBCUtils.getConnection()) { 17 18 String sql = "INSERT INTO FOLLOW (USER_ID, FOLLOW_ID) VALUES (?,?)"; 19 try (PreparedStatement pStmt = conn.prepareStatement(sql)) { 20 // INSERT文中の「?」に使用する値を設定しSQLを完成 21 pStmt.setInt(1, userId); 22 pStmt.setInt(2, followId); 23 24 // INSERT文を実行 25 int result = pStmt.executeUpdate(); 26 if (result != 1) { 27 throw new RuntimeException("フォローに失敗しました。"); 28 } 29 } 30 } catch (Exception e) { 31 throw new RuntimeException(e); 32 } 33 } 34 35 // 指定したuser_Id のフォロー数を取得 36 public int getFollowCount(int userId) { 37 int followCount = 0; 38 39 try (Connection conn = JDBCUtils.getConnection()) { 40 41 // FOLLOWテーブルからログインユーザーのフォローの数を表示 42 String sql = "SELECT COUNT (*) AS FOLLOWCOUNT FROM FOLLOW WHERE USER_ID = ?"; 43 44 try (PreparedStatement pStmt = conn.prepareStatement(sql)) { 45 // INSERT文中の「?」に使用する値を設定しSQLを完成 46 pStmt.setInt(1, userId); 47 // SELECTを実行 48 try (ResultSet rs = pStmt.executeQuery()) { 49 50 // 1件しか返って来ないのでif文 51 if (rs.next()) { 52 followCount = rs.getInt("FOLLOWCOUNT"); 53 } 54 } 55 } 56 } catch (Exception e) { 57 throw new RuntimeException(e); 58 } 59 return followCount; 60 } 61 62 // 指定したuser_Id のフォロワー数を取得 63 public int getFollowerCount(int userId) { 64 int followerCount = 0; 65 66 try (Connection conn = JDBCUtils.getConnection()) { 67 68 // FOLLOWテーブルからログインユーザーのフォロワーの数を表示 69 String sql = "SELECT COUNT (*) AS FOLLOWERCOUNT FROM FOLLOW WHERE FOLLOW_ID = ?"; 70 71 try (PreparedStatement pStmt = conn.prepareStatement(sql)) { 72 73 pStmt.setInt(1, userId); 74 // SELECTを実行 75 try (ResultSet rs = pStmt.executeQuery()) { 76 77 if (rs.next()) { 78 followerCount = rs.getInt("FOLLOWERCOUNT"); 79 80 } 81 } 82 } 83 } catch (Exception e) { 84 throw new RuntimeException(e); 85 } 86 return followerCount; 87 } 88 89 // 指定したuser_Idのフォロー 一覧の取得 90 public List<FollowViewModel> getFollowList(int userId) { 91 List<FollowViewModel> followList = new ArrayList<FollowViewModel>(); 92 93 try (Connection conn = JDBCUtils.getConnection()) { 94 95 // フォローしたユーザーの取得(自分は表示しない) 96 String sql = "SELECT USER.USER_ID AS USER_ID, USER.USER_NAME AS USER_NAME FROM USER " 97 + "INNER JOIN FOLLOW ON USER.USER_ID = FOLLOW.FOLLOW_ID " + "WHERE FOLLOW.USER_ID = ?"; 98 99 try (PreparedStatement pStmt = conn.prepareStatement(sql)) { 100 101 pStmt.setInt(1, userId); 102 103 // SELECTを実行 104 try (ResultSet rs = pStmt.executeQuery()) { 105 // SELECT文の結果をArrayListに格納 106 while (rs.next()) { 107 int followUserId = rs.getInt("USER_ID"); 108 String followUserName = rs.getString("USER_NAME"); 109 110 FollowViewModel follow = new FollowViewModel(followUserId, followUserName); 111 followList.add(follow); 112 } 113 } 114 } 115 } catch (Exception e) { 116 throw new RuntimeException(e); 117 } 118 return followList; 119 } 120 121 // 指定したuser_Idのフォロワー 一覧の取得 122 public List<FollowViewModel> getFollowerList(int userId) { 123 List<FollowViewModel> followerList = new ArrayList<FollowViewModel>(); 124 125 try (Connection conn = JDBCUtils.getConnection()) { 126 127 // フォローしたユーザーの取得(自分は表示しない) 128 String sql = "SELECT USER.USER_ID AS USER_ID, USER.USER_NAME AS USER_NAME FROM USER " 129 + "INNER JOIN FOLLOW ON USER.USER_ID = FOLLOW.USER_ID " + "WHERE FOLLOW.FOLLOW_ID = ?"; 130 131 try (PreparedStatement pStmt = conn.prepareStatement(sql)) { 132 133 pStmt.setInt(1, userId); 134 135 // SELECTを実行 136 try (ResultSet rs = pStmt.executeQuery()) { 137 // SELECT文の結果をArrayListに格納 138 while (rs.next()) { 139 int followerUserId = rs.getInt("USER_ID"); 140 String followerUserName = rs.getString("USER_NAME"); 141 142 FollowViewModel follower = new FollowViewModel(followerUserId, followerUserName); 143 followerList.add(follower); 144 } 145 } 146 } 147 } catch (Exception e) { 148 throw new RuntimeException(e); 149 } 150 return followerList; 151 } 152 153 // フォローを解除する 154 public void followDelete(int userId, int followId) { 155 try (Connection conn = JDBCUtils.getConnection()) { 156 157 String sql = "DELETE FROM FOLLOW WHERE USER_ID = ? AND FOLLOW_ID = ?"; 158 try (PreparedStatement pStmt = conn.prepareStatement(sql)) { 159 // INSERT文中の「?」に使用する値を設定しSQLを完成 160 pStmt.setInt(1, userId); 161 pStmt.setInt(2, followId); 162 163 // INSERT文を実行 164 int result = pStmt.executeUpdate(); 165 if (result != 1) { 166 throw new RuntimeException("フォロー解除に失敗しました。"); 167 } 168 } 169 } catch (Exception e) { 170 throw new RuntimeException(e); 171 } 172 } 173 174} 175

JSP

java

1<!-- メイン画面を出力する --> 2<%@ page language="java" contentType="text/html; charset=UTF-8" 3 pageEncoding="UTF-8"%> 4<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 5<!DOCTYPE html> 6<html> 7<head> 8<meta charset="UTF-8"> 9<title>どこつぶ</title> 10<link rel="stylesheet" type="text/css" 11 href="${pageContext.request.contextPath}/css/style.css"> 12</head> 13<body> 14 <jsp:include page="header.jsp"/> 15 <div id="name-bar"> 16 <p class="name"> 17 <c:out value="${loginUser.userName}" /> 18 </p> 19 <a href="${pageContext.request.contextPath}/FollowList" class="follow-font">フォロー</a> 20 <a class=follow-count> 21 <c:out value="${countData.followCount}" /> <!-- リクエストスコープ request.setAttribute("followCount", followCount);--> 22 </a> 23 <br> 24 <a href="${pageContext.request.contextPath}/FollowerList" class="follow-font">フォロワー</a> 25 <a class=follow-count> 26 <c:out value="${countData.followerCount}" /> 27 </a> 28 <br> 29 <a href="${pageContext.request.contextPath}/FavoriteList" class="follow-font">お気に入り</a> 30 <a class=follow-count> 31 <c:out value="${countData.favoriteCount}" /> 32 </a> 33 <form action="${pageContext.request.contextPath}/Main" method="post"> 34 <textarea name="text" rows="6" class="tweet-form" placeholder="つぶやく内容を入力してください。"></textarea> 35 <br> <input type="submit" value="つぶやく" class="tweet-button"> 36 </form> 37 <c:if test="${not empty errorMsg}"> 38 <p>${errorMsg}</p> 39 </c:if> 40 </div> 41 <div id="tweet-bar"> 42 <p class=tweet-title><つぶやき一覧></p> 43 <c:forEach var="mutter" items="${mutterList}"> 44 <p class="tweet-user-name"> 45 <c:out value="${mutter.userName}" /> 46 </p> 47 <pre class="tweet"><c:out value="${mutter.text}" /> 48 </pre> 49 <div class=follow> 50 <form action="${pageContext.request.contextPath}/FavoriteServlet" 51 method="post"> 52 <input type="hidden" name="tweetId" value="${mutter.tweetId}"> <!-- name=部品の名前 value=送信されるデータ --> 53 <input type="submit" value="お気に入り登録する" class="follow-button"> 54 </form> 55 </div> 56 </c:forEach> 57 </div> 58 <div id="user-bar"> 59 <p class=user-list-title><オススメユーザー></p> 60 61 <c:forEach var="user" items="${userList}"> 62 <p class="user-list-name"> 63 <div class=user> 64 <form action="${pageContext.request.contextPath}/OtherUsersServlet" 65 method="post"> 66 <input type="hidden" name="followId" value="${user.userId}"> 67 <input type="submit" value="${user.userName}" class="user-list-name"> 68 </form> 69 </div> 70 <div class=follow> 71 <form action="${pageContext.request.contextPath}/FollowServlet" 72 method="post"> 73 <input type="hidden" name="followId" value="${user.userId}"> 74 <input type="submit" value="フォローする" class="follow-button"> 75 </form> 76 </div> 77 </c:forEach> 78 </div> 79</body> 80</html> 81

現在フォローした人にもフォローするボタンが表示されるのですが
フォローした人にはフォロー解除ボタンを表示させたいのですが
サーブレットにどのようなif文を書けばいいのでしょうか??

Kawboy442👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2017/06/07 02:01

見た感じjspの方ではフォロー・フォロワーは数だけでオススメユーザーしか並べてないようですが・・。
guest

回答1

0

こんにちは
初めにこの質問に対する答えを私は持っていません
しかし私も同じ問題を抱えています
そこでよければですが私とアイデアを交換しあいませんか?
もっともこのメッセージをご覧頂けていたら、ですが...
一応以下に私が今考えている仮の実装案を記載しておきます

・データベースから既存のコメントを取得する際、フォローしているユーザーのIDをリストで取得し、
jsp側で対象のユーザーのIDと合致するか判定させる
問題点:新しく更新されたコメントへの対処が未定、単純にスマートさに欠ける

・データベースへの問い合わせの段階で判定し、結果を表示する
問題点:仮にデータベースでの処理が上手くいったとしても現在コメント取得はサーバー側で更新した情報を
非同期で自動的に取得させる方法をとっている為、ユーザーごとの対応は難しい

投稿2019/08/27 01:11

jiro-sima

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問