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

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

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

Q&A

2回答

2076閲覧

JSP Struts1.3アプリ制作

退会済みユーザー

退会済みユーザー

総合スコア0

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Struts

StrutsはJava向けのWebアプリケーションフレームです。MVCモデルに基づいており、JSPやJavaサーブレットを組み合わせ、アプリケーション構築時に使用する各機能を提供しています。

0グッド

0クリップ

投稿2017/08/16 02:51

現在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>

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

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

投稿2017/10/17 11:15

sir_nake

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

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

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

投稿2017/09/03 15:35

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問