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