2011-01-17 11 views
9

Sto implementando un semplice wiki markdown usando Apache Wicket. Il wiki tipicamente renderebbe qualsiasi HTML arbitrario in base a ciò che l'utente ha inserito.Qual è il miglior componente di Wicket per il rendering di HTML arbitrario?

Sono un po 'confuso su quale componente di Wicket sarebbe più adatto a rendere tale HTML arbitrario.

Ho provato il componente Label ma non esegue correttamente il rendering degli elenchi, né la MultilineLabel (che inserisce le interruzioni anziché l'elenco normale HTML).

Grazie per qualsiasi aiuto.

UPDATE: Il componente Label funziona perfettamente. È stato un mio errore non essere in grado di farlo funzionare prima. Era una combinazione di alcuni brutti fogli di stile e codifica a tarda notte. Grazie per le risposte utili. Come suggerito, vedrò anche alcuni editor WYSIWYG, che in realtà potrebbero funzionare meglio del markdown. Visural Wicket sembra particolarmente promettente.

risposta

14

Se ciò che si desidera rendere non è grande, o è già rappresentato come una stringa, Label funzionerà correttamente, basta chiamare label.setEscapeModelStrings(false); per assicurarsi che stampi la stringa così com'è.

Tuttavia, se il contenuto HTML viene generato dinamicamente o letto da un InputStream/Reader e non si desidera conservarlo in memoria, è possibile utilizzare direttamente WebComponent e sovrascrivere il metodo onComponentTagBody(). In questo modo, si scrive direttamente alla risposta, invece di riempire un buffer in memoria, trasformarlo in una stringa e quindi scrivere nella risposta (che si verifica se si utilizza Etichetta).

codice di esempio, per entrambi i casi:

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, chiamare Component.setEscapeModelStrings(false) per visualizzare il codice HTML restituito dal modello.

+0

oh, sei stato più veloce :) ... @Parag: Hai guardato fuori per un editor già esistente? – Karussell

+0

Ho provato a utilizzare Label con setEscapeModel (false). Rende la maggior parte delle cose correttamente, ma non le liste. – Parag

+0

Sembra strano, puoi includere qualche codice di esempio? – biziclop

Problemi correlati