プログラミング中、あった問題 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 ボタンで事件を選びます (一部分完成)