2011-12-20 23 views
5

मेरे पास एक विधि के साथ एक बाकी संसाधन है जो कुछ डेटा को HTML के रूप में वापस करना चाहिए। हम रिपोर्ट्स की एक सूची के बारे में बात कर रहे हैं, जो एक साधारण वर्ग है जिसमें 6 स्ट्रिंग सदस्य चर शामिल हैं।मैं जावा ऑब्जेक्ट से एचटीएमएल कैसे उत्पन्न कर सकता हूं?

मैं पूछ रहा हूं क्योंकि स्ट्रिंग में तत्वों और मानों को जोड़ने की संभावना धीमी और त्रुटि प्रवण लगती है, और मैं वास्तव में इसे ऑब्जेक्ट उन्मुख तरीके से करना पसंद करूंगा।

उत्तर

4

वेब प्रतिक्रिया के लिए एचटीएमएल उत्पन्न करने का सामान्य तरीका एक जेएसपी या जावा टेम्पलेटिंग इंजन जैसे Velocity या FreeMarker का उपयोग करना है।

यदि आप वर्तमान में एक्सएमएल के रूप में प्रतिक्रियाएं लौट रहे हैं, तो एक्सएमएलटी का उपयोग एक्सएमएलटी को HTML में बदलने के लिए एक और तरीका होगा। एक्सएसएलटी प्रसंस्करण क्लाइंट साइड (ब्राउज़र में) पर किया जा सकता है यदि आप एक्सएमएलटी संसाधन से जुड़े एक्सएमएल में उपयुक्त "प्रसंस्करण" निर्देश शामिल करते हैं।


मुझे लगता है कि करने के लिए है कि तार एक साथ कोसने एक उचित समाधान का उपयोग किया, लेकिन फिर मैं एहसास है कि है कि अपने जावा कोड में अपने HTML लेआउट कड़ी मेहनत से तारों आप में जो परिणाम आया था। जेएसपी, टेम्पलेटिंग और ट्रांसफॉर्मेशन दृष्टिकोण सभी इससे बचते हैं, जिससे आप विकास चक्र में बाद में जेनरेट किए गए HTML को समायोजित कर सकते हैं; जैसे सिस्टम एकीकरण समय पर, या यहां तक ​​कि तैनाती पोस्ट भी।

+0

क्या सभी ग्राहक क्लाइंट-साइड ट्रांसफॉर्मेशन का समर्थन करते हैं? – radai

+0

सब कुछ नहीं। लेकिन आधुनिक वेब ब्राउज़र करते हैं - http://www.w3schools.com/XSL/xsl_browsers.asp –

+0

मैंने एक्सएसएलटी का उपयोग करने के बारे में सोचा, क्या आपको कोई जानकारी है कि रिपोर्ट की सूची से जेनरेट किए गए एक्सएमएल में प्रसंस्करण निर्देश को कैसे शामिल किया जाए javax.xml.bind.annotation.XmlRootElement के साथ एनोटेटेड? – Marmoy

0

आप ऑब्जेक्ट को ऑब्जेक्ट को क्रमबद्ध कर सकते हैं, और फिर HTML आउटपुट उत्पन्न करने के लिए XLST प्रदान कर सकते हैं। लेकिन अगर यह सिर्फ 6 डंक है तो मैं आगे बढ़ूंगा और तारों को जोड़ दूंगा।

7

सरल HTML के लिए, इसे सीधे टेक्स्ट के रूप में उत्पन्न करें। धारावाहिक, एक्सएमएल, और परिवर्तन के अन्य सुझाव सभी ओवरकिल हैं।

  • jwebutils
    एक पुस्तकालय जावा का उपयोग कर एचटीएमएल 5 मार्कअप बनाने के लिए:

    जैसे कि ये एचटीएमएल, पैदा करने के साथ मदद करने के लिए जावा लाइब्रेरीज रहे हैं। इसमें JSON और CSS 3 मार्कअप बनाने के लिए समर्थन भी शामिल है।

  • जकार्ता Element Construction Set (ईसीएस)
    विभिन्न मार्कअप भाषाओं के लिए तत्व उत्पन्न करने के लिए जावा एपीआई सीधे एचटीएमएल 4.0 और एक्सएमएल का समर्थन करता है। अब सेवानिवृत्त हो गए, लेकिन कुछ लोगों को वास्तव में यह पसंद है।

लेकिन यदि आप वैध HTML की मूल बातें सीखते हैं, तो आप अपनी खुद की दिनचर्या लिख ​​सकते हैं।

