プログラミング中、あった問題 04
・追加画面へ遷移する方法を修正しました。
問題点:追加画面にuser_idの値をもらいません。
解決方法:一覧画面に追加ボタンがリンクではなく、POSTで追加画面へ遷移します。
以前の方法
(HTML)
<input type="button" onclick="location.href='add_list.jsp'" value="追加">
現在の方法
(HTML)
<form action="Edit" method="POST">
<input type="hidden" name="mode" value="addlist"> <input
type="hidden" name="id" value="<%=userid%>"> <input
type="submit" value="追加">
</form>
(Java)
case "addlist":
request.setAttribute("shain", shain);
request.getRequestDispatcher("/add_list.jsp").forward(request, response);
break;
・DBテーブル側で auto_increment を定義しました。
実行方法:HeidiSQLにunique keyにとしてtodo_idを作成しました。そして、Defaultにauto_incrementを追加しました。
・history.backの問題を修正しました。
問題点:history.back()はブラウザの戻るなので、正しく戻らない場合があります。(パスワード変更画面、ユーザー削除画面、todo追加画面、todo編集画面、todo削除画面)
解決方法:ログイン機能を利用して、全てのキャンセルボタンをPOSTで戻ります。指定画面へ戻る時、必要な属性を追加します。しないと、バッグになる場合があるかもしれません。
(HTML)
<form action="Edit" method="POST">
<div align="center">
<input type="hidden" name="id" value="<%=shain.getId()%>"> <input
type="hidden" name="pw" value="<%=shain.getPw()%>"> <input
type="hidden" name="mode" value="verification"> <input
type="submit" value="キャンセル">
</div>
</form>)
・一覧画面にログアウト機能を追加しました。
実行方法:POSTでindex画面へログアウトします。
(HTML)
<form action="Edit" method="POST">
<input type="hidden" name="mode" value="logout"> <input
type="submit" value="ログアウト">
</form>
(Java)
case "logout":
request.getRequestDispatcher("/index.jsp").forward(request, response);
break;
・Calendarメソッドの代わりにTimestampメソッドを使。
解決問題:現在の時間から1月を引きます。(以前のバッグ)
(Java)
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String str = sdf.format(timestamp);
・Todo一覧の削除機能を追加しました。
実行方法:一覧画面にデータを現す時、checkboxとtodo_idの値を渡します。そして、チェックしたデータのtodo_idによって削除します。
(HTML)member.jsp
<input type="checkbox" name="deletebox" value="<%=rset.getString(1)%>"><%=rset.getString(2)%></td>
(HTML)delete_list.jsp
<input type="hidden" name="deletebox" value="<%=rset.getString(1)%>"><%=rset.getString(2)%>
(Java)EditServlet
case "deletelist":
request.setAttribute("shain", shain);
request.setAttribute("id", userid);
request.setAttribute("pw", userpw);
request.setAttribute("status", status);
request.setAttribute("deletebox",selection);
try {
conn = ds.getConnection();
StringBuffer sql = new StringBuffer();
sql.append("SELECT`todo_id`,`todo_text` FROM `todo` WHERE todo_id LIKE '" + selection + "'");
System.out.println(sql);
pstmt = conn.prepareStatement(new String(sql));
pstmt.execute();
rset = pstmt.executeQuery();
request.setAttribute("select", rset);
request.getRequestDispatcher("/delete_list.jsp").forward(request, response);
rset.close();
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (Exception e) {
}
}
request.getRequestDispatcher("/delete_list.jsp").forward(request, response);
break;
(Java)ShainsBeans
public Boolean delete_list(){
try {
String sql = "DELETE FROM `company_db`.`todo` WHERE `todo_id`='" + deletebox + "'";
doDataBase(sql);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
未解決問題:複数の削除はできません。
・追加と削除が終わると、自動的に一覧画面へ戻るようにしました。
実行方法:ログイン機能を利用します。表面は一覧画面へ戻るけど、実際はもう一度ログインします。そうすると、長いコードを書くのは必要がありません。
(HTML)
<input type="hidden" name="id"
value="<%=shain.getId()%>"> <input type="hidden" name="pw"
value="<%=shain.getPw()%>"> <input type="hidden" name="mode"
value="deletelist_database"> <input type="submit" value="削除">
(Java)
if (status.equals("成功しました") && mode.equals("verification")
|| status.equals("成功しました") && mode.equals("deletelist_database")
|| status.equals("成功しました") && mode.equals("addlist_database"))
プロジェクト構造
index.jsp ログイン画面 (完成)
new_ID.jsp 新規登録画面 (完成)
member.jsp 一覧画面 (未完成) 完了ボタン、打消し線
delete_ID.jsp ID削除画面 (完成)
change_password.jsp パスワード変更画面 (完成)
add_list.jsp 追加画面 (完成)
delete_list.jsp 削除画面 (未完成)複数選択の削除できません
edit_list.jsp 編集画面 (未完成)編集機能
result.jsp 結果画面 (完成)
ShainBeans.java メソッドの実行 (一部分完成)
EditServlet.java ボタンで事件を選びます (一部分完成)