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]