2011-04-05 12 views
0


我想弄清楚如何爲dygraphs JavaScript提供動態生成的csv。Wicket:使生成的csv可用於dygraphs JavaScript

我正在使用wicket行爲將dygraph(JavaScript圖形)添加到我的標記中,如codesample波紋管中所示。現在我已經硬編碼使用名爲「dygraph.csv」的csv文件。我想改變這一點,而是讓dygraph使用String csv中的值,我該如何實現?

任何幫助幫助,非常感謝。

public class DygraphBehavior extends AbstractBehavior { 
    private static final long serialVersionUID = -516501274090062937L; 
    private static final CompressedResourceReference DYGRAPH_JS = new CompressedResourceReference(DygraphBehavior.class, "dygraph-combined.js"); 

    @Override 
    public void renderHead(IHeaderResponse response) { 
     response.renderJavascriptReference(DYGRAPH_JS); 
    } 
    @Override 
    public void onRendered(Component component) { 
     final String id = component.getId(); 
     Response response = component.getResponse(); 

     response.write(JavascriptUtils.SCRIPT_OPEN_TAG); 
     response.write("new Dygraph(document.getElementById(\""+id+"\"), \"dygraph.csv\", {rollPeriod: 7, showRoller: true, errorBars: true});"); 
     response.write(JavascriptUtils.SCRIPT_CLOSE_TAG); 
    } 
} 

public class Dygraph extends WebPage { 
    public Dygraph() { 
     String csv = "Date,ms\n20070101,62\n20070102,62"; 
     add(new ResourceLink<File>("csv", new ByteArrayResource("text/csv", csv.getBytes()))); 

     add(new Label("graphdiv").add(new DygraphBehavior())); 
    } 
} 

<div> 
    <h1>Dygraph:</h1> 
    <div wicket:id="graphdiv" id="graphdiv" style="width:500px; height:300px;"></div> 
    <a wicket:id="csv" href="#">dl generated csv</a> 
</div> 
+0

嗯,你已經找到了我可以看到的方式:創建一個資源。什麼是不工作的部分? – biziclop 2011-04-05 10:00:32

+0

ResourceLink創建一個可點擊的資源鏈接,我試圖找到一種方法來獲取只有資源的URL,這就是我卡住的地方。 – Holm 2011-04-05 12:06:33

回答

4
public class Dygraph extends WebPage { 
    public Dygraph() { 
     String csv = "Date,ms\n20070101,62\n20070102,62"; 
     ResourceLink<File> link = new ResourceLink<File>("csv", new ByteArrayResource("text/csv", csv.getBytes())); 
     add(link); 

     //this is the url that should be passed to the javascript code 
     CharSequence url = link.urlFor(IResourceListener.INTERFACE); 

     add(new Label("graphdiv").add(new DygraphBehavior())); 
    } 
} 

有根據您的資源範圍的其他解決方案,也許動態共享資源會更好地工作(如果你的圖形參數可以簡單地作爲URL參數傳遞),而這會工作。

0

的JavaScript需要看到以某種方式後的頁面已經被渲染的數據。所以,你有兩個選擇:

  1. 嵌入的數據頁面(比如在一個隱藏的div),然後讓JavaScript的讀取數據從那裏爲文本。

  2. 創建一個可從JavaScript下載數據的servlet。

第二個選項意味着您的頁面呈現代碼必須以某種方式將數據傳遞給servlet。你可以嘗試把它放到會話中,但是它會坐在那裏,佔用RAM。可能不是問題,如果它只是一點點的數據,而且你只有幾個用戶。但如果不是這樣,選項#1可能會更好。

+0

Wicket中有機制來處理資源,創建單獨的servlet來爲資源提供服務將會過度。 – biziclop 2011-04-05 12:57:15