質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.04%

JSP Struts1.3アプリ制作

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 830

MRA4410

score 2

現在JAVA研修の集大成としてアプリ制作をしています。私は常備薬管理アプリというデータベースに薬名・効果効能・個数を登録し日付と番号をつけて表示、追加、検索、削除、編集の昨日を付ける設定でとりくんでいます。表示・追加・検索については無事出来ましたが、削除と編集が出来ていません。削除と編集は登録時に割り振られたUNIQUEの一意シーケンス番号を使って一覧表示画面から一行ごとに行いたいのですが行き詰っています。未完成のソースコードを載せますので間違いや不足等あれば教えてください。

MedicineForm

package form;

import java.util.List;

import org.apache.struts.action.ActionForm;

public class MedicineForm extends ActionForm{
private String no;
private String date;
private String name;
private String topic;
private String count;
private List<Rec> data;

public String getNo() {
return no;
}

public void setNo(String no) {
this.no = no;
}

public String getDate() {
return date;
}

public void setDate(String date) {
this.date = date;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getTopic() {
return topic;
}

public void setTopic(String topic) {
this.topic = topic;
}

public String getCount() {
return count;
}

public void setCount(String count) {
this.count = count;
}

public List<Rec> getData() {
return data;
}

public void setData(List<Rec> data) {
this.data = data;
}
}

MediDelAction(WHERE no = の後で詰まっています)

package action;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
public class MediDelAction extends Action{
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {

String sql = "DELETE FROM medicine WHERE no = ";
String url = "jdbc:oracle:thin:@localhost:1521:XE";
try (Connection con = DriverManager.getConnection(url, "SYSTEM", "abc");
Statement stmt = con.createStatement()){
stmt.executeUpdate(sql);

} catch (SQLException e) {
System.err.println(e);
}

return (mapping.findForward("delete"));

}
}

Delete.jsp(この画面で「はい」ボタンをクリック後削除したいです)

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<html:html lang="ja">
<body>
<h4>本当に削除してよろしいですか?</h4>
<html:form action="/del">
<button type="button" onclick="location.href='Top.jsp'">はい</button>
<button type="button" onclick="location.href='List.jsp'">いいえ</button>

</html:form>
</body>
</html:html>

EditAction(WHERE no = の後で詰まっています)
package action;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import form.MedicineForm;
import form.Rec;

public class EditAction extends Action{
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {

MedicineForm mf = (MedicineForm) form;
long date = System.currentTimeMillis();
String name = mf.getName();
String topic = mf.getTopic();
String count = mf.getCount();

List<Rec> data = new ArrayList<Rec>();
String url = "jdbc:oracle:thin:@localhost:1521:XE";
try (Connection con = DriverManager.getConnection(url, "System", "abc");
Statement stmt = con.createStatement()){
String sql = "UPDATE medicine SET day =" + date + ", name = '" + name + "',topic ='" + topic + "',count ='" + count + "' WHERE no = ";
stmt.executeUpdate(sql);
ResultSet rs = stmt.executeQuery("SELECT * FROM medicine");
while (rs.next()){
Date d = new Date(rs.getLong("day"));
data.add(new Rec(String.format("%tF %<tR",d),
rs.getString("no"),rs.getString("name"),rs.getString("topic"), rs.getString("count")));
}
}    catch (SQLException e){
System.err.println(e);
}

mf.setData(data);

return(mapping.findForward("edit"));
}

}

一覧表示画面(List.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>
<html:html lang="ja">
<body>
<h3>薬箱</h3>
<html:form action="/list">
<table border="1" style="white-space: pre;">
<tr>
<th>No</th>
<th>日付</th>
<th>薬名</th>
<th>効果・効能</th>
<th>個数</th>
</tr>
<logic:iterate id="line" name="MedicineForm" property="data"
type="form.Rec" scope="request">
<tr>
<td><bean:write name="line" property="no" />
</td>
<td><bean:write name="line" property="date" />
</td>
<td><bean:write name="line" property="name" />
</td>
<td><bean:write name="line" property="topic" />
</td>
<td><bean:write name="line" property="count" />
</td>
<td><button type="button" onclick="location.href='Edit.jsp'">編集</button>
</td>
<td><td><button type="button" onclick="location.href='Delete.jsp'">削除</button>
</tr>
</logic:iterate>
</table>
</html:form>
<html:link page="/Top.jsp">トップへ</html:link>
</body>
</html:html>

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

削除画面で削除対象となる番号(no)を渡していますかね。

削除画面で、削除する対象の番号をActionクラスへ渡し、それを受けてSQLが削除するレコードの条件となるnoを削除すればよいかと。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

"/confirm.do?no=xx"などで、確認用のアクションクラスを作って削除したい番号をリクエストパラメータで渡して確認用のJSPを表示させ、そこから削除用のアクションに投げればいいのではないかと。。
あと少し気になるのは、SQLのステートメントはjava.sql.Statementではなく、java.sql.PreparedStatmentをつかった方が安全だと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる