Java 扩展基本wicket html而不使用<;wicket:child/>;标签

Java 扩展基本wicket html而不使用<;wicket:child/>;标签,java,wicket,Java,Wicket,如果基本wicket不包含标记,是否可以扩展现有wicket(=在现有wicket html中附加附加属性/文本框) 例如,我想扩展一些使用以下html的java类: <wicket:panel> <div class="field-wrapper"><input wicket:id="field1" type="text"/></div> [I WANT TO INJECT ANOTHER TEXTBOX HERE] </wicke

如果基本wicket不包含
标记,是否可以扩展现有wicket(=在现有wicket html中附加附加属性/文本框)

例如,我想扩展一些使用以下html的java类:

<wicket:panel>
  <div class="field-wrapper"><input wicket:id="field1" type="text"/></div>
  [I WANT TO INJECT ANOTHER TEXTBOX HERE]
</wicket:panel>

[我想在这里插入另一个文本框]
我的扩展类从继承的类继承所有的基属性,并且我声明了一个附加属性。但我不知道是否/如何在基本html中附加附加属性,而不必克隆整个原始html并添加我的新属性,这不是一个优雅的解决方案

在解析/呈现原始html(注入我的属性)之前,我是否可以将任何事件附加到可以修改原始html的位置?

您可以覆盖
#getMarkup()
方法并修改其结果,但这比仅提供一个完整的.html文件和您的修改更具黑客性

提供您自己的标记文件对我来说是非常优雅的

您可以重写
#getMarkup()
方法并修改其结果,但这比只提供一个完整的.html文件和修改更为复杂


提供您自己的标记文件对我来说是非常优雅的

一种方法是在基页中定义一个方法,该方法返回一个片段,该片段将插入下面的“childContent”中:

<wicket:panel>
  <div class="field-wrapper"><input wicket:id="field1" type="text"/></div>
  <div wicket:id="childContent"></div>
</wicket:panel>
您的主页将按如下方式使用它:

Fragment childContent = getChildContent();
        if(childContent != null) {
            addOrReplace(childContent);
        } else {
            addOrReplace(new WebComponent("childContent").setVisible(false));
        }
而在扩展页面中,您可以使用自己的html定义一个片段,并重写getChildContent()方法以返回它。
希望有帮助

一种方法是在基页中定义一个方法,该方法返回一个片段,该片段将插入下面的“childContent”中:

<wicket:panel>
  <div class="field-wrapper"><input wicket:id="field1" type="text"/></div>
  <div wicket:id="childContent"></div>
</wicket:panel>
您的主页将按如下方式使用它:

Fragment childContent = getChildContent();
        if(childContent != null) {
            addOrReplace(childContent);
        } else {
            addOrReplace(new WebComponent("childContent").setVisible(false));
        }
而在扩展页面中,您可以使用自己的html定义一个片段,并重写getChildContent()方法以返回它。
希望有帮助

提供自己的标记实际上并不符合“继承原则”,即您希望使用原始的基本代码,只包含一些附加属性(如java类中的属性)。然而,如果原始标记打算被继承,那么它首先应该包含,否则我同意您的观点,任何“代码注入”可能比提供自己的完整标记更具黑客性。我想也许我可以重写一些函数,在这些函数中,我可以使用某种DOM更轻松地修改标记。这种方法是onComponentBody(),但它可以与MarkupStream一起使用,并且不像使用DOM那样方便。您也可以使用IComponentMarkupProvider,但我的意见是,提供MyPanel.html将更容易,也更易于维护提供自己的标记并不真正符合“继承原则”,即您希望使用原始的基本代码,只包含一些附加属性(如java类)。然而,如果原始标记打算被继承,那么它首先应该包含,否则我同意您的观点,任何“代码注入”可能比提供自己的完整标记更具黑客性。我想也许我可以重写一些函数,在这些函数中,我可以使用某种DOM更轻松地修改标记。这种方法是onComponentBody(),但它可以与MarkupStream一起使用,并且不像使用DOM那样方便。您也可以使用IComponentMarkupProvider,但我的意见是,提供MyPanel.html将更容易维护