不带 标签的扩展基本检票口html

问题描述 投票:0回答:2

如果基本检票口不包含<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(注入我的属性)的地方?

java wicket
2个回答
2
投票

您可以重写#getMarkup()方法并修改其结果,但是比起提供一个完整的.html文件进行修改,它更容易被黑客攻击。

提供您自己的标记文件对我来说完全是一件优雅的事!


0
投票

一种方法是在您的基础页面中定义一个方法,该方法返回一个片段,该片段将被插入下面的'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()方法以返回它。希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.