我有一个实现IAjaxCallDecorator和IHeaderContributor的类CloakDecorator
public class CloakDecorator implements IAjaxCallDecorator, IHeaderContributor {
@SuppressWarnings("unused")
private static final ResourceReference INDICATOR = new ResourceReference(CloakDecorator.class, "indicator.gif");
private static final ResourceReference JS = new JavascriptResourceReference(CloakDecorator.class, "CloakDecorator.js");
private static final ResourceReference CSS = new ResourceReference(CloakDecorator.class, "CloakDecorator.css");
public CloakDecorator() {
System.out.println("Constructor");
}
public void renderHead(final IHeaderResponse response) {
System.out.println("renderHead");
response.renderCSSReference(CSS);
response.renderJavascriptReference(JS);
}
@Override
public CharSequence decorateScript(CharSequence script) {
return script;
}
@Override
public CharSequence decorateOnSuccessScript(CharSequence script) {
return script;
}
@Override
public CharSequence decorateOnFailureScript(CharSequence script) {
return script;
}
}现在,我在AjaxLink中实例化CloakDecorator
AjaxLink link=new AjaxLink("") {
@Override
public void onClick(AjaxRequestTarget target) {
}
@Override
protected IAjaxCallDecorator getAjaxCallDecorator() {
return new CloakDecorator();
}
};问题是调用了CloakDecorator的构造函数,但没有调用renderHead方法。我做错了什么?我已经在构造函数和renderHead方法中放置了一些System.out.println,构造函数的System.out.println正在工作,但第二个不起作用。
发布于 2011-05-28 01:52:00
遗憾的是,简单地实现IHeaderContributor并不能保证您将真正地贡献给页面/组件的头部。这只适用于添加到页面和页面本身的Component和IBehavior元素的实例。特别是来自IHeaderContributor的javadoc。
An interface to be implemented by components or behaviors that wish to
contribute to the header section of the page.调用此函数的特定代码在Component#renderHead(HtmlHeaderContainer)中。它检查自己和它的任何行为是否实现IHeaderContributor,然后添加这些贡献。
要解决问题,您可以执行以下任一操作:
AjaxLink implement an IBehavior to your AjaxLink IHeaderContributorIHeaderContributor根据使用频率的不同,选项#1可能是最好的。创建一个"CloakedAjaxLink“,它可以完成所需的所有操作。
发布于 2011-05-28 14:34:53
由于Wicket 1.5,如果IAjaxCallDecorators实现了IComponentAwareHeaderContributor,那么它们也可以贡献报头。
发布于 2011-05-28 01:52:24
我认为您需要向组件添加一个IHeaderContributor,才能使其真正“贡献”到文档中。你使用它的方式,你只使用了你想要的实现的一半。我建议你拆分你的实现,或者写一个包含这段代码的CloakLink,它将能够对它所添加的页面做出贡献。
https://stackoverflow.com/questions/6152695
复制相似问题