Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
File 在Wicket中存储用户特定文件的最佳方式是什么?_File_Session_Wicket - Fatal编程技术网

File 在Wicket中存储用户特定文件的最佳方式是什么?

File 在Wicket中存储用户特定文件的最佳方式是什么?,file,session,wicket,File,Session,Wicket,我正在创建一个特定于用户的文件。该文件基本上是一个结果csv,用户可以选择下载或不下载。当用户离开页面或结束会话时,我希望能够删除此文件。处理这个问题的最佳方法是什么 目前我正在使用Java的File类 谢谢 Wicket无法控制销毁会话。这是您正在使用的servlet容器所关心的问题 如果要在Wicket中创建文件,并在会话被破坏或用户想要注销时删除该文件,它有两个部分: 用户注销(在Wikcet中) 在WebSession(Wicket)中存储文件路径或文件引用 重写WebSession或A

我正在创建一个特定于用户的文件。该文件基本上是一个结果csv,用户可以选择下载或不下载。当用户离开页面或结束会话时,我希望能够删除此文件。处理这个问题的最佳方法是什么

目前我正在使用Java的File类


谢谢

Wicket无法控制销毁会话。这是您正在使用的servlet容器所关心的问题

如果要在Wicket中创建文件,并在会话被破坏或用户想要注销时删除该文件,它有两个部分:

  • 用户注销(在Wikcet中) 在WebSession(Wicket)中存储文件路径或文件引用 重写WebSession或AuthenticatedWebSession的方法invalidate(),请参阅

  • 会话被破坏 将文件路径或文件引用存储到容器会话中,编写侦听器并将其添加到servlet上下文中(例如,tomcat使用web.xml文件)。 看


  • 你不必首先写一个文件。动态创建内容并将其流回客户端。Wicket在包
    org.apache.Wicket.request.resource
    中有几个类可以帮助实现这一点

    作为一个起点,看看和

    您基本上是在WicketApplication.init()中装载资源:

    而不是SomeResourceReference:

    public class SomeResourceReference extends ResourceReference {
    
       @Override
       public IResource getResource() {
          return new SomeResource();
       }
    
    }
    
    最后在SomeResource中:

     public class SomeResource extends AbstractResource {
    
         @Override
         public AbstractResource.ResourceResponse 
                       newResourceResponse(Attributes attributes) {
    
            // get the parameters
            PageParameters parameters = attributes.getParameters();
            final String param1 = parameters.get("param1").toStringObject();
    
             AbstractResource.ResourceResponse response 
                               = new AbstractResource.ResourceResponse();
    
             response.setContentType("application/CSV");
             response.setCacheDuration(Duration.NONE);
             response.setCacheScope(WebResponse.CacheScope.PRIVATE);
             response.setContentDisposition(ContentDisposition.INLINE);
    
             response.setWriteCallback(new AbstractResource.WriteCallback() {
    
             @Override
             public void writeData(final Attributes attributes) throws IOException {
                // create your data here 
                attributes.getResponse().write(dataAsString);
             }
            });
    
        return response;
    
         }
    
     }
    

    很好,这很有效。我将onValidate()重载为suggested。我还要试试伯特的建议。谢谢谢谢你,伯特!我将阅读给出的参考资料,看看是否可以实现这一点。我可能还会回来问一些问题。
     public class SomeResource extends AbstractResource {
    
         @Override
         public AbstractResource.ResourceResponse 
                       newResourceResponse(Attributes attributes) {
    
            // get the parameters
            PageParameters parameters = attributes.getParameters();
            final String param1 = parameters.get("param1").toStringObject();
    
             AbstractResource.ResourceResponse response 
                               = new AbstractResource.ResourceResponse();
    
             response.setContentType("application/CSV");
             response.setCacheDuration(Duration.NONE);
             response.setCacheScope(WebResponse.CacheScope.PRIVATE);
             response.setContentDisposition(ContentDisposition.INLINE);
    
             response.setWriteCallback(new AbstractResource.WriteCallback() {
    
             @Override
             public void writeData(final Attributes attributes) throws IOException {
                // create your data here 
                attributes.getResponse().write(dataAsString);
             }
            });
    
        return response;
    
         }
    
     }