目前剛學習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
我猜
把接收的參數改一下變數型態試試看