プログラミング中、あった問題 08

・!"#$%&'()=~<>+? というIDが登録されること
問題点:記号が影響されました。SQLが実行できません。
解決方法:特殊記号を変わります。

 

    id = id.replaceAll("(?i)(')", "''");
    pw = pw.replaceAll("(?i)(')", "''");


・アカウント削除 パスワード変更 Todo編集機能 Todo追加機能 Todo削除機能
問題点:HTMLで特殊記号が影響されました。
解決方法:特殊記号を変わります。

    String userid = shain.getId();
    String userpw = shain.getPw();
    userid = userid.replaceAll("(?i)(&)", "&amp;");
    userid = userid.replaceAll("(?i)(')", "&#039;");
    userid = userid.replaceAll("(?i)(\")", "&quot;");
    userpw = userpw.replaceAll("(?i)(&)", "&amp;");
    userpw = userpw.replaceAll("(?i)(')", "&#039;");
    userpw = userpw.replaceAll("(?i)(\")", "&quot;");
    userid = userid.replaceAll("(?i)(<)", "&lt;");
    userid = userid.replaceAll("(?i)(>)", "&gt;");
    userpw = userpw.replaceAll("(?i)(<)", "&lt;");
    userpw = userpw.replaceAll("(?i)(>)", "&gt;");

   
   
・HTMLのディスプレイ
想定結果と違いました。余計な記号を表しました。
正しい:!"#$%&'()=~<>+?
結果:+?"> !"#$%&'()=~<>+?
解決方法:特殊記号を変わります。

     String todo_text = rset.getString("todo_text");
     todo_text = todo_text.replaceAll("(?i)(&)", "&amp;");
     todo_text = todo_text.replaceAll("(?i)(')", "&#039;");
     todo_text = todo_text.replaceAll("(?i)(\")", "&quot;");
     todo_text = todo_text.replaceAll("(?i)(<)", "&lt;");
     todo_text = todo_text.replaceAll("(?i)(>)", "&gt;");



・記号のアカウントは編集機能が使えません。
問題点:URLで遷移することができませんでした。
解決方法:IDとPASSWORDをエンコードします。

    String userid_utf8 = URLEncoder.encode(userid, "UTF-8");
    String userpw_utf8 = URLEncoder.encode(userpw, "UTF-8");



DataBaseの日時を修正しました。
以前:年月日だけです。
現在:時分秒を追加しました。

    Timestamp timestamp = new Timestamp(System.currentTimeMillis());
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String time = sdf.format(timestamp);


・日時の追加
実行方法:DataBaseからデータの保存時間をもらいます。

sql.append("SELECT `todo_id`,`todo_text`,`finished`,`upload_date` FROM `todo` WHERE user_id = '" + userid + "'");

・編集機能の更新日時を追加しました。

String sql = "UPDATE `todo` SET `todo_text` ='" + data + "',`upload_date` ='" + time + "' WHERE `todo_id` = '" + todoid + "'";

・改善方向
日時の型が変わります。
現在の型:2019-05-09 00:00:00
想定の型:2019年05月09日(木)00:00

プログラミング中、あった問題 07

 

・削除機能が実行すると、間違えた画面を遷移しました。

問題点:try catchがfalseの値をもらいました。

解決方法:例外処理を追加しました。

Java
public Boolean delete_list(){
        try {
            String todo= todoid.split(",");
            for(int i=1; i<=todo.length; i++)
            {
            String sql = "DELETE FROM `company_db`.`todo` WHERE  `todo_id`='" + todo[i] + "'";
           
            doDataBase(sql);
           
            }
            return true;
        }
        catch (ArrayIndexOutOfBoundsException arrayIndexOutOfBoundsException) {
            arrayIndexOutOfBoundsException.printStackTrace();
            return true;

        }catch (Exception e) {
            e.printStackTrace();
            return false;
        }
   
    }


・完了ボタンを追加しました。

問題点:一番目のボタンの機能があるけど、他のボタンがありませんでした。

解決方法:HTMLは目標を明確に認識しなかったので、他のボタンが実行できませんでした。混乱しないために、変数を追加しました。

(HTML)
<%int target = 1; %>
<p id="<%=target%>">
    <input type="checkbox" name="todoid" value="<%=rset.getString(1)%>@&<%=rset.getString(2)%>">
    <%String source = rset.getString(2);%>
    <%String result = URLEncoder.encode(source, "UTF-8");%>
    <a href="Edit?&mode=editlist&todoid=<%=rset.getString(1)%>&data=<%=result%>&id=<%=userid%>&pw=<%=userpw%>">
    <%String sign = rset.getString(2);%>
    <%sign = sign.replaceAll("(?i)(<)", "&lt;");%>
    <%sign = sign.replaceAll("(?i)(>)", "&gt;");%>
    <%=sign%>
</a>
    <input type="button" id="<%=target%>" value="完了" onclick="changeUnderline('<%=target%>');" />
</p>
    <%target=target+1; %>


・(CheckBox)何も選択しない時、失敗画面へ遷移します。

(Java)
case "deletelist":
        request.setAttribute("shain", shain);
        request.setAttribute("id", userid);
        request.setAttribute("pw", userpw);
        request.setAttribute("status", status);   
        String todo = request.getParameterValues("todoid");
        if (todo == null) {
            status = "削除失敗しました。";
            message = "もう一度選択してください。";
        }

        else {
        request.getRequestDispatcher("/delete_list.jsp").forward(request, response);
        }
        break;


・完了ボタンの文字が変更できません。
問題点:HTMLのIDが重複しました。

解決方法:新しい変数を追加しました。

(Javascript)
<script type="text/javascript">
    function changeUnderline(todo_id) {
        var btn_obj = document.getElementById("btn_" + todo_id);
        var text_obj = document.getElementById("text_" + todo_id);

       
        if (text_obj.style.textDecoration == "line-through") {
            text_obj.style.textDecoration = "none";
            btn_obj.value = "完了";
        } else {
            text_obj.style.textDecoration = "line-through";
            btn_obj.value = "未完了";
        }
    }
</script>

(HTML)
<p id="text_<%=rset.getString("todo_id")%>">
        <input type="checkbox" name="todoid"
            value="<%=rset.getString("todo_id")%>@&<%=rset.getString("todo_text")%>">
        <%
            String source = rset.getString("todo_text");
            String result = URLEncoder.encode(source, "UTF-8");
        %>
    <a href="Edit?&mode=editlist&todoid=<%=rset.getString("todo_id")%>&data=<%=result%>&id=<%=userid%>&pw=<%=userpw%>">
        <%
            String sign = rset.getString("todo_text");
            sign = sign.replaceAll("(?i)(<)", "&lt;");
            sign = sign.replaceAll("(?i)(>)", "&gt;");
        %>
        <%=sign%>
        </a> <input type="button" id="btn_<%=rset.getString("todo_id")%>" value="完了"
        onclick="changeUnderline('<%=rset.getString("todo_id")%>');" />
        </p>

・rset.getStringの修正

以前:rset.getString(1)

現在:rset.getString("todo_id")


・変数名を更新
分かりやすくなりました。

・PASSWORD変更と新規登録のPASSWORD確認機能を修正
(Javascript)
<script language='javascript' type='text/javascript'>
            function check(input) {
                if (input.value != document.getElementById('password').value) {
                    input.setCustomValidity('パスワードは正しくありません');
                } else {
                    input.setCustomValidity('');
                }
            }
</script>


プロジェクト構造
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 ボタンで事件を選びます (完成)

プログラミング中、あった問題 06

 

・日本語のエンコード

問題点:編集画面へ遷移する時、todo_textの文字をエンコードして、URLに値を渡します。

実行方法:エンコードします。

(HTML)
<%@page import="java.io.*"%>
<%@page import="java.net.*"%>
<%String source = rset.getString(2);%>   
<%String result = URLEncoder.encode(source,"UTF-8");%>
<a href="Edit?&mode=editlist&deletebox=<%=rset.getString(1)%>&data=<%=result%>&id=<%=userid%>&pw=<%=userpw%>">


・保存機能の文字化け
問題点:日本語を保存する時、文字化けになってしまいました。

解決方法:Windows-31JUTF-8に変更しました。

Java
request.setCharacterEncoding("UTF-8");


・特殊記号のディスプレー
問題点:HTMLに特殊記号を表します。

実行方法:特殊記号を変わりました。

(HTML)
<%String sign = rset.getString(2);%>
<%sign = sign.replaceAll("(?i)(<)", "&lt;");%>
<%sign = sign.replaceAll("(?i)(>)", "&gt;");%>
<%=sign%>

・複数選択の削除できません。

問題点:Servletがページから一つだけ値をもらいます。

解決方向:複数選択する時、どうやって複数の値をもらいます?

実行方法:Servletでrequest.setAttributeの代わりにrequest.getParameterValuesを使いました。選択したtodo_idを配列になりました。


・削除画面のディスプレー

