Hi Charles@SpringBean only seems to work in some wicket base classes. In your own separate classes, noone will actively inject your content. What I do (maybe there's a better possibility) is to add this line to that classes constructor to force injection:
InjectorHolder.getInjector().inject(this); That way, all @SpringBean fields will be injected correctly. Matt Charles Moulliard wrote:
Hi,
I have a strange problem that I can't explain. I don't know if this is a bug
or a limitation.
When I inject Spring dependency of a service inside a Wicket web page,
everything works fine but when I inject this dependency in a separate class
(in the following code example, the class RequestProvider is not longer
defined as internal class and moved to another package), I have a null
pointer exception at the following line :
09:48:07,432 | ERROR | 3811...@qtp1-1 | RequestCycle |
org.apache.wicket.RequestCycle 1521 | Error attaching this container for
rendering: [Page class = com.xpectis.x3s.fundbox.web.RequestPage, id = 0,
version = 0]
org.apache.wicket.WicketRuntimeException: Error attaching this container for
rendering: [Page class = com.xpectis.x3s.fundbox.web.RequestPage, id = 0,
version = 0]
at
org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1763)
at org.apache.wicket.Component.onBeforeRender(Component.java:3863)
at org.apache.wicket.Page.onBeforeRender(Page.java:1501)
at org.apache.wicket.Component.internalBeforeRender(Component.java:1061)
...
Caused by: java.lang.NullPointerException
at
com.xpectis.x3s.fundbox.web.data.RequestProvider.size(RequestProvider.java:63)
at
org.apache.wicket.markup.repeater.data.DataViewBase.internalGetItemCount(DataViewBase.java:140)
at
org.apache.wicket.markup.repeater.AbstractPageableView.getItemCount(AbstractPageableView.java:252)
Line 63 corresponds to : size = requestService.findRequest().size();
It seems that the requestService is not longer available when size method is
called
Code which is working :
public class RequestPage extends WebPage {
@SpringBean
private RequestService requestService;
....
private class RequestProvider implements IDataProvider {
private List<Request> result = new ArrayList<Request>();
private RequestFormModel requestFormModel;
private Request request;
public RequestProvider() {}
public RequestProvider(RequestFormModel requestFormModel) {
this.requestFormModel = requestFormModel;
}
public Iterator iterator(int first, int count) {
if (requestFormModel != null) {
if (requestFormModel.getRequestId() != null) {
request =
requestService.getRequest(requestFormModel.getRequestId());
result.add(request);
} else if (requestFormModel.getFileName() != null) {
result =
requestService.findRequestByFileName(requestFormModel.getFileName());
} else {
result = requestService.findRequest(first, count);
}
} else {
result = requestService.findRequest(first, count);
}
return result.iterator();
}
public int size() {
int size = 0 ;
if (requestFormModel != null) {
if (requestFormModel.getRequestId() != null) {
request =
requestService.getRequest(requestFormModel.getRequestId());
result.add(request);
size = result.size();
} else if (requestFormModel.getFileName() != null) {
size =
requestService.findRequestByFileName(requestFormModel.getFileName()).size();
} else {
size = requestService.findRequest().size();
}
} else {
size = requestService.findRequest().size();
}
return size;
}
public IModel model(Object object) {
return new Model((Request) object);
}
Charles Moulliard
Senior Enterprise Architect
Apache Camel Committer
*****************************
blog : http://cmoulliard.blogspot.com
smime.p7s
Description: S/MIME Cryptographic Signature
