簡體   English   中英

刪除選定的行 - Struts2

[英]Deleting selected rows - Struts2


我正在嘗試創建一個 web 頁面,其中包含我使用 Struts 2 所做的歷史記錄。提交后,包含上一頁參數的行將添加到我的歷史記錄表中。
我想要做的是允許用戶通過檢查一行或多行並按下“刪除所選”按鈕來刪除該表中的記錄。
編輯:該表是使用列表 object 動態創建的,所以我不想刪除 html 行,但我需要從列表中刪除記錄。

表創建如下:

<table>
    <tr>
        <th></th>
        ...
    </tr>
    <s:iterator value="myList">
        <tr>
            <td>
                <input type="checkbox" />
            </td>
            <td>
                <!-- other stuff -->
            </td>
        </tr>
    </s:iterator>
</table>

這樣,使用我所知道的,我可以只使用 Javascript 遍歷復選框。

要獲取行號,我使用的是 Javascript

 function checkRows() {
     var rowsIndex;
     var rows = document.getElementById('historyTable').getElementsByTagName('tbody')[0].getElementsByTagName('tr');
     for (i = 1; i < rows.length; i++) {
         if(rows[i].getElementsByTagName('td')[0].getElementsByTagName('input')[0].checked) {
             // here "i" is the row number if checked
         }
     }
 }

這是按鈕

   <s:url id="urlRemove" action="myAction">
       <s:param name="rowsIndex">
           <!-- List of index of selected rows -->
       </s:param>
   </s:url>
   <s:a href="%{urlRemove}">
       <input type="button" value="Remove Selected" />
   </s:a>

我知道在我提交用 Javascript 修改的內容后丟失了,所以我想我必須用 Javascript 中的檢查行號填寫 Action 列表或分配給<s:param name="rowsIndex">一個屬性,但我仍然必須使用 javascript 遍歷行。
任何幫助表示贊賞,謝謝。

nmc的回答指向標准方式。 在這里依靠 Javascript 是不必要的,而且 IMO 很難看。 但是 nmc 的解決方案也有一個問題:通過它在某些動態列表中占據的 position 來識別要刪除的項目是非常危險的。 (如果同時有人添加/刪除了一些項目怎么辦?如果用戶重復提交,或者返回並重新提交怎么辦?)

您應該通過一些唯一的穩定密鑰來識別每個項目,您的操作可以解決這個問題。 例如,假設您的操作為 map 中的項目提供了安全密鑰:

public class CheckBoxSampleAction extends ActionSupport
  private Map<Integer, DataWrapper> mymap; // data to show, with "secure stable" keys

  public Map<Integer, DataWrapper> getDataAsMap() {
       // fill lazyly mymap and return it
  } 

  public Set<Integer> getMapKeys(){
        return getDataAsMap().keySet();
  }

  private class DataWrapper {
    private String myvalue;
    private boolean selected; // for checkbox
        ... // more properties, getters, setters...
  }
 }

在您的 jsp 中:

<s2:form theme="simple">
<table>
<s2:iterator value="mapKeys"><tr>
<td><s2:property value="dataAsMap[top].mivalue"/></td>
<td><s2:checkbox name="dataAsMap[%{top}].selected" theme="simple"/></td>
...
</tr></s2:iterator>
</table>
<s2:submit value="Remove selected" method="remove"/>
</s2:form>

在不知道您的具體情況的其他細節的情況下,我建議您更改實施。 用表單標簽包圍列表迭代,以便您可以輕松地將其提交給操作,同時傳遞所有必要的信息,如下所示:

<s:form id="urlRemove" action="myAction">
  <s:iterator value="historyList" status="rowStatus">
    <s:checkbox name="rowsIndexToRemove" value="#rowStatus.index"/>
    <!-- output row details -->
  </s:iterator>
  <s:submit value="Remove Selected" />
</s:form>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM