Serializable And Throwable Consumer - Oboe吹きプログラマの黙示録
を書いたので、忘れないように本当にステートレス Page として作ったのかチェックするのに
有効な方法を書いておく。
Page クラスに、StatelessComponent アノテーションを付与して WebApplation の init() で
StatelessChecker を beforeペーレンダリングリスナに登録しておく。
@StatelessComponent public class HomePage extends WebPage{ // 省略 }
WebApplation の init() で
public class SampleApplication extends WebApplication{ @Override protected void init(){ getComponentPostOnBeforeRenderListeners().add(new StatelessChecker()); }
こうしておくとページを描画前に以下のとおり、ページの配置したどの?コンポーネントの組み込みが
ステートレスになっていなかったかを、例外で教えてくれる。
org.apache.wicket.devutils.stateless.StatelessCheckFailureException: '[Page class = org.sample.page.HomePage, id = 9, render count = 1]' claims to be stateless but isn't. Offending component: [Button [Component id = submit]] at org.apache.wicket.devutils.stateless.StatelessChecker.onBeforeRender(StatelessChecker.java:133) at org.apache.wicket.application.ComponentOnBeforeRenderListenerCollection$1.notify(ComponentOnBeforeRenderListenerCollection.java:40) at org.apache.wicket.application.ComponentOnBeforeRenderListenerCollection$1.notify(ComponentOnBeforeRenderListenerCollection.java:36) at org.apache.wicket.util.listener.ListenerCollection.notify(ListenerCollection.java:80) at org.apache.wicket.application.ComponentOnBeforeRenderListenerCollection.onBeforeRender(ComponentOnBeforeRenderListenerCollection.java:35) at org.apache.wicket.Component.internalBeforeRender(Component.java:949) at org.apache.wicket.Component.beforeRender(Component.java:1016) at org.apache.wicket.Component.internalPrepareForRender(Component.java:2231) at org.apache.wicket.Page.internalPrepareForRender(Page.java:239) at org.apache.wicket.Component.render(Component.java:2320) at org.apache.wicket.Page.renderPage(Page.java:987) at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:124) at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:236) at org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:202) at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:912) at org.apache.wicket.request.RequestHandlerExecutor.execute(RequestHandlerExecutor.java:65) at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:283) at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:253) at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:221) at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:262) at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:204) at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:286) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1533) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1489) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:844)