如果基本检票口不包含<wicket:child/>
标签,是否可以扩展现有检票口(=在现有检票口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(注入我的属性)的地方?
您可以重写#getMarkup()
方法并修改其结果,但是比起提供一个完整的.html文件进行修改,它更容易被黑客攻击。
提供您自己的标记文件对我来说完全是一件优雅的事!
一种方法是在您的基础页面中定义一个方法,该方法返回一个片段,该片段将被插入下面的'childContent'中:
<wicket:panel>
<div class="field-wrapper"><input wicket:id="field1" type="text"/></div>
<div wicket:id="childContent"></div>
</wicket:panel>
因此,在您的基本页面中,您将具有此函数,默认情况下该函数返回null,但是扩展页面可以覆盖它以提供其自己的特定内容:
protected Fragment getChildContent() { return null; }
您的基本页面将按以下方式使用它:
Fragment childContent = getChildContent();
if(childContent != null) {
addOrReplace(childContent);
} else {
addOrReplace(new WebComponent("childContent").setVisible(false));
}
比起在扩展页面中,您可以使用自己的html定义Fragment并重写getChildContent()方法以返回它。希望有帮助!