在SPRING MVC中将对象列表从JSP传递到服务器

时间:2012-02-10 10:59:35

标签: jquery spring spring-mvc

我的要求是

  1. 我将有一个JSP,其中将显示该特定用户的电子邮件

  2. 用户可以选择要删除的邮件

  3. 点击删除按钮后,必须捕获复选框的ID(用户选择删除),并将其提供给服务器,服务器依次通过运行HQL删除它

    < / LI>

    目前正在通过使用管道符号连接ID并将其作为单个字符串对象发送到查询字符串中来处理此问题,并在服务器端使用标记化ID并在迭代中删除它

    下面是jquery脚本,其中使用管道符号

    连接ID
    $("#deleteBtn").click(function() {
                var deleteIDList = "" ;
    
                $("[name='deleteCheckboxGroup']").each(function() {
                    if($(this).is(':checked')) {
                        var chckId = $(this).attr("id") ;
                        deleteIDList+=chckId.split("_")[0] +"|";
                    }   
                });
                if (deleteIDList!="") {
                    // to remove pipe symbol from the last character, we are using 'slice' method of javascript
                    deleteIDList = deleteIDList.slice(0,-1) ;
                    var actionUrl = "deleteMessageText.htm?messageIDs="+deleteIDList ;
                    $("#studentMessFrm").attr("action",actionUrl) ;
                    $("#studentMessFrm").submit() ;
                }else {
                    return false ;
                }           
            }) ;
    

    这就是我如何从DB中标记和删除对象

    public void deleteMessages(String messageIDs) throws ReadsException{
    
            //List<Long> deletedIdList = new ArrayList<Long>() ;
    
            StringTokenizer stringTokenizer = new StringTokenizer(messageIDs,"|") ;
    
            Map<String,Object> parameterMap = null ;
            while (stringTokenizer.hasMoreTokens()) {
                String query = "DELETE FROM MESSAGES MES WHERE MES.MESID=:MESID";
                parameterMap = new HashMap<String,Object>();
                parameterMap.put("MESID", Long.valueOf(stringTokenizer.nextToken()));
                executeUpdateOrDelete(query, parameterMap);
            }
    
            LOGGER.info("deleted successfully..");
        }
    

    我知道这是非专业的编码类型。我希望将id列表传递给requestParam中的MVC控制器,然后在“ONE SHOT”中删除列表ID。

    请建议我这个。感谢

    此致 阿伦

1 个答案:

答案 0 :(得分:2)

实现这一目标的方法有很多种。我最喜欢的是在不需要的时候最小化Javascript的使用。以下是我要做的事情:

HTML表单:

<form action="message/delete" method="POST">
    <input type="checkbox" name="messageId" value="7" />Hi!<br/>
    <input type="checkbox" name="messageId" value="33" />It's me!<br/>
</form>

Spring控制器:

@RequestMapping("message/delete")
public void deleteMessages(Long[] messageId) {
    messageRepository.delete(messageId);
}

JPA存储库:

public void delete(Long... ids) {
    if (ids.length > 0) {
        entityManager.createQuery("DELETE FROM Message WHERE id IN :id").setParameter("id", ids).executeUpdate();
    }
}