質問です。
現在Mysqlから取得した値を一覧画面のjspで表示し、そこから入力フォームのjspに移行し、入力した値でMysqlへInsert、またはupdate文を実行するコードを作成中です。
Insertの流れは完成しているのですがUpdateの流れがうまくいかず困っています。
入力用のjspはInsertとupdateで同じものを使用し、更新の場合は移行するボタンにキー情報となる"id"の値を渡してそれを入力フォームへ表示させるようにしたいのですがこの部分で詰まっています。
以下、一覧と入力のjspとなります。
<h1>一覧</h1>
<a href="./Detail">新規</a>
<body>
<TABLE border="1">
<TR>
<TH>No</TH>
<TH>氏名</TH>
<TH>氏名(ひらがな)</TH>
<TH>更新</TH>
<TH>削除</TH>
</TR>
<TR>
<c:forEach var="tmp" items="${list}">
<TD><c:out value="${tmp.Id}" /></TD>
<TD><c:out value="${tmp.name}" /></TD>
<TD><c:out value="${tmp.nameHiragana}" /></TD>
<TD><a href="./Detail?Id=${tmp.Id}">詳細</a></TD>
<TD><a href="./Detail?Id=${tmp.Id}" onClick="window.confirm('[${tmp.abbreviation}][${tmp.name}]を削除しますか?');">削除</a></TD>
<TR/>
</c:forEach>
</table>
<h1>更新</h1>
<form action="./Detail" method="post">
<input type="hidden" name="Id" value="id ">//DBのカラム名"id"
氏名<input type="text" name="name" size="20" maxlength="20" value="${tmp.name}" ><br>
氏名(ひらがな)<input type="text" name="nameHiragana" size="20" maxlength="20"><br>
<input type="submit" value="登録" />
</form>
</body>
今のところ氏名の部分だけ表示させようとしていますがうまくいかないです。
どこに問題があるでしょうか、詳しい方いらっしゃればご指摘願います。
追記です。
どこの部分が必要かがわからないので関係ありそうな部分を全て記載します。
長文になって申し訳ありません・・・
public class listDao {
private static final String url = "jdbc:mysql://localhost:3306/test";
private static final String user = "root";
private static final String password = "";
private static Connection conn = null; // Connectionクラス
private static PreparedStatement pstmt = null; // Statementクラス
private static ResultSet rs = null; // ResultSetクラス
public ArrayList<Listinfo> findAll(String[] args) {
ArrayList<Listinfo> listInfos = new ArrayList<Listinfo>();
// SQL文
String sql = "SELECT * FROM e_state";
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, user, password);
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()) {
// 結果表からデータを取得
Listinfo list = new Listinfo();
list.setEmployeeId(rs.getString("id"));
list.setName(rs.getString("name"));
list.setNameHiragana(rs.getString("name_hiragana"));
listInfos.add(list);
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
}
rs = null;
}
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
}
pstmt = null;
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
}
conn = null;
}
}
return listInfos;
}
package dto;
public class Listinfo {
private String Id;
private String name;
private String nameHiragana;
public String getId() { return Id; }
public String getName() { return name; }
public String getNameHiragana() { return nameHiragana; }
public void setId(String Id) { this.Id = Id; }
public void setName(String name) { this.name = name; }
public void setNameHiragana(String nameHiragana) { this.nameHiragana = nameHiragana; }
}
package servlet;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import Dao.listDao;
import dto.Logininfo;
import dto.Listinfo;
@WebServlet("/List")
public class List extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//session切れでログイン画面に戻す
HttpSession session = request.getSession();
Logininfo login = (Logininfo)session.getAttribute("user");
if(login == null) {
response.sendRedirect("./Login");
return;
}
listDao daoArray = new listDao();
ArrayList<Listinfo> listInfo = daoArray.findAll(null);
request.setAttribute("list", listInfo);
request.getRequestDispatcher("/WEB-INF/jsp/list.jsp").forward(request, response);
//list.jspへ
}
public void doPost(HttpServletRequest request, HttpServletResponse response) {
}
}
package servlet;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import Dao.listDao;
import dto.Listinfo;
import dto.Listinfo2;
/**
* Servlet implementation class Detail
*/
@WebServlet("/Detail")
public class Detail extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// HttpSession session = request.getSession();
request.setCharacterEncoding("UTF-8");
String Id = request.getParameter("Id");
String name = request.getParameter("name");
String name_hiragana = request.getParameter("nameHiragana");
listDao dao = new listDao(); //Daoクラス生成
try {
dao.InsertInformation(Id, name, name_hiragana);
} catch (ClassNotFoundException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (SQLException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} //挿入処理}
// session.setAttribute("Infomation", dao);
response.sendRedirect("./List");
}
}
Updateのsql文処理の部分はまだ用意してないです。
以上で足りるでしょうか?
宜しくお願い致します。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
0
追記ありがとうございます。
これで全部だとしたら、まずJSPにJSTLの宣言が必要ですね。
こういうのです。
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
それと、サーブレットから値を渡す部分、ここでいうとtmp
ですね。
これをスコープ変数を利用してJSPに渡す操作が必要です。
JSTLとスコープ、これが分からなければ、まずそこから勉強してみましょう。
(追記)
なんとなく分かったかもしれません。
href="./Detail?Id=${tmp.Id}"
で渡そうとしているんですね。
でも、DetailサーブレットってListにリダイレクトしてますよね。
ここは更新のJSPを出すところですか?
サーブレットは、一覧、詳細、更新をそれぞれ用意するほうが良いですね。
ひとつ足りないように思います。
一覧 list
詳細 detail
更新 update
のような感じです。
今は詳細と更新がごっちゃになっていると思います。
今のDetail
サーブレットはUpdateServlet
にして、
あらためてDetailServlet
を詳細表示用に追加しましょう。
そして、更新JSPのformのアクションを、UpdateServlet
にします。
それと、更新のJSPを出すところですが、
tmpを引き継ぐのではなく、詳細サーブレットで再度渡されたIDのユーザーを取り出して
requestスコープに登録してあげるようにする方が良いでしょう。
request.setAttribute("tmp", user);
のように。
あとできれば、変数名はtmp
じゃなくてuserInfo
とかの方が良いと思います。
user
はログインで使ってしまっていますからね。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.36%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
argius
2016/04/10 15:03
コードはこれで全部ですか?ディレクティブなどの部分が無いと何が足りないのか分かりません。