Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用重定向处理模板_Java_Templates_Servlets - Fatal编程技术网

Java 如何使用重定向处理模板

Java 如何使用重定向处理模板,java,templates,servlets,Java,Templates,Servlets,我想解决以下问题,它是关于从数据库中删除实体的: 用户为某个实体选择删除 将从数据库中删除,并从列表中消失 页面内会出现一个撤消框架(如),用户可以在其中选择撤消删除 我不知道如何认识到这一点,因为目前我是这样解决的: 删除按钮链接到URL:Delete/entity\u id 我已经在我的请求处理程序中为这个URL编写了一个if case,用于删除实体 删除完成后,我发送一个响应。sendRedirect(/list),这样会显示更新的列表 这样,我就无法通过重定向发送其他数据。通常我会通

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

  • 用户为某个实体选择删除
  • 将从数据库中删除,并从列表中消失
  • 页面内会出现一个撤消框架(如),用户可以在其中选择撤消删除
  • 我不知道如何认识到这一点,因为目前我是这样解决的:

    • 删除按钮链接到URL:Delete/entity\u id
    • 我已经在我的请求处理程序中为这个URL编写了一个if case,用于删除实体
    • 删除完成后,我发送一个
      响应。sendRedirect(/list)
      ,这样会显示更新的列表
    这样,我就无法通过重定向发送其他数据。通常我会通过模板处理额外的数据来发送这些数据,但是使用
    重定向
    这是不可能的


    这种情况是如何解决的?

    我的web应用程序中很少有这种情况,下面是我如何解决的

    我有一个名为MessageQueue的类,如下所示

    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;
      }
    
    }
    
    公共类消息队列{
    公共静态哈希表消息=新哈希表();
    公共静态无效消息(字符串键,对象obj)
    {
    messages.put(键,obj);
    }
    公共静态对象getMessage(字符串键)
    {
    if(key==null)
    返回null;
    Object obj=messages.get(key);
    if(obj==null)
    返回null;
    消息。删除(键);
    返回obj;
    }
    }
    
    现在这个类保留在内存中。在重定向之前,我创建了一些重定向之后需要的对象。将随机Guid创建为字符串,然后将此对象存储在messagequeue中

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

    字符串justDeletedId=“someId”; 字符串guid=(新guid()).toString(); MessageQueue.put(guid,justDeletedId); sendRedirect(“\list\?msgid=“+guid”)

    现在,在重定向之后,您可以检查messageID并从messagequeue中删除该对象,然后做任何您想做的事情

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


    在当前版本中。。。我还实施了上次访问逐出策略,该策略使用quartz作业定期清理此消息队列

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


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

    +1这似乎是一个可靠的解决方案,我唯一不确定的是状态是否为“创建”。一个web应用程序不应该如此有状态,但我想你必须在某个地方划清界限。如果它回答了你的问题,你能选择这个作为答案吗