iT邦幫忙

0

submit都只能修改、刪除第一個訊息

chousen 1 月前5202 瀏覽

目前剛學習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);
    }
}

2 個回答

2
wonton
iT邦高手 6 級 ‧ 1 月前
最佳解答

我的粗淺認知,首先:

</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>
fillano iT邦超人 1 級 ‧ 1 月前 檢舉

有一個簡單一點的改法,只要button是包在form裡面,以update為例,只要把onclick改為onclick="update(this)"然後改一下update的程式:

function update(obj) {
    obj.form.action = "message_update";
    obj.form.submit();
}

就可以了。form中的input及button元素,都有一個form屬性,指向他所屬的form。

chousen iT邦新手 5 級 ‧ 1 月前 檢舉

謝謝你,問題有解決了!

1
海綿寶寶
iT邦超人 1 級 ‧ 1 月前

我不確定什麼原因
但是有個地方看起來怪怪的

<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

我猜
把接收的參數改一下變數型態試試看

我要發表回答

立即登入回答