1

我想解决以下问题,它是关于从数据库中删除实体:

  1. 用户为某个实体选择删除
  2. 已从数据库中删除并从列表中消失
  3. 页面内会出现一个撤消框架(如Twitter Bootstrap 警报消息),用户可以在其中选择撤消删除操作。

我不知道如何实现这一点,因为目前我以这种方式解决了这个问题:

  • 删除按钮链接到 URL:delete/entity_id
  • 我在删除实体的请求处理程序中为此 URL 编写了一个 if-case
  • 删除完成后,我发送一个response.sendRedirect(/list)以便显示更新的列表

这样我就不能通过重定向来发送额外的数据。通常我会通过模板处理它们来发送额外的数据,但这redirect是不可能的。

这种情况如何解决?

4

2 回答 2

2

我的 Web 应用程序中很少有这样的场景,这就是我解决它的方法

我有一个名为消息队列的类,如下所示

public class MessageQueue {

  public static Hashtable<String, Object> messages = new Hashtable<String, Object>();

  public static void putMessage(String key, Object obj)
  {
    messages.put(key, obj);
  }

  public static Object getMessage(String key)
  {
    if(key == null)
      return null;

    Object obj = messages.get(key);

    if(obj == null)
      return null;

    messages.remove(key);

    return obj;
  }

}

现在这个类留在记忆中。在重定向之前,我创建了一些重定向后需要的对象。创建一个随机 Guid 作为字符串,然后将此对象存储在消息队列中

然后我将此 Guid 添加为 URL 的参数

String justDeletedId = "someId"; 字符串 guid = (new Guid()).toString(); MessageQueue.put(guid,justDeletedId); sendRedirect("\list\?msgid=" + guid);

现在重定向后,您可以检查 messageID 并从消息队列中删除对象并做任何您想做的事情

我选择允许使用此对象一次...以避免内存泄漏

在当前版本中......我还实施了 Last Access Eviction 策略,该策略使用石英作业定期清理此消息队列

于 2012-07-26T17:25:43.220 回答
1

您可以使用HttpSessionsetAttribute()的和getAttribute()方法。毕竟这是一种通过不同 HTTP 请求传递 Java 对象的方式。

在您的情况下,您可以创建这样的 Undo 对象并将其存储在会话中。在您描述的重定向之后,检索会话对象并将其内容传递给模板。

于 2012-07-28T16:22:33.507 回答