Hi Tom,

I'd suggest not to use Spring to manage panels. You should rather create a
new panel for every page and request. You should use Spring to manage your
services and inject those into your panels.

Best regards, Stefan



Tom John wrote:
> 
> Hi,
> 
> First of all let me apologise for the length of this post, I thought I
> should include too much info rather than too little.
> 
> I'm using wicket-1.3.1, Spring 2.5.1 on JDK1.5 and Jetty6.1.6.  My goal is
> to define 1..n Panels in my Spring application context then access them
> from within a test page using @SpringBean annotations.
> 
> applicationContext.xml contains:
> 
>     <bean id="testPanel1" class="com.example.TestPanel" scope="prototype">
>         <constructor-arg value="testPanelOne"/>
>     </bean>
> 
> TestPage class is as follows:
> 
> 
> public class TestPage extends WebPage {
> 
>     @SpringBean(name="testPanel1")
>     private TestPanel testPanel1;
> 
>     public TestPage() {
>         add(testPanel1);
>     }
> }
> 
> 
> And TestPanel class is as follows:
> 
> 
> public class TestPanel extends Panel implements ITestPanel {
> 
>     private TestForm form;
> 
>     public TestPanel(String id) {
>         super(id);
> 
>         form = new TestForm("testForm");
>         form.setTestFormField("oranges");
>         add(form);
>     }
> 
>     private class TestForm extends Form {
>         private String testFormField;
> 
>         public TestForm(String id) {
>             super(id);
>             add(new TextField("testFormField", new PropertyModel(this,
> "testFormField")));
>         }
> 
>         protected void onSubmit() {
>             PageParameters params = new PageParameters();
>             params.add("testFormField", testFormField);
>         }
> 
>         public void setTestFormField(String testFormField) {
>             this.testFormField = testFormField;
>         }
>     }
> }
> 
> 
> So, the problem is that when I hit http://localhost:8080/ the
> "add(testPanel1);" line in the constructor for TestPage causes the
> following exception to be thrown:
> 
> 
> WicketMessage: Error attaching this container for rendering: [Page class =
> com.example.TestPage, id = 0, version = 0]
> 
> Root cause:
> 
> java.lang.IllegalArgumentException: Protected method: onBeforeRender()V
> at net.sf.cglib.proxy.MethodProxy$1.invoke(MethodProxy.java:55)
> at
> org.apache.wicket.proxy.LazyInitProxyFactory$CGLibInterceptor.intercept(LazyInitProxyFactory.java:318)
> at
> WICKET_com.example.TestPanel$$EnhancerByCGLIB$$504480a9.onBeforeRender(<generated>)
> at org.apache.wicket.Component.internalBeforeRender(Component.java:995)
> at org.apache.wicket.Component.beforeRender(Component.java:1027)
> at
> org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1513)
> at org.apache.wicket.Component.onBeforeRender(Component.java:3657)
> at org.apache.wicket.Page.onBeforeRender(Page.java:1402)
> at org.apache.wicket.Component.internalBeforeRender(Component.java:995)
> at org.apache.wicket.Component.beforeRender(Component.java:1027)
> at org.apache.wicket.Component.prepareForRender(Component.java:2139)
> at org.apache.wicket.Page.renderPage(Page.java:870)
> at
> org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.respond(BookmarkablePageRequestTarget.java:231)
> at
> org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:103)
> at
> org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1172)
> at org.apache.wicket.RequestCycle.step(RequestCycle.java:1241)
> at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1316)
> at org.apache.wicket.RequestCycle.request(RequestCycle.java:493)
> at
> org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:354)
> at
> org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:121)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
> at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
> at
> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:367)
> at
> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> at
> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> at
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
> at org.mortbay.jetty.Server.handle(Server.java:295)
> at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:503)
> at
> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:827)
> at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:511)
> at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:210)
> at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:379)
> at
> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:226)
> at
> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
> 
> Complete stack:
> 
> org.apache.wicket.WicketRuntimeException: Error attaching this container
> for rendering: [Page class = com.example.TestPage, id = 0, version = 0]
> at
> org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1525)
> at org.apache.wicket.Component.onBeforeRender(Component.java:3657)
> at org.apache.wicket.Page.onBeforeRender(Page.java:1402)
> at org.apache.wicket.Component.internalBeforeRender(Component.java:995)
> at org.apache.wicket.Component.beforeRender(Component.java:1027)
> at org.apache.wicket.Component.prepareForRender(Component.java:2139)
> at org.apache.wicket.Page.renderPage(Page.java:870)
> at
> org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.respond(BookmarkablePageRequestTarget.java:231)
> at
> org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:103)
> at
> org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1172)
> at org.apache.wicket.RequestCycle.step(RequestCycle.java:1241)
> at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1316)
> at org.apache.wicket.RequestCycle.request(RequestCycle.java:493)
> at
> org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:354)
> 
> 
> Based on this stack trace I tried overriding onBeforeRender() in TestPanel
> and changing it's scope to public ... just to see what would happen:
> 
>     public void onBeforeRender() {
>         super.onBeforeRender();
>     }
> 
> but that then caused the following exception to be thrown which claims
> "Something in the hierarchy of
> WICKET_com.example.TestPanel$$EnhancerByCGLIB$$11ed548f has not called
> super.onBeforeRender() in the override of onBeforeRender() method", which
> is clearly not the case.
> 
> 
> WicketMessage: Error attaching this container for rendering: [Page class =
> com.example.TestPage, id = 0, version = 0]
> 
> Root cause:
> 
> java.lang.IllegalStateException: org.apache.wicket.Component has not been
> properly rendered. Something in the hierarchy of
> WICKET_com.example.TestPanel$$EnhancerByCGLIB$$11ed548f has not called
> super.onBeforeRender() in the override of onBeforeRender() method
> at org.apache.wicket.Component.internalBeforeRender(Component.java:999)
> at org.apache.wicket.Component.beforeRender(Component.java:1027)
> at
> org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1513)
> at org.apache.wicket.Component.onBeforeRender(Component.java:3657)
> at org.apache.wicket.Page.onBeforeRender(Page.java:1402)
> at org.apache.wicket.Component.internalBeforeRender(Component.java:995)
> at org.apache.wicket.Component.beforeRender(Component.java:1027)
> at org.apache.wicket.Component.prepareForRender(Component.java:2139)
> at org.apache.wicket.Page.renderPage(Page.java:870)
> at
> org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.respond(BookmarkablePageRequestTarget.java:231)
> at
> org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:103)
> at
> org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1172)
> at org.apache.wicket.RequestCycle.step(RequestCycle.java:1241)
> at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1316)
> at org.apache.wicket.RequestCycle.request(RequestCycle.java:493)
> at
> org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:354)
> at
> org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:121)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
> at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
> at
> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:367)
> at
> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> at
> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> at
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
> at org.mortbay.jetty.Server.handle(Server.java:295)
> at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:503)
> at
> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:827)
> at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:511)
> at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:210)
> at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:379)
> at
> org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:226)
> at
> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
> 
> Complete stack:
> 
> org.apache.wicket.WicketRuntimeException: Error attaching this container
> for rendering: [Page class = com.example.TestPage, id = 0, version = 0]
> at
> org.apache.wicket.MarkupContainer.onBeforeRenderChildren(MarkupContainer.java:1525)
> at org.apache.wicket.Component.onBeforeRender(Component.java:3657)
> at org.apache.wicket.Page.onBeforeRender(Page.java:1402)
> at org.apache.wicket.Component.internalBeforeRender(Component.java:995)
> at org.apache.wicket.Component.beforeRender(Component.java:1027)
> at org.apache.wicket.Component.prepareForRender(Component.java:2139)
> at org.apache.wicket.Page.renderPage(Page.java:870)
> at
> org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.respond(BookmarkablePageRequestTarget.java:231)
> at
> org.apache.wicket.request.AbstractRequestCycleProcessor.respond(AbstractRequestCycleProcessor.java:103)
> at
> org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1172)
> at org.apache.wicket.RequestCycle.step(RequestCycle.java:1241)
> at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1316)
> at org.apache.wicket.RequestCycle.request(RequestCycle.java:493)
> at
> org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:354)
> 
> 
> Can anyone throw some light on what I'm doing wrong.  I'm not tied to the
> idea of the Panels being prototype beans however without it, immediately
> on server startup, I get a "WicketRuntimeException: There is no
> application attached to current thread main".  Making them prototype seems
> to be the only way for me to get my server to startup cleanly.
> 
> Thanks,
> Tom.
> 


-----
-------
Stefan Fußenegger
http://talk-on-tech.blogspot.com // looking for a nicer domain ;)
-- 
View this message in context: 
http://www.nabble.com/Accessing-prototype-scoped-panel-beans-using-%40SpringBean-annotation-tp15627974p15631515.html
Sent from the Wicket - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to