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



Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to