गति के लिए, StringBuilder कक्षा तेज स्ट्रिंग मैनिपुलेशन के उद्देश्य के लिए जोड़ा गया था। ट्रेडऑफ कोई सिंक्रनाइज़ेशन नहीं है। इसका मतलब धागा-सुरक्षित नहीं है। आपके प्रोग्राम को कैसे संरचित किया जाता है, इस पर निर्भर करते हुए, आप HTML प्रतिपादन करने वाले कोड के बाहर सिंक्रनाइज़ेशन का उपयोग कर सकते हैं।

यहां एक उदाहरण वर्ग है जिसे मैंने अभी जावा 6 में पकाया है, और इसे चलाने के लिए एक छोटा ऐप है। यह कोड केवल अवधारणा का सबूत है, प्राइम टाइम उत्पादन के लिए तैयार नहीं है।

package com.example; 

/** 
* @author Basil Bourque 
*   © 2012 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so. 
*/ 
public class ListToHtmlTransformer { 

    /** 
    * @param collection 
    *   of report titles. 
    * @return string containing source code for HTML5. 
    */ 
    public String render(java.util.Collection<String> reports) { 
     // This source code is not yet tested or made bullet-proof. Only meant for demonstrating concepts. 
     // Warning: This code is not thread-safe. Changes must be made before serious use. 
     // Warning: This code should be modified to produce proper HTML, such as escaping certain characters. 
     // This code generates minimal HTML5 as suggested here: http://www.brucelawson.co.uk/2010/a-minimal-html5-document/ 
     // Big tip: Note that HTML allows the use of apostrophe (single-quote) in place of double-quote. Mixes better with Java source code. 
     // The backslash + 'n' is an escape sequence in Java to generate a linefeed (Ascii/Unicode 10) for use here as a NewLine. 
     // In real life, you woud test your rendered HTML with an HTML validator such as: 
     // • http://html5.validator.nu/ 
     // • http://validator.w3.org/ 
     StringBuilder html = new StringBuilder(); 
     html.append("<!doctype html>\n"); 
     html.append("<html lang='en'>\n"); 

     html.append("<head>\n"); 
     html.append("<meta charset='utf-8'>\n"); 
     html.append("<title>Report of Reports</title>\n"); 
     html.append("</head>\n\n"); 

     html.append("<body>\n"); 
     html.append("<h1>List of Reports</h1>\n"); 
     // Make a list in HTML 
     html.append("<ul>\n"); 
     // Loop the list of reports passed as argument. 
     for (String report : reports) { 
      html.append("<li>" + report + "</li>\n"); 
     } 
     html.append("</ul>\n"); 
     html.append("</body>\n\n"); 

     html.append("</html>"); 

     return html.toString(); 
    } 

} 

और इसे चलाने के लिए एक ऐप।

package com.example; 

import java.util.ArrayList; 

/** 
* 
* @author Basil Bourque 
*   © 2012 Basil Bourque. This source code may be used freely forever by anyone taking full responsibility for doing so. 
*/ 
public class App { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     ArrayList<String> listOfReports = new ArrayList<String>(); 
     listOfReports.add("Some report #1"); 
     listOfReports.add("Some report #2"); 
     listOfReports.add("Some report #3"); 
     listOfReports.add("Some report #4"); 
     listOfReports.add("Some report #5"); 
     listOfReports.add("Some report #6"); 

     ListToHtmlTransformer renderer = new ListToHtmlTransformer(); 
     String renderedHtml = renderer.render(listOfReports); 

     System.out.println("The following HTML was rendered: " + new java.util.Date().toString()); 
     System.out.println(renderedHtml); 
     System.out.println("*** End of HTML ***"); 
    } 

} 

मैं यहाँ प्रदान की गई एचटीएमएल पोस्ट करने के लिए कोशिश की, लेकिन StackOverflow HTML के रूप में व्याख्या की बजाय इसे प्रदर्शित करने की कोशिश की।

बोनस टिप: आप अपने एचटीएमएल & सीएसएस में डबल-कोट (कोटेशन मार्क यूनिकोड 34) के बजाय एकल-कोट (एपोस्ट्रोफ़ यूनिकोड 34) का उपयोग कर सकते हैं, विशेषता गुणों को सीमित करने के लिए। ब्राउज़र दोनों अच्छी तरह से संभालते हैं। एकल-कोट आपके जावा कोड में कोडिंग को इतना आसान बनाता है, जिससे डबल-कोट अंक से बचने की आवश्यकता समाप्त हो जाती है। ऊपर दिए गए कोड में मेरा उपयोग नोटिस करें, जैसे कि 'en' और 'utf-8'

संबंधित मुद्दे

 संबंधित मुद्दे