Wicket 导叶头部渲染顺序
我有Wicket申请表。我想在页面js之后呈现一些面板js代码。 为了将JS呈现到pagee中,我使用renderHead方法Wicket 导叶头部渲染顺序,wicket,Wicket,我有Wicket申请表。我想在页面js之后呈现一些面板js代码。 为了将JS呈现到pagee中,我使用renderHead方法 @Override public void renderHead(IHeaderResponse response) { response.render(JavaScriptReferenceHeaderItem.forReference(new JavaScriptResourceReference(BasePage.class, "assets/js/cor
@Override
public void renderHead(IHeaderResponse response) {
response.render(JavaScriptReferenceHeaderItem.forReference(new JavaScriptResourceReference(BasePage.class, "assets/js/core/jquery.min.js")));
super.renderHead(response);
response.render(JavaScriptReferenceHeaderItem.forReference(new JavaScriptResourceReference(BasePage.class, "assets/js/core/popper.min.js")));
response.render(JavaScriptReferenceHeaderItem.forReference(new JavaScriptResourceReference(BasePage.class, "assets/js/core/bootstrap.min.js")));
response.render(JavaScriptReferenceHeaderItem.forReference(new JavaScriptResourceReference(BasePage.class, "assets/js/core/jquery.slimscroll.min.js")));
response.render(JavaScriptReferenceHeaderItem.forReference(new JavaScriptResourceReference(BasePage.class, "assets/js/core/jquery.scrollLock.min.js")));
response.render(JavaScriptReferenceHeaderItem.forReference(new JavaScriptResourceReference(BasePage.class, "assets/js/core/jquery.appear.min.js")));
response.render(JavaScriptReferenceHeaderItem.forReference(new JavaScriptResourceReference(BasePage.class, "assets/js/core/jquery.countTo.min.js")));
response.render(JavaScriptReferenceHeaderItem.forReference(new JavaScriptResourceReference(BasePage.class, "assets/js/core/js.cookie.min.js")));
response.render(JavaScriptReferenceHeaderItem.forReference(new JavaScriptResourceReference(BasePage.class, "assets/js/codebase.js")));
}
还想在面板上添加一些与面板相关的代码
@Override
public void renderHead(IHeaderResponse response) {
super.renderHead(response);
response.render(JavaScriptReferenceHeaderItem.forReference(new JavaScriptResourceReference(CompanySignUpPanelStep23.class, "CompanySignUpPanelStep23.js")));
}
panel js依赖于页面呈现的jQuery
看起来像wicket使用internalRenderHead渲染它,首先渲染Childs,然后渲染自己的头部
/**
* THIS METHOD IS NOT PART OF THE WICKET PUBLIC API. DO NOT USE IT.
*
* Print to the web response what ever the component wants to contribute to the head section.
* Make sure that all attached behaviors are asked as well.
* <p>
* NOT intended for overriding by framework clients. Rather, use
* {@link Component#renderHead(org.apache.wicket.markup.head.IHeaderResponse)}
* </p>
*
* @param container
* The HtmlHeaderContainer
*/
public void internalRenderHead(final HtmlHeaderContainer container)
{
if (isVisibleInHierarchy() && isRenderAllowed())
{
if (log.isDebugEnabled())
{
log.debug("internalRenderHead: {}", toString(false));
}
IHeaderResponse response = container.getHeaderResponse();
// Allow component to contribute
if (response.wasRendered(this) == false)
{
StringResponse markupHeaderResponse = new StringResponse();
Response oldResponse = getResponse();
RequestCycle.get().setResponse(markupHeaderResponse);
try
{
// Make sure the markup source strategy contributes to the header first
// to be backward compatible. WICKET-3761
getMarkupSourcingStrategy().renderHead(this, container);
CharSequence headerContribution = markupHeaderResponse.getBuffer();
if (Strings.isEmpty(headerContribution) == false)
{
response.render(StringHeaderItem.forString(headerContribution));
}
}
finally
{
RequestCycle.get().setResponse(oldResponse);
}
// Then let the component itself to contribute to the header
renderHead(this, response);
response.markRendered(this);
}
// Then ask all behaviors
for (Behavior behavior : getBehaviors())
{
if (isBehaviorAccepted(behavior))
{
if (response.wasRendered(behavior) == false)
{
behavior.renderHead(this, response);
List<IClusterable> pair = Arrays.asList(this, behavior);
response.markRendered(pair);
}
}
}
}
}
/**
*此方法不是WICKET公共API的一部分。不要使用它。
*
*在web响应中打印组件希望为head部分提供的内容。
*确保同时询问所有附加的行为。
*
*不打算被框架客户端覆盖。相反,使用
*{@link Component#renderHead(org.apache.wicket.markup.head.IHeaderResponse)}
*
*
*@param容器
*HtmlHeaderContainer
*/
公共void internalRenderHead(最终HtmlHeaderContainer容器)
{
如果(isVisibleInHierarchy()&&isRenderAllowed())
{
if(log.isDebugEnabled())
{
debug(“internalRenderHead:{}”,toString(false));
}
IHeaderResponse response=container.getHeaderResponse();
//允许组件参与
if(response.wasprended(this)=false)
{
StringResponse=new StringResponse();
Response oldsponse=getResponse();
RequestCycle.get().setResponse(MarkReaderResponse);
尝试
{
//确保标记源策略首先对标头作出贡献
//要向后兼容。WICKET-3761
GetMarkupSourceStrategy().renderHead(此,容器);
CharSequence headerContribution=markupHeaderResponse.getBuffer();
if(Strings.isEmpty(headerContribution)==false)
{
响应。呈现(StringHeaderItem.forString(headerContribution));
}
}
最后
{
RequestCycle.get().setResponse(oldResponse);
}
//然后让组件本身参与到标题中
renderHead(这个,响应);
答复.已提交(本);
}
//然后问所有的行为
对于(行为:getBehaviors())
{
如果(isBehaviorAccepted(behavior))
{
if(response.wasprended(behavior)==false)
{
renderHead(这个,响应);
List pair=Arrays.asList(这个,行为);
响应。标记(对);
}
}
}
}
}
有没有办法确定顺序?您应该改用Wicket/ResourceReference依赖项
Panel.js的JavaScriptResourceReference
应该覆盖其#getDependencies()
方法,并返回一个列表,其中包含jQuery.js的ResourceReference
。这样,每个资源将声明其依赖项,Wicket将以正确的顺序呈现它们
例如,见