2009-08-10 17 views
5

में जेएफरी चार्ट उत्पन्न करें, मैं उपयोगकर्ता द्वारा चुने गए कुछ चेकबॉक्स के परिणामस्वरूप जेएफरी चार्ट का उपयोग करके गतिशील रूप से ग्राफ उत्पन्न करने का प्रयास कर रहा हूं, लेकिन मैं यह नहीं समझ सकता कि जनरेट किए गए डेटासेट को चार्ट फ़ॉर्म में कैसे प्राप्त किया जाए (मेरे पास कोड है इनसे चार्ट बनाता है, लेकिन पीएनजी उत्पादन करने की आवश्यकता है) और जेएसपी व्यू में। वर्तमान में, मैं केवल जेएसपी को डेटासेट भेजने का विचार कर सकता हूं, लेकिन इस बारे में नहीं सोच सकता कि वहां से क्या करना है ... मैं इसे कैसे बना सकता हूं: उपयोगकर्ता सर्वलेट को फॉर्म सबमिट करता है, सर्वलेट डेटासेट उत्पन्न करता है, डेटासेट से उत्पादित चार्ट , चार्ट से पीएनजी और आखिरकार पीएनजी जेएसपी को भेजा जाता है? या उनके जैसे की कुछ और।गतिशील रूप से सर्वलेट

public void doPost(HttpServletRequest request, 
        HttpServletResponse response) 
        throws IOException, ServletException{ 

    String[] metrics  = request.getParameterValues("metrics"); 
    String[] fileNames = request.getParameterValues("files"); 

    List<CategoryDataset> results = new ArrayList<CategoryDataset>(); 
    DMCalc calculator = new DMCalc(metrics, fileNames); 
    calculator.calculateResults(); 
    results.add(calculator.getEditDistanceDataset()); 
    results.add(calculator.getSimilarityDataset()); 
    results.add(calculator.getTimeChartDataset()); 

    request.setAttribute("results", results); 
    RequestDispatcher view = request.getRequestDispatcher("metricResult.jsp"); 

    view.forward(request, response); 
} 

अद्यतन:

doPost विधि उपयोगकर्ता पद से डेटासेट उत्पन्न होने से, वे तो खेतों में संग्रहित किया जा सकता है, बाद में RequestDispatcher जो तब सर्वलेट का doGet प्रणाली को बुलाती है JSP को उपयोगकर्ता अग्रेषित करता है एक आईएमजी टैग में, जो कि पीएनजी बनाने के लिए पहले खेतों में संग्रहीत डेटासेट का उपयोग करता है और फिर जेएसपी में एचटीएमएल द्वारा प्रदर्शित किया जाता है।

+1

ध्वनि अपने समाधान की तरह के रूप में जल्द दो उपयोगकर्ताओं को एक ही समय में अपने पेज के रूप में प्रयोग कर रहे हैं टूट जाएगा - सर्वलेट वर्ग के क्षेत्र में कुछ भी स्टोर करना सुरक्षित नहीं है! –

+0

आह, ठीक है - क्या एक ही चीज़ प्राप्त करने का कोई तरीका है? – Robert

+0

आसान समाधान HttpSession ऑब्जेक्ट है। Http सत्र सत्र = request.getSession(); और फिर session.setAttribute ("परिणाम", परिणाम); फॉर्म सर्वलेट में, और session.getAttribute ("परिणाम") चार्ट सर्वलेट में। –

उत्तर

4

क्या आपकी जेएसपी फ़ाइल में एक टैग शामिल है जहां src विशेषता आपके सर्वलेट का नाम है। फिर, आपके पास बस पीएनजी चार्ट लौटाता है:

OutputStream out = response.getOutputStream(); 
    response.setContentType("image/png"); 
    ChartUtilities.writeChartAsPNG(out, chart, width, height); 

जेएसपी पेज वास्तव में केवल HTML या अन्य टेक्स्ट डेटा आउटपुट करने का इरादा रखते हैं। यद्यपि आप पीएनजी आउटपुट करने के लिए जेएसपी को मजबूर कर सकते हैं, इस तरह से ऐसा करने का कोई फायदा नहीं है।

ऐसा लगता है कि आप एक गतिशील पृष्ठ बनाना चाहते हैं जो ड्रॉप-डाउन मेनू स्थिति परिवर्तन के आधार पर अपडेट करता है। इसके लिए, आपको जावास्क्रिप्ट का उपयोग करने की आवश्यकता है जो मेनू बदलते समय ट्रिगर करता है, और आईएमजी टैग के स्रोत विशेषता के मान को अद्यतन करता है। फिर ब्राउज़र आपके सर्वलेट से एक नए चार्ट के साथ छवि को फिर से लोड करेगा।

+0

मैं इसे कैसे बना सकता हूं: उपयोगकर्ता सर्वलेट में फॉर्म सबमिट करता है, सर्वलेट डेटासेट जेनरेट करता है, डेटासेट से उत्पादित चार्ट, चार्ट से पीएनजी और अंत में जेएसपी को प्रेषित पीएनजी भेजता है? – Robert

+0

यह सर्वलेट केवल एक चीज करता है - एक चार्ट की पीएनजी छवि बनाता है। टैग को पकड़ने के लिए आपको अभी भी एक अलग जेएसपी पृष्ठ होना चाहिए। इसके लिए कोई अनुरोध डिस्पैचर की आवश्यकता नहीं है। –

+0

मुझे इसे अलग-अलग वाक्यांश दें - मैं डेटासेट के बिना पीएनजी प्रदर्शित नहीं कर सकता, जिसे उपयोगकर्ता द्वारा सबमिट किए गए फॉर्म द्वारा उत्पन्न किया जाना है। मैं एक सर्वलेट बना सकता हूं जो केवल एक चीज को पीएनजी का उत्पादन करता है, लेकिन मैं डेटासेट को ऐसा करने में सक्षम होने के लिए कैसे दे सकता हूं, क्योंकि यह सबमिट किए गए फॉर्म से उत्पन्न होता है? – Robert

5

मैं सुझाव दूंगा कि आप ServletUtilities कक्षा का उपयोग करें। यह जावा tempdir में बचाता है और सत्र अवैध होने पर साफ हो जाता है। :) फ़ाइल को प्रदर्शित करने के लिए एक और संकेत आपकी छवियों को प्राप्त करने के लिए DisplayChart सर्वलेट का उपयोग करना है। यह web.xml में चला जाता है

 <servlet> 
    <servlet-name>DisplayChart</servlet-name> 
    <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>DisplayChart</servlet-name> 
     <url-pattern>/servlet/DisplayChart</url-pattern> 
    </servlet-mapping> 

यह तो है कि कैसे आप JSTL का उपयोग कर छवि प्रदर्शित:

<img src="<c:url value='/servlet/DisplayChart?'><c:param name='filename' value='${yourFileNameHERE}' /></c:url>" alt=""/> 
संबंधित मुद्दे