首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不调用renderHead

不调用renderHead
EN

Stack Overflow用户
提问于 2011-05-27 21:11:55
回答 3查看 1.6K关注 0票数 4

我有一个实现IAjaxCallDecoratorIHeaderContributor的类CloakDecorator

代码语言:javascript
复制
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

代码语言:javascript
复制
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正在工作,但第二个不起作用。

EN

回答 3

Stack Overflow用户

发布于 2011-05-28 01:52:00

遗憾的是,简单地实现IHeaderContributor并不能保证您将真正地贡献给页面/组件的头部。这只适用于添加到页面和页面本身的ComponentIBehavior元素的实例。特别是来自IHeaderContributor的javadoc。

代码语言:javascript
复制
An interface to be implemented by components or behaviors that wish to 
contribute to the header section of the page.

调用此函数的特定代码在Component#renderHead(HtmlHeaderContainer)中。它检查自己和它的任何行为是否实现IHeaderContributor,然后添加这些贡献。

要解决问题,您可以执行以下任一操作:

  1. 让您的AjaxLink implement an IBehavior to your AjaxLink IHeaderContributor
  2. Add IHeaderContributor

根据使用频率的不同,选项#1可能是最好的。创建一个"CloakedAjaxLink“,它可以完成所需的所有操作。

票数 2
EN

Stack Overflow用户

发布于 2011-05-28 14:34:53

由于Wicket 1.5,如果IAjaxCallDecorators实现了IComponentAwareHeaderContributor,那么它们也可以贡献报头。

票数 1
EN

Stack Overflow用户

发布于 2011-05-28 01:52:24

我认为您需要向组件添加一个IHeaderContributor,才能使其真正“贡献”到文档中。你使用它的方式,你只使用了你想要的实现的一半。我建议你拆分你的实现,或者写一个包含这段代码的CloakLink,它将能够对它所添加的页面做出贡献。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6152695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档