FileUploadField.onDetach() causes IllegalStateException() ---------------------------------------------------------
Key: WICKET-2045 URL: https://issues.apache.org/jira/browse/WICKET-2045 Project: Wicket Issue Type: Bug Components: wicket Affects Versions: 1.4-RC1 Environment: Linux ubuntu 2.6.24-23-generic #1 SMP Thu Nov 27 18:13:46 UTC 2008 x86_64 GNU/Linux java version "1.6.0_07" Java(TM) SE Runtime Environment (build 1.6.0_07-b06) Java HotSpot(TM) 64-Bit Server VM (build 10.0-b23, mixed mode) Reporter: Andy Thomson Priority: Minor This was detected when using the example/sample Upload demo locally. ERROR - RequestCycle - there was an error cleaning up target org.apache.wicket.request.target.component.listener.listenerinterfacerequesttar...@-20665159[page class = org.apache.wicket.examples.upload.UploadPage, id = 0, version = 0]->simpleUpload->interface org.apache.wicket.markup.html.form.IFormSubmitListener.IFormSubmitListener (request paramaters: [RequestParameters componentPath=0:simpleUpload pageMapName=null versionNumber=0 interfaceName=IFormSubmitListener componentId=null behaviorId=null urlDepth=-1 parameters={} onlyProcessIfPathActive=false]). java.lang.IllegalStateException: Attempt to set model object on null model of component: simpleUpload:fileInput at org.apache.wicket.Component.setDefaultModelObject(Component.java:2962) at org.apache.wicket.markup.html.form.FormComponent.setModelObject(FormComponent.java:1652) at org.apache.wicket.markup.html.form.upload.FileUploadField.onDetach(FileUploadField.java:175) Looking at the source indicates that unless onDetach() is over-ridden the default will always generate this exception. Here is the source for the FileUpLoadField.onDetach(). The line that creates the exception is noted by the "<<<HERE" in the snippet below. FileUpLoadField.onDetach() snippet: /** * Clean up at the end of the request. This means closing all inputstreams which might have been * opened from the fileUpload. * * @see org.apache.wicket.Component#onDetach() */ @Override protected void onDetach() { if (fileUpload != null && forceCloseStreamsOnDetach()) { fileUpload.closeStreams(); fileUpload = null; setModelObject(null); <<<HERE } super.onDetach(); } Drilling further down, the setModelObject() calls FormComponent.setModelObject(), which in turns calls Component.setDefaultModelObject(). Inside setDefaultModelObject(), a check is done to see if the model object is null, if it is, it throws an exception: public final Component setDefaultModelObject(final Object object) { final IModel<Object> model = (IModel<Object>)getDefaultModel(); // Check whether anything can be set at all if (model == null) { throw new IllegalStateException( "Attempt to set model object on null model of component: " + getPageRelativePath()); } ... } -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.