2011-01-17 15 views
9

मैं अपाचे विकेट का उपयोग करके एक साधारण मार्कडाउन विकी को कार्यान्वित कर रहा हूं। विकी आम तौर पर उपयोगकर्ता द्वारा दर्ज किए गए किसी भी आधार पर HTML को प्रस्तुत करेगा।मनमाने ढंग से एचटीएमएल प्रस्तुत करने के लिए सबसे अच्छा विकेट घटक कौन सा है?

मैं थोड़ा उलझन में हूं कि इस तरह के मनमानी HTML को प्रस्तुत करने के लिए कौन सा विकेट घटक सबसे उपयुक्त होगा।

मैंने लेबल घटक की कोशिश की लेकिन यह सूचियों को सही तरीके से प्रस्तुत नहीं करता है, न ही मल्टीलाइन लेबल (जो नियमित सूची HTML के बजाय ब्रेक डालता है) करता है।

किसी भी मदद के लिए धन्यवाद।

अद्यतन: लेबल घटक पूरी तरह से काम करता है। यह मेरी गलती थी कि मैं इसे पहले काम करने में सक्षम नहीं था। यह कुछ खराब स्टाइलशीट्स और देर रात कोडिंग का संयोजन था। सहायक उत्तर के लिए धन्यवाद। जैसा कि सुझाव दिया गया है, मैं कुछ WYSIWYG संपादकों को भी देखने जा रहा हूं, जो वास्तव में मार्कडाउन से बेहतर काम कर सकते हैं। Visural विकेट विशेष रूप से वादा करता है।

उत्तर

14

यदि आप जो प्रस्तुत करना चाहते हैं वह बड़ा नहीं है, या पहले से ही स्ट्रिंग के रूप में प्रतिनिधित्व किया गया है, तो लेबल अच्छी तरह से काम करेगा, यह सुनिश्चित करने के लिए कि 0 स्ट्रिंग प्रिंट करता है, बस label.setEscapeModelStrings(false); पर कॉल करें।

लेकिन, अगर आपके HTML सामग्री गतिशील रूप से उत्पन्न होता है, या एक InputStream/रीडर से पढ़ा है, और आप स्मृति में रखने के लिए नहीं करना चाहते हैं, तो आप WebComponent सीधे इस्तेमाल कर सकते हैं, और विधि onComponentTagBody() ओवरराइड। इस तरह, आप इन-मेमोरी बफर भरने के बजाय प्रतिक्रिया में सीधे लिखते हैं, इसे स्ट्रिंग में बदलते हैं, और फिर प्रतिक्रिया को लिखें (यदि आप लेबल का उपयोग करते हैं तो होता है)।

नमूना कोड, दोनों ही मामलों के लिए:

HomePage.java

public class HomePage extends WebPage { 

    public HomePage() { 

     add(new Label("label", "<ul><li>test</li><li>test</li><li>test</li><li>test</li><li>test</li></ul>") 
      .setEscapeModelStrings(false)); 

     add(new WebComponent("html") { 
      @Override 
      protected void onComponentTagBody(MarkupStream markupStream, ComponentTag openTag) { 
       Response response = getRequestCycle().getResponse(); 
       response.write("<ul>"); 
       for (int i = 0; i < 5; i++) 
        response.write("<li>test</li>"); 
       response.write("</ul>"); 
      } 
     }); 
    } 
} 

HomePage.html

<html xmlns:wicket="http://wicket.apache.org"> 
<body> 
    <h2>Label</h2> 
    <div wicket:id="label"></div> 
    <h2>WebComponent</h2> 
    <div wicket:id="html"></div> 
</body> 
</html> 
4

यह Label है, Component.setEscapeModelStrings(false) पर कॉल करें, हालांकि आपके मॉडल रिटर्न को कच्चे HTML को प्रस्तुत करने के लिए।

+0

ओह, तुम थे तेजी :) ... @Parag: आप देखा था पहले से मौजूद संपादक के लिए बाहर? – Karussell

+0

मैंने setEscapeModel (false) के साथ लेबल का उपयोग करने का प्रयास किया। यह ज्यादातर चीजों को सही ढंग से प्रस्तुत करता है, लेकिन सूचियों में नहीं। – Parag

+0

यह अजीब लगता है, क्या आप उस पर कुछ नमूना कोड शामिल कर सकते हैं? – biziclop

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