2013-06-07 3 views
0

Je cette balise html:wicket - Modifier le modèle html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://wicket.apache.org/dtds.data/wicket-xhtml1.4-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org/" xml:lang="cs" lang="cs"> 
    <wicket:panel> 
     <div id="nav"> 
      <ul> 
       <li> 
        <a href="./page2.html" class="here">page 1</a> 
       </li> 
       <li> 
        <a href="./page3.html" class="">page 2</a> 
       </li> 
       <li> 
        <a href="./kontakt.html" class="">page 3</a> 
       </li> 
      </ul> 
     </div> 
    </wicket:panel> 
</html> 

et voici mon code guichet très simple pour le panneau:

public class PanelMenu extends Panel{ 
    private static final long serialVersionUID = 1L; 

    public PanelMenu(String id){ 
     super(id); 
     } 
    } 

    @Override 
    protected void onBeforeRender(){ 
     String markup = this.getAssociatedMarkup().toString(); 
     markup = markup.replaceAll("a", "b"); 
     //how to write modyfied markup for panel to response? 
     this.getResponse().write(markup);//this write to start of the page, not panel 
     super.onBeforeRender(); 
     } 

Sur ma page je fais:

this.add((new PanelMenu("panelMenu")).setRenderBodyOnly(true)); 

J'ai besoin de savoir comment écrire le balisage html modyfied pour le panneau dans la variable markup retour dans la réponse. Comment puis-je le faire? this.getResponse().write(markup) écrire au début de la page.

+0

Vous demandez une chose étrange. Essayez d'expliquer toute la tâche - il existe peu d'approches communes et simples pour implémenter des menus. –

+0

http://stackoverflow.com/a/10915579/1033307 –

+0

Pourquoi voudriez-vous modifier le balisage directement? Ce n'est pas vraiment le moyen de. Dans la plupart des cas, cela peut être résolu en utilisant correctement les composants ou les fragments de balisage. Qu'est-ce que vous essayez d'accomplir? – Buurman

Répondre

0

Vous essayez de changer la façon de balisage à la fin. Pour accéder au balisage du composant et le modifier, vous devez le faire en implémentant votre propre IResourceStream ou étendre les guichets MarkupResourceStream pour effectuer la modification et l'utiliser dans votre propre MarkupFactory, que vous avez défini dans Application.init() as.

@Override 
public void init() { 
    super.init(); 
    getMarkupSettings().setMarkupFactory(new MyMarkupFactory()); 
} 
+0

Je peux accéder et modifier le balisage dans PanelMenu par 'this.getAssociatedMarkup(). ToString()' et 'this.getResponse(). Write (balisage);', le problème est que de cette façon il est écrit au début de la page et ne pas remplacer le balisage html réel du panneau. – 1ac0

+0

Je sais ... C'est pourquoi j'ai suggéré une approche différente ... Vous devez donner le balisage modifié au guichet au lieu de l'envoyer au client – Nicktar

Questions connexes