2014-01-08 64 views
1

我正在創建一個用戶特定的文件。這個文件基本上是一個結果csv,它是用用戶下載或不用的選項創建的。當用戶離開頁面或結束他們的會話時,我希望能夠刪除此文件。處理這個問題的最好方法是什麼?在Wicket中存儲用戶特定文件的最佳方式是什麼?

目前我正在使用Java的File類。

謝謝!

回答

1

你不必寫在首位的文件。即時創建內容並將其流式傳輸回客戶端。 Wicket在org.apache.wicket.request.resource包中有幾個類來幫助解決這個問題。

作爲一個起點,看Wicket 6 resource managementWicket 1.5 Mounting resources

你基本上在WicketApplication.init()裝入資源:

mountResource("somePath/${param1}/${param2}", new SomeResourceReference()); 

比起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; 

    } 

} 
+0

謝謝伯特!我會閱讀給出的參考資料,看看我能否實現這一點。我可能會回來一些更多的問題。 – eaglei22

1

Wicket不控制銷燬會話。這是您正在使用的servlet容器的關注點。

如果你想創建檢票文件並刪除當會話被銷燬或用戶想註銷的文件,它有兩個部分:

  1. 用戶註銷(在Wikcet) 存儲的文件路徑或WebSession(檢票)文件引用 覆蓋您WebSession或AutheticatedWebSession的方法無效(),請參閱http://ci.apache.org/projects/wicket/apidocs/6.x/org/apache/wicket/protocol/http/WebSession.html#invalidate%28%29

  2. 會議摧毀 存儲的文件路徑或文件引用到容器會話和W禮貌聽衆並將其添加到您的servlet上下文中(例如,使用web.xml文件的tomcat)。 見http://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpSessionListener.html

+0

不錯,這工作得很好。我重載了onValidate()作爲suggessted。我也會嘗試伯特的建議。謝謝! – eaglei22

相關問題