AjaxLazyLoadPanel shouldn't call getLoadingComponent(String) in constructor
---------------------------------------------------------------------------
Key: WICKET-1891
URL: https://issues.apache.org/jira/browse/WICKET-1891
Project: Wicket
Issue Type: Improvement
Components: wicket-extensions
Affects Versions: 1.4-M2
Reporter: Craig McIlwee
Priority: Minor
Fix For: 1.4-M4
Use case:
class MyPanel extends AjaxLazyLoadPanel {
private boolean bool;
public MyPanel(String id, boolean bool) {
super(id); <-- bool is used in this call
this.bool = bool; <-- but not assigned until this call
}
public getLoadingComponent(String id) {
if (bool) {
return componentA;
} else {
return componentB;
}
}
}
-----
Since getLoadingComponent(String) is called as part of the super constructor
then the actual value of 'bool' can never be used. Furthur, if bool were an
object instead of a primitive could potentially cause an NPE. Instead the
loading component can be created in onBeforeRender():
protected void onBeforeRender() {
if (!renderedOnce) {
loadingComponent = getLoadingComponent("content");
add(loadingComponent.setRenderBodyOnly(true));
renderedOnce = true;
}
super.onBeforeRender();
}
... this also requires a change to the ajax behavior:
public boolean isEnabled(Component<?> component) {
return get("content") == loadingComponent || loadingComponent == null;
}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.