2009-06-02 4 views
2

Ich habe nicht viel Tapestry-Erfahrung, also weiß ich nicht wirklich, wo ich anfangen soll.Wie würden Sie empfehlen, die Insert-Klasse in Tapestry 4 zu erweitern?

Ich muss die Insert-Komponente mit einer neuen Komponente, sagen NewInsert, erweitern, die eine bestimmte CSS-Klasse auf was eingefügt wird. Wie soll ich das machen?

Ich möchte im Grunde mit etwas enden, das etwas wie <span class="myClass">The value</span> erzeugt.

Warum durch Erweiterung von Einfügen? Weil die Anwendung ziemlich fertig ist, haben wir festgestellt, dass wir überall dort, wo wir Insert verwenden, diese CSS-Klasse brauchen. Wir werden nur eine globale ersetzen auf "type =" Einfügen ">" mit "type =" NewInsert "> 'in allen Dateien.

Antwort

2

Um das zu erreichen, was ich wollte, musste ich die Methode von Insert überschreiben. Dies liegt nur daran, dass Tapestry 4.0.2 keine Methode setStyleClass hat. Es sah im Grunde wie

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(); 
     } 
     } 
    } 
    } 

Wenn wir eine setStyleClass Methode haben könnten wir nur

setStyleClass(MY_CLASS); 
super.renderComponent; 
0

Warum Legen Überschreibung getan? Warum nicht eine eigene InsertSpan-Komponente erstellen? Schauen Sie sich einfach die Quelle für Insert an und Sie werden sehen, wie einfach das ist ... Sie können es ausschneiden und einfügen, es ist Open Source.

Besser noch, schauen Sie in Upgrade auf Tapestry 5; Das Tapestry 4 Zeug wurde in ungefähr vier Jahren nicht aktiv entwickelt.

Verwandte Themen