javascript - 尽管 JavascriptFilteredIntoFooterHeaderResponse 将 JS 添加到 header

标签 javascript wicket

我使用 JavascriptFilteredIntoFooterHeaderResponse 来订购导入的 CSS 和 JS。有了这个类,我所有的 CSS 都放在 header 中,所有的 JS 都放在 </body> 附近的一个单独的容器中。标签。但现在我需要向页眉添加一个 JS,但 wicket 将每个 JS 都推送到页脚。知道有人有解决这个问题的方法吗? JavascriptFilteredIntoFooterHeaderResponse 是最终的,不能被覆盖。

WicketApplication

@Override
public void init()
{
    super.init();

    setHeaderResponseDecorator( new IHeaderResponseDecorator()
    {
        @Override
        public IHeaderResponse decorate( IHeaderResponse response )
        {
            return new JavascriptFilteredIntoFooterHeaderResponse( response, FOOTER_FILTER_NAME );
        }
    } );
}

BasePage.java

public BasePage()
{       
    add( new HeaderResponseFilteredResponseContainer( FOOTER_FILTER_NAME, FOOTER_FILTER_NAME ) );
}

BasePage.html

<body>
...
<div wicket:id="footerBucket" />
</body>

最佳答案

您不需要覆盖JavascriptFilteredIntoFooterHeaderResponse。只需将 org.apache.wicket.resource.filtering.HeaderResponseContainerFilteringHeaderResponse 与以下构造函数一起使用即可:

HeaderResponseContainerFilteringHeaderResponse(IHeaderResponse response, 
        String headerFilterName, IHeaderResponseFilter[] filters)

例如,如果您写:

IHeaderResponseFilter[] filters = new IHeaderResponseFilter[] { 
        new CssAcceptingHeaderResponseFilter(HEADER_FILTER_NAME),
        new JavascriptAcceptingHeaderResponseFilter(FOOTER_FILTER_NAME) };

return new HeaderResponseContainerFilteringHeaderResponse(response, 
        HEADER_FILTER_NAME, filters);

它将与您在代码中使用的 JavascriptFilteredIntoFooterHeaderResponse 相同。

这是一个匿名过滤器类的示例,您可以使用它来代替 CssAcceptingHeaderResponseFilter 来完成您的任务。文件“script-for-the-header.js”是您希望在 header 中包含的脚本。

new CssAcceptingHeaderResponseFilter(HEADER_FILTER_NAME) {

    @Override
    public boolean acceptReference(ResourceReference ref) {
        if (!Strings.isEmpty(ref.getName()) && ref.getName().equals("script-for-the-header.js")) {
            return true;
        } else {
            return super.acceptReference(ref);
        }
    }
}

为了更好地组织您的代码,您还可以考虑重写 HeaderResponseContainerFilteringHeaderResponse (如果您还没有猜到,它也是 JavascriptFilteredIntoFooterHeaderResponse 的父级)。请参阅 JavascriptFilteredIntoFooterHeaderResponse.java 中的源代码了解详情。

关于javascript - 尽管 JavascriptFilteredIntoFooterHeaderResponse 将 JS 添加到 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12672218/

相关文章:

java - 在 AJAX onchange 事件中获取 Wicket 文本框的值

javascript - 通过在 Shiny 中添加复选框使列动态化

javascript - 如何让 jQuery 或 Javascript 根据当前 url 更改 css?

javascript - 导入包含 script 标签的外部 html - 不起作用

javascript - window.open() 在 react 应用程序中不起作用

java - 在 Apache Wicket 中更改模态窗口的 unloadConfirmation 消息

java - Wicket:指定全局应用程序属性的模式

javascript - 如何预先计算在 waitForKeyElements() 回调中使用的内容?

java - jetty 7 : configuring JNDI for Start. java

java - Wicket getPath 仅返回 id