目前剛學習hibernate、struts2的相關程式
我的問題是我的submit送出去的修改與刪除,
都只能作用在第一個訊息,
刪除的話,不管在哪一個訊息按刪除,永遠都是刪第一個,
請問是哪裡有問題?
這是我的JSP:
<body>
<%
MessageDAO dao= new MessageDAO();
Collection<MessageValue> list = null;
list = dao.getAll();
%>
<script>
function update() {
document.forms[0].action = "message_update";
document.forms[0].submit();
}
function clearMsg() {
document.forms[0].action = "message_delete";
document.forms[0].submit();
}
</script>
<%
if (list != null && list.size() > 0) {
%>
<%
for (MessageValue mv : list) {
%>
<form>
<table>
<tr>
<td>ID</td>
<td><input name="id"
value="<%= mv.getId() == 0 ? "" : mv.getId()%>" /></td>
<tr>
<tr>
<td>CreateOwner</td>
<td><input name="createowner"
value="<%= mv.getCreateowner() == null ? "" : mv
.getCreateowner()%>" /></td>
</tr>
<tr>
<td>Subject</td>
<td><input name="subject"
value="<%= mv.getSubject() == null ? "" : mv.getSubject()%>" /></td>
</tr>
<tr>
<td>Message</td>
<td><input name="message"
value="<%= mv.getMessage() == null ? "" : mv.getMessage()%>" /></td>
</tr>
</table>
</form>
<button type="submit" onclick="update(<%= mv.getId()%>)">修改留言</button>
<button type="submit" onclick="clearMsg(<%= mv.getId()%>)">刪除留言</button>
<%
}}
%>
</body>
以下是我的DAO 修改&刪除:
public void update(MessageValue mv) throws Exception {
if (mv == null) {
throw new IllegalArgumentException("資料不得為null");
}
SessionFactory sf = HibernateUtil.getSessionFactory();
try (Session session = sf.openSession();) {
session.beginTransaction();
System.out.println("Creating Person: " + mv.getId());
session.merge(mv);
session.getTransaction().commit();
} catch (Exception ex) {
Logger.getLogger(MessageDAO.class.getName()).log(Level.SEVERE,
"新增資料失敗 !", ex);
throw new Exception("新增資料失敗!", ex);
}
}
public void delete(MessageValue mv) throws Exception {
SessionFactory sf = HibernateUtil.getSessionFactory();
try (Session session = sf.openSession();) {
session.beginTransaction();
MessageValue data = new MessageValue();
data.setId(mv.getId());
session.delete(data);
session.getTransaction().commit();
} catch (Exception ex) {
Logger.getLogger(MessageDAO.class.getName()).log(Level.SEVERE,
"新增資料失敗 !", ex);
throw new Exception("新增資料失敗!", ex);
}
}
我的粗淺認知,首先:
</form>
<button type="submit" onclick="update(<%= mv.getId()%>)">修改留言</button>
<button type="submit" onclick="clearMsg(<%= mv.getId()%>)">刪除留言</button>
/from 應該在兩個 submit 外面 (下面)。
再來,上面這一段你有傳參數 mv.getId 給這兩個 Function
<script>
function update() {
document.forms[0].action = "message_update";
document.forms[0].submit();
}
function clearMsg() {
document.forms[0].action = "message_delete";
document.forms[0].submit();
}
</script>
但你的 JavaScript Function 沒有接收變數,而且執行的兩個命令都是 forms[0],所以都只有第一筆資料作用。
最後,因為我不懂 hibernate、struts2 程式,所以對於 form 本身沒有 id 或 name,究竟 JavaScript Frunction 要怎麼透過 mv.getId 來知道要處理哪一個 form 還蠻懷疑的,通常我會寫
<form id="id_<%=mv.getId()%" name="id_<%=mv.getId()%">
然後改寫 JavaScript Function
<script>
function update(id) {
document.forms["id_"+id].action = "message_update";
document.forms["id_"+id].submit();
}
function clearMsg(id) {
document.forms["id_"+id].action = "message_delete";
document.forms["id_"+id].submit();
}
</script>
我不確定什麼原因
但是有個地方看起來怪怪的
<button type="submit" onclick="update(<%= mv.getId()%>)">修改留言</button>
<button type="submit" onclick="clearMsg(<%= mv.getId()%>)">刪除留言</button>
上面傳的參數是 mv.getId()
而
public void update(MessageValue mv) throws Exception {
public void delete(MessageValue mv) throws Exception {
接的參數是 MessageValue
我猜
把接收的參數改一下變數型態試試看