将wicket迁移到1.5后,我遇到了这个问题。 在Wicket 1.5中我(程序员在我之前)在构造函数中添加了JS和CSS引用,然后是组件,simmilar对此:
public abstract class PageTemplate extends WebPage implements IHeaderContributor {
public BarePageTemplate() {
this(null);
}
public BarePageTemplate(PageParameters params) {
super(params);
add(JavascriptPackageResource.getHeaderContribution(ResourceMarker.class, "js/jquery-1.4.2.min.js"));
add(JavascriptPackageResource.getHeaderContribution(ResourceMarker.class, "js/jquery-ui-1.8.4.custom.min.js"));
[...]
jGrowlMarker = new Label("jGrowlMarker"); // placeholder for jgrowl messages
jGrowlMarker.setOutputMarkupId(true);
jGrowlMarker.add(new JGrowlBehavior());
add(jGrowlMarker);
}
}
在wicket 1.5中,这已不再可能。根据{{3}},我将此代码重构为:
public abstract class PageTemplate extends WebPage implements IHeaderContributor {
public BarePageTemplate() {
this(null);
}
public BarePageTemplate(PageParameters params) {
super(params);
jGrowlMarker = new Label("jGrowlMarker"); // placeholder for jgrowl messages
jGrowlMarker.setOutputMarkupId(true);
jGrowlMarker.add(new JGrowlBehavior());
add(jGrowlMarker);
}
@Override
public void renderHead(IHeaderResponse response) {
response.renderJavaScriptReference(new CommonResourceRef("js/jquery-1.4.2.min.js"));
response.renderJavaScriptReference(new CommonResourceRef("js/jquery-ui-1.8.4.custom.min.js"));
[...]
}
}
这段代码有效,我的意思是它包括那些js
。导致我出现问题的是,现在我的组件(在本例中为jGrowlMarker)在页面包含那些js之前在页面中呈现:
// jGrowl component
<script type="text/javascript" src="./wicket/resource/pl.softq.commons.ui.resource.ResourceMarker/js/jquery-1.4.2.min-ver-65B352E1BA79F0E2A3B1E014BC2571AF.js"></script>
<script type="text/javascript" src="./wicket/resource/pl.softq.commons.ui.resource.ResourceMarker/js/jquery-ui-1.8.4.custom.min-ver-88A9784D8E08D25998F239E2D65F03D7.js"></script>
因为它没有正常工作(我认为这是一个问题)。它尝试创建jGrowl组件,但在此组件之后添加jGrowl.js。
[...]
象征着我的其余js和css refenreces(包括jGrowl)。我试图添加super.renderHead(response)
;到renderHead
但它也不起作用(super.renderHead在Component.class
中引用空的)。
所以我的问题是:如何在renderHead
初始化后添加组件或如何在renderHead
中添加组件。
我不是wicket的专家,所以如果您需要更多代码,请告诉我。
答案 0 :(得分:2)
您可以将renderHead()方法移动到JGrowlBehavior。这样它首先会贡献依赖项,然后是jgrowl.js本身。 如果依赖关系是由页面中的其他内容提供的,那么Wicket将检测到这一点并仅提供一次。
在Wicket 6.x中,该领域还有进一步的改进。您可以阅读http://wicketinaction.com/2012/07/wicket-6-resource-management/