2017-06-08 35 views
1

我目前正試圖在後臺實現文件導出,以便用戶可以在文件下載時執行一些操作。CommandExecuteIn Background引發「不是(編碼)值」錯誤

我使用了apache isis CommandExexuteIn:Background action屬性。但是,我得到一個錯誤 「不是(可編碼的)值」,這是由類別ScalarValueRenderer引發的錯誤。

這是我的方法看起來像:

@Action(semantics = SemanticsOf.SAFE, 
     command = CommandReification.ENABLED) 
     commandExecuteIn = CommandExecuteIn.BACKGROUND) 
public Blob exportViewAsPdf() { 
    final Contact contact = this; 
    final String filename = this.businessName + " Contact Details"; 

    final Map<String, Object> parameters = new HashMap<>(); 
    parameters.put("contact", contact); 

    final String template = templateLoader.buildFromTemplate(Contact.class, "ContactViewTemplate", parameters); 
    return pdfExporter.exportAsPdf(filename, template); 
} 

我認爲錯誤有事情做與命令實際上並不調用行動,但返回的持久化背景命令。

該實現實際上在沒有返回類型的方法上工作。我錯過了什麼?或者有沒有辦法實現後臺命令並獲得預期的結果?

回答

0

有趣的用例,但它不是我在框架的這部分實現時所預期的,所以我不驚訝它不起作用。很明顯,你在這裏得到的錯誤信息是非常隱晦的,所以我提出了一個 JIRA ticket看看我們是否至少可以改進。

我很想知道您認爲框架應該在這裏提供哪些用戶體驗?

在我們工作的Estatio應用程序中(它驅動了過去幾年中添加到框架中的許多功能),我們有一個類似的要求來從報表服務器獲取PDF(需要5到10個秒)然後下載它們。這是針對所有購物中心的租戶,所以可能會有五到五十個這樣的產品。我們的設計是將渲染移動到後臺命令中(類似於您的代碼片段中的templateLoader.buildFromTemplate(...)和pdfExporter.exportAsPdf(...)方法調用,並將輸出捕獲爲文檔,通過document module。然後,我們用pdfbox addon縫合所有文檔的PDF文件一起爲印刷單下載PDF格式。

希望,讓你以不同的方式的一些想法來支持你的使用情況

THX Dan

+0

非常感謝你對Sir和這個想法的迴應。到目前爲止,我會嘗試實現前端輪詢。這個想法是生成PDF背景,存儲它,然後使前端獲取生成的PDF。 – Kesh