問題点:配列がどうやってSQLに代入します?

解決方法:以前の方法を捨てました(SQLから値をもらて、ページで値を表します)。現在は一覧画面から値をもらって、削除画面を表します。

(HTML)

(member.jsp
<input type="checkbox" name="todoid" value="<%=rset.getString(1)%>&<%=rset.getString(2)%>">

 

(delete_list.jsp
<%String todo = request.getParameterValues("todoid");%>
<%
    for (int i = 0; i < todo.length; i++) {
        %>
            <table border="0">
                <tr>
                    <td>
                    <%String a = todo[i]; %>
                    <%String
b =a.split("&");%>
                    <%String c = b[1]; %>
                    <%=c%>

                    </td>
                </tr>
            </table>
        <%
    }
%>


・複数削除機能

問題点:複数の値をServletに渡して、SQLに指定したtodo_idを削除します。

解決方向:Servletに処理した文字列を渡して、try catchの中にfor loopを追加します。

実行方法:文字列がsplitで指定記号にとして分別しました。

(HTML)
<% } %>
<%String d = "0";%>
<%for (int i = 0; i < todo.length; i++) {%>
<%String a = todo[i];%>
<%String b = a.split("&");%>
<%String c = b[0];%>
<%d = d + "," + c;%>
<% } %>
<input type="hidden" name="todoid" value="<%=d%>">

(JAVA)
public Boolean delete_list(){
    try {
        String todo= todoid.split(",");
        for(int i=1; i<=todo.length; i++)
        {
        String sql = "DELETE FROM `company_db`.`todo` WHERE  `todo_id`='" + todo[i] + "'";
        doDataBase(sql);
        }
        return true;
        } catch (Exception e) {
        e.printStackTrace();
        return false;
        }   
    }



未解決問題
複数削除機能が完成しましたが、間違えた画面を遷移しました。
何も選択しない時、ヒントを表します。
Loopで生成したボタンの機能が正常に実行しますか?
複数以上のボタンは複数ファンクションを作らなければなりませんか?
ログインすると、以前操作した状態を戻ります。



プロジェクト構造
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 ボタンで事件を選びます (一部分完成)

プログラミング中、あった問題 05

 

 ・編集画面へ遷移するようにしました。

実行方法:一覧画面で生成したデータにリンクを付けながら、値を渡します。

(HTML)
<input type="checkbox" name="deletebox" value="<%=rset.getString(1)%>">
<a href="Edit?&mode=editlist&deletebox=<%=rset.getString(1)%>&data=<%=rset.getString(2)%>&id=<%=userid%>&pw=<%=userpw%>"><%=rset.getString(2)%></a>

・編集機能

実行方法:URLからtodo_idとto_textをもらいます。

(HTML)

(やった方法)
<%
    String a = request.getQueryString();
    a=a.substring(25);
    String b =a.split("&");
    String c = request.getQueryString();
    c=c.substring(33);
    String
d =c.split("&");

%>
<input type="hidden" name="id" value="<%=shain.getId()%>">
<input type="hidden" name="pw" value="<%=shain.getPw()%>">
<input type="hidden" name="deletebox" value="<%=b[0]%>">
<input required type="text" name="data" value="<%=d[0]%>">
<input type="hidden" name="mode" value="editlist_database">

(改善した方法)
<%
    ShainBeans shain = (ShainBeans) request.getAttribute("shain");
    String todo_id = request.getParameter("deletebox");
    String todo_text = request.getParameter("data");

%>
<input type="hidden" name="id" value="<%=shain.getId()%>">
<input type="hidden" name="pw" value="<%=shain.getPw()%>">
<input type="hidden" name="deletebox" value="<%=todo_id%>">
<input required type="text" name="data" value="<%=todo_text%>">
<input type="hidden" name="mode" value="editlist_database">

(Java)
public Boolean edit_list(){
    try {
        String sql = "UPDATE `todo` SET `todo_text` ='" + data + "' WHERE `todo_id` = '" + deletebox + "'";
            doDataBase(sql);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

未解決問題:英数だけ使えます。他の文字を使うなら、エラーになってしまいます。
ブラウザーによって状況も違います。Chromeで実行するのは大丈夫ですけど、文字化けになってしまいました。Eclipseのブラウザーで実行するのはできません。
推測原因:リンクで値を渡す時、英数だけ使えます。
試した方法:URLをエンコードします。保存する時、デコードする必要性があると思います。

方法1:Tomcatの配置を変わりました。(失敗)
(Tomcat)
<Connector port="8080" protocol="HTTP/1.1"  
connectionTimeout="20000"  
redirectPort="8444"  
useBodyEncodingForURI="true" URIEncoding="UTF-8"/> 

方法2:HTMLでエンコードしました。(失敗)
(HTML)
<script type="text/javascript" charset="UTF-8">
                str1 = "<%=rset.getString(1)%>";
                str2 = "<%=rset.getString(2)%>";
                id = "<%=userid%>";
                pw = "<%=userpw%>";
                href = function(){
                location.href = encodeURI("Edit?&mode=editlist&deletebox="+str1+"&data="+str2+"&id="+id+"&pw="+pw);
                }                       
                </script>
                <a href="javascript:href()">
                <%=rset.getString(2)%>
                </a>
               
方法3:Javaでエンコードしました。(失敗)
(Java)
String str = new String(request.getParameter("data").getBytes("iso-8859-1"), "utf-8");

・ボタン事件の練習
実行方法:JSPにJavaScriptで事件を作りました。ボタンを押すと、取り消し線を付けます。もう一度押すと、取り消し線を消します。
<script type="text/javascript">
    function changeUnderline(idname) {
        var obj = document.getElementById(idname);
        if (obj.style.textDecoration == "line-through") {
            obj.style.textDecoration = "none";
            document.getElementById("test").value = "完了";
        } else {
            obj.style.textDecoration = "line-through";
            document.getElementById("test").value = "未完了";
        }
    }
</script>

<p id="target">練習</p>
<input type="button" id="test" value="完了"
onclick="changeUnderline('target');" />

問題点:URLに取り消し線を付けることができますか?(できました)
            while Loopでボタンの生成は正常に実行しますか?(できません)
            複数以上のボタンは複数ファンクションを作らなければなりませんか?(自分の方法はできません。)
            ログインすると、以前操作した状態を戻ります。

       

・複数削除
問題点:while Loopで生成したデータは値を別の方法で次のページに渡します。



プロジェクト構造
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 ボタンで事件を選びます (一部分完成)

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

プログラミング中、あった問題 03

・PASSWORD確認PASSWORD確認

やった方法 : javascriptで条件式を書きましたが、うまくできません。

解決方法 : PASSWORDのINPUTの属性を追加しました。

(HTML)

onchange="this.setCustomValidity(this.validity.patternMismatch ? 'パスワードの確認が正しくありません' : ''); 

if(this.checkValidity()) form.password_two.pattern = this.value;"

 

・画面レイアウトの調整

PASSWORDの入力フォームとPASSWORDの確認入力フォームを整列します。

(HTML)

<div style="padding-left: 592px;">

問題点 : ブラウザーの画面の大きさによって位置を変わります。

解決方法 : テーブルを作成します。

(HTML)

<table border="0"><tr><td></td></tr>

 

指摘 => レイアウトは CSSで調整すること。 HTMLで調整しないようにする。 

(可能であればbootstrapを使用してほしいが、のちのちの勉強課題)

 

 

・削除画面とパスワード変更画面へ遷移しません

問題点 : EclipseブラウザーがWeb サイトはページを表示できません。(削除画面だけ)                Chromeは削除ボタンと変更ボタンを押すと、削除画面へ遷移します。

解決方法 : 違うformで定義します。

(HTML)

<form action="Edit" method="POST"> <input type="hidden" name="mode" value="delete"> <input type="hidden" name="id" value="<%=userid%>"> <input type="submit" value="アカウント削除"> </form>

<form action="Edit" method="POST"> <input type="hidden" name="mode" value="change"> <input type="hidden" name="id" value="<%=userid%>"> <input type="hidden" name="pw" value="<%=userpw%>"> <input type="submit" value="パスワード変更"> </form>

未解決点 : EclipseブラウザーがWeb サイトはページを表示できません。(削除画面だけ)

 

 

・ToDoテーブルを生成して、既定値(デフォルト値)を付きます。

問題点:自動的に日時を挿入します。

解決方法:Calendarメソッド。

JAVA

import java.util.Calendar;Calendar cal=Calendar.getInstance();

cal.get(Calendar.YEAR)cal.get(Calendar.MONTH)cal.get(Calendar.Date)
未解決バッグ:現在の時間から1月を引きます。

 

指摘 =>  Timestamp timestamp = new Timestamp(System.currentTimeMillis());

 

 

 

 

・Databaseの資料のディスプレイ

問題点 : 以前のコードと同じですが、エラーになってしまいました。

解決方法 : デバッグで問題を発見しました。値の型はDataBaseの型と違うので、データ(data)を現すことができませんでした。

(HTML)

<%=rset.getString(1)%>

 

 

・Todoの追加

方法:ID登録機能と同じ作り方

未解決問題:追加画面はIDの値をもらいません。

 

指摘=>DBテーブル側で auto_increment を定義する。

 

 

 

・現在のプロジェクト構造
index.jsp  ログイン画面 (完成)
new_ID.jsp 新規登録画面 (完成) 
member.jsp 一覧画面 (一部分完成) 
delete_ID.jsp ID削除画面 (完成)
change_password.jsp パスワード変更画面 (完成) 
add_list.jsp 追加画面 (未完成) IDの値をもらいません。
delete_list.jsp 削除画面 (未完成) 機能をまだ追加しません。
edit_list.jsp  編集画面 (未完成) 機能をまだ追加しません。
result.jsp 結果画面 (一部分完成)

ShainBeans.java メソッドの実行 (一部分完成)
EditServlet.java  ボタンで事件(イベント event)を選びます (一部分完成)

プログラミング中、あった問題 02

 

コンパイルのエラー

JAVAの更新ので、コードがエラーになってしまいました。

解決方法:Right click on project - >BuildPath - >Configure BuildPath - >Libraries tab - >Double click on JRE SYSTEM LIBRARY - >Then select alternate JRE

 

・画面入力部品の変更

追加画面の入力以前はinputで入力フォームを生成します。

大量に入力するために、textareaで入力フォームを生成します。

(HTML)

<textarea name="kansou" rows="20" cols="50">記入してください。</textarea>

 

CSSの反映

JSPCSSの連携WebContentの下にCSSを置きます。JSPにリンクを付けます。

<link rel="stylesheet" type="text/css" href="/ProjectName/css/style.css">

 

 

Todoの勉強

参考ページ

サンプルWEBアプリケーションの仕様

3. チュートリアル(Todoアプリケーション) — TERASOLUNA Global Framework 


TODOの一覧表示

TODOを全件表示します。


TODOの登録(新規ボタン)

追加画面に遷移して、フォームから送信されたTODOを保存します。


TODOの完了(完了ボタン)

完了のTODOは打ち消し線で装飾して、”Delete”用のボタンが付きます。

未完了のTODOに対しては”Finish”と”Delete”用のボタンが付きます。


TODOの削除(削除ボタン) 

フォームから送信されたtodoIdに対応するTODOを削除するTODOが存在しない場合はエラーコードで例外をスローします。______________________________________________________________________

 

 

・DataBase Table作成

Datatypeにboolean型がありませんでした。

解決方法:tinyintで定義しました。

参考ページ

An Introduction to MySQL BOOLEAN Data Type


プロジェクト構造

index.jsp  ログイン画面 (完成) 画面更新

new_ID.jsp 新規登録画面 (未完成)ToDoテーブルの生成、PASSWORD確認機能

member.jsp 一覧画面 (一部分完成)

delete_ID.jsp ID削除画面 (未完成)ToDoテーブルの削除

change_password.jsp パスワード変更画面 (未完成) PASSWORD確認機能

add_list.jsp 追加画面 (未完成) 機能をまだ追加しません。

delete_list.jsp 削除画面 (未完成) 機能をまだ追加しません。

edit_list.jsp  編集画面 (未完成) 機能をまだ追加しません。

result.jsp 結果画面 (一部分完成)


ShainBeans.java メソッドの実行 (一部分完成)

EditServlet.java  ボタンで事件を選びます (一部分完成)

 

不要な機能を削除しました。

アカウントの検索機能

自動的に個人的なテーブルを生成機能

 

・削除機能で発生した問題

一覧画面で削除ボタンを押すと、削除確認前に、アカウントを削除しまいました。。

解決方法:switch caseにbreakを付けました。

JAVA

case "delete":

request.setAttribute("shain", shain); request.getRequestDispatcher("/delete_ID.jsp").forward(request, response);

break;
case "delete_id":

status = "削除成功しました";

if (shain.deleteData() == false) {

status = "削除失敗しました";

message = "管理者に連絡してください。";

} break;


・一覧画面へ戻る機能

やった方法:キャンセルボタンにログイン機能を追加しました。同じIDとPASSWORDログインします。

解決方法:HTMLで前のページへ戻ります。

(HTML)

<input type="button" onclick="history.back()" value="キャンセル"></input>

 

指摘 => history.back() は ブラウザの戻るなので 正しく戻らない場合がある。

これは使わないようにする。