3

我无法确定 Wicket 应用程序中 RuntimeException 的原因。我设置了许多断点,但是当我提交表单时,没有一个会触发,只有在表单加载时才会触发。这是堆栈:

WicketMessage:没有为类定义获取方法:类 this.is.my.class.WicketDocumentModel 表达式:DocumentUpload

根本原因:

org.apache.wicket.WicketRuntimeException:没有为类定义获取方法:类 this.is.my.class.WicketDocumentModel 表达式:在 org.apache.wicket.util.lang.PropertyResolver.getGetAndSetter(PropertyResolver.java:445) 处的 DocumentUpload org.apache.wicket.util.lang.PropertyResolver.getValue(PropertyResolver.java:90) 在 org.apache.wicket.model 的 org.apache.wicket.util.lang.PropertyResolver.getObjectAndGetSetter(PropertyResolver.java:287)。 AbstractPropertyModel.getObject(AbstractPropertyModel.java:117) 在 org.apache.wicket.Component.getDefaultModelObject(Component.java:1664) 在 org.apache.wicket.Component$3.compare(Component.java:548) 在 org.apache。 org.apache.wicket.markup.html.form.FormComponent.updateModel(FormComponent.java:1168) 上 org.apache.wicket.markup.html.form.upload 上的 wicket.Component.setDefaultModelObject(Component.java:3049)。FileUploadField.updateModel(FileUploadField.java:100) 在 org.apache.wicket.markup.html.form.Form$FormModelUpdateVisitor.component(Form.java:225) 在 org.apache.wicket.markup.html.form.FormComponent。 visitComponentsPostOrderHelper(FormComponent.java:514) at org.apache.wicket.markup.html.form.FormComponent.visitComponentsPostOrderHelper(FormComponent.java:493) at org.apache.wicket.markup.html.form.FormComponent.visitComponentsPostOrder(FormComponent. java:465) 在 org.apache.wicket.markup.html.form.Form.internalUpdateFormComponentModels(Form.java:2051) 在 org.apache.wicket.markup.html.form.Form.updateFormComponentModels(Form.java:2019)在 org.apache.wicket.markup.html.form.Form.process(Form.java:984) 在 org.apache.wicket.markup.html.form.Form.process(Form.java:911) 在 org.apache .wicket.markup.html.form.Form.onFormSubmitted(Form.java:876) 在 java.lang。org.apache.wicket.RequestListenerInterface.invoke(RequestListenerInterface.java:182) 的 reflect.Method.invoke(Method.java:597) org.apache.wicket.request.target.component.listener.ListenerInterfaceRequestTarget.processEvents(ListenerInterfaceRequestTarget. java:73) 在 org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1250) 在 org.apache.wicket.RequestCycle.step 的 org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92) (RequestCycle.java:1329) 在 org.apache.wicket.RequestCycle.steps(RequestCycle.java:1428) 在 org.apache.wicket.RequestCycle.request(RequestCycle.java:545) 在 org.apache.wicket.protocol。 http.WicketFilter.doGet(WicketFilter.java:456) 在 org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:289) 在 org.apache.catalina.core。ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org .apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve .java:102) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 在 org.apache.jk。 server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190) 在 org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:283) 在 org.apache.jk.common.ChannelSocket。在 org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889) 在 org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697) 在 org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:697) 调用(ChannelSocket.java:767) .apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690) 在 java.lang.Thread.run(Thread.java:619)

我确实在这里找到了关于类似问题的讨论,但我还没有完全能够将那里提出的建议变成适合我情况的解决方案。我的类不包含名为 DocumentUpload 的 Java 变量,但包含以下内容:

fuf = new FileUploadField("DocumentUpload");
4

1 回答 1

6

我在这个问题上花了几个小时,再一次,在我向 SO 发帖 20 分钟后,我又想通了。解决方法是将上传字段声明转换为提供模型的声明,如下所示:

fuf = new FileUploadField("DocumentUpload", new Model<FileUpload>());

编辑:事实证明这与 1.3 -> 1.4 迁移有关。根据迁移指南

FileUploadField - 现在需要模型

FileUploadField 现在需要一个模型。这意味着,如果您之前使用了仅限 ID 的 >constructor(即 new FileUploadField("myFileField")),则需要将其更改为包含 >a 模型(即 new FileUploadField("myFileField", new Model())) .

于 2009-11-24T19:42:00.120 回答