您如何推荐我在Tapestry 4中扩展Insert类?

时间:2009-06-02 23:16:34

标签: tapestry

我没有太多的Tapestry经验,所以我真的不知道从哪里开始。

我需要使用一个新组件扩展Insert组件,比如NewInsert,它将给定的CSS类应用于要插入的内容。我该怎么做?

我基本上想要得到像<span class="myClass">The value</span>这样的东西。

为什么要通过扩展插入?因为应用程序已经完成,但我们意识到在我们使用Insert的任何地方都需要这个CSS类。我们将在'type =“Insert”&gt;'上进行全局替换'type =“NewInsert”&gt;'在所有文件中。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

为什么要覆盖插入?为什么不创建自己的InsertSpan组件?只需看看Insert的来源,您就会看到它的简单性......随意剪切和粘贴,它是开源的。

更好的是,升级到Tapestry 5; Tapestry 4的东西在大约四年内没有得到积极开发。