2009-06-02 55 views
2

我沒有太多Tapestry的經驗,所以我不知道從哪裏開始。你會如何推薦我在Tapestry 4中擴展Insert類?

我需要用一個新組件擴展Insert組件,例如NewInsert,它將給定的CSS類應用於正在插入的內容。我應該怎麼做?

我基本上最終想要產生類似<span class="myClass">The value</span>的東西。

爲什麼通過擴展插入?因爲應用程序已經完成了很多工作,但我們意識到無論我們使用Insert,我們都需要這個CSS類。我們只需在全部文件中對'type =「插入」>「與'type =」NewInsert「>'進行全局替換。

回答

2

爲了實現我想要的,我必須重寫Insert的renderComponent方法。這只是因爲Tapestry 4.0.2沒有setStyleClass方法。基本上,它看起來像

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

如果我們有一個setStyleClass方法,我們可以剛纔做

setStyleClass(MY_CLASS); 
super.renderComponent; 
0

爲什麼覆蓋插入?爲什麼不創建您自己的InsertSpan組件?看看插入的源代碼,你會看到它是多麼的簡單...隨意剪切和粘貼,它是開源的。

更好的是,升級到Tapestry 5; Tapestry 4的東西在四年左右沒有得到積極的開發。