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