2009-06-02 10 views
2

Je n'ai pas beaucoup d'expérience Tapestry donc je ne sais pas par où commencer.Comment recommanderiez-vous d'étendre la classe Insert dans Tapestry 4?

J'ai besoin d'étendre le composant Insertion avec un nouveau composant, disons NewInsert, qui applique une classe CSS donnée à ce qui est inséré. Comment dois-je faire cela?

Je veux fondamentalement finir avec quelque chose qui génère quelque chose comme <span class="myClass">The value</span>.

Pourquoi le faire en étendant Insert? Parce que l'application est à peu près faite, mais nous avons réalisé que partout où nous utilisons Insert, nous avons besoin de cette classe CSS. Nous allons simplement faire un remplacement global sur 'type = "Insérer">' avec 'type = "NewInsert">' dans tous les fichiers.

Répondre

2

Pour obtenir ce que je voulais, j'ai dû remplacer la méthode renderComponent d'Insert. C'est seulement parce que Tapestry 4.0.2 n'a pas de méthode setStyleClass. Il semblait essentiellement comme

if (!cycle.isRewinding()) { 
     Object value = getValue(); 

     if (value != null) { 
     String styleClass; 
     String insert = null; 
     Format format = getFormat(); 

     if (format == null) { 
      insert = value.toString(); 
     } 
     else { 
      insert = format.format(value); 
     } 

     styleClass = getStyleClass(); 

     if (styleClass == null) { 
      /* No classes specified */ 
      styleClass = MY_CLASS; 
     } 
     else { 
      /* Append the preserveWhiteSpace class to the string listing the style classes. */ 
      styleClass += " " + MY_CLASS; 
     } 

     if (styleClass != null) { 
      writer.begin("span"); 
      writer.attribute("class", styleClass); 

      renderInformalParameters(writer, cycle); 
     } 

     writer.print(insert, getRaw()); 

     if (styleClass != null) { 
      /* </span> */ 
      writer.end(); 
     } 
     } 
    } 
    } 

Si nous avons une méthode de setStyleClass que nous aurions pu faire

setStyleClass(MY_CLASS); 
super.renderComponent; 
0

Pourquoi override Insérer? Pourquoi ne pas créer votre propre composant InsertSpan? Il suffit de regarder la source pour insérer et vous verrez à quel point c'est simple ... n'hésitez pas à copier-coller, c'est open source.

Mieux encore, regardez dans la mise à niveau vers Tapestry 5; le Tapestry 4 n'a pas été développé activement dans environ quatre ans.