我没有太多的Tapestry经验,所以我真的不知道从哪里开始。
我需要使用一个新组件扩展Insert组件,比如NewInsert,它将给定的CSS类应用于要插入的内容。我该怎么做?
我基本上想要得到像<span class="myClass">The value</span>
这样的东西。
为什么要通过扩展插入?因为应用程序已经完成,但我们意识到在我们使用Insert的任何地方都需要这个CSS类。我们将在'type =“Insert”&gt;'上进行全局替换'type =“NewInsert”&gt;'在所有文件中。
答案 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的东西在大约四年内没有得到积极开发。