Hendy Irawan created WICKET-6002:
------------------------------------

             Summary: FileUploadField makes form-component models become null 
on submit
                 Key: WICKET-6002
                 URL: https://issues.apache.org/jira/browse/WICKET-6002
             Project: Wicket
          Issue Type: Bug
          Components: wicket
    Affects Versions: 7.0.0
         Environment: Spring Boot 1.2.6, wicket-bootstrap 0.10.3, Tomcat 8
            Reporter: Hendy Irawan


First form: (not working)

{code:java}
        final Form<Void> form = new Form<>("form");

        final ListModel<FileUpload> filesModel = new ListModel<>();
        final FileUploadField fileFld = new FileUploadField("fileFld", 
filesModel);
        form.add(fileFld);

        final Model<GrayscaleMode> modeImageModel = new 
Model<>(GrayscaleMode.WHITE_ON_BLACK);
        final RadioChoice<GrayscaleMode> modeImage = new 
RadioChoice<>("modeImage",
                modeImageModel, ImmutableList.copyOf(GrayscaleMode.values()));
        form.add(modeImage);

        form.add(new AjaxButton("loadBtn2") {
            @Override
            protected void onAfterSubmit(AjaxRequestTarget target, Form<?> 
form) {
                super.onAfterSubmit(target, form);
                log.info("modeimageModel: {}", modeImageModel.getObject());
            }
        });
        add(form);
{code}

Second form: exactly same as above, but remove the fileUploadField.

{code:java}
final Form<Void> form2 = new Form<>("form2");
final Model<GrayscaleMode> modeImage2Model = new 
Model<>(GrayscaleMode.WHITE_ON_BLACK);
final RadioChoice<GrayscaleMode> modeImage2 = new RadioChoice<>("modeImage2",
        modeImage2Model, ImmutableList.copyOf(GrayscaleMode.values()));
form2.add(modeImage2);
form2.add(new AjaxButton("loadBtn3") {
    @Override
    protected void onAfterSubmit(AjaxRequestTarget target, Form<?> form) {
        super.onAfterSubmit(target, form);
        log.info("modeimageModel: {}", modeImage2Model.getObject());
    }
});
add(form2);
{code}

Markup:

{code}
<form class="col-md-3" wicket:id="form">
    <p><strong>Original</strong></p>
    <div>
        <input type="file" wicket:id="fileFld" accept="image/*"/>
        <p>
            <label>Mode</label>:
            <span wicket:id="modeImage"></span>
        </p>
        <button class="button" wicket:id="loadBtn2">Load Biasa</button>
    </div>
</form>

<form class="col-md-3" wicket:id="form2">
    <p><strong>Original</strong></p>
    <div>
        <p>
            <label>Mode</label>:
            <span wicket:id="modeImage2"></span>
        </p>
        <button class="button" wicket:id="loadBtn3">Load 3</button>
    </div>
</form>
{code}

With the non-working form, the request is multipart. This seems to cause all 
form components' model.getObject() become null.

{noformat}
POST 
/chaincode?0-1.IBehaviorListener.0-form-loadBtn2&wicket-ajax=true&wicket-ajax-baseurl=chaincode%3F0
 HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 576
Cache-Control: max-age=0
Accept: 
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Origin: http://localhost:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, 
like Gecko) Chrome/45.0.2454.101 Safari/537.36
Content-Type: multipart/form-data; 
boundary=----WebKitFormBoundaryv78rJ8mvP8YbHtBy
Referer: http://localhost:8080/chaincode?0
Accept-Encoding: gzip, deflate
Accept-Language: id,en-US;q=0.8,en;q=0.6,ms;q=0.4
Cookie: JSESSIONID=746B6931A8791427E02FCE5C1D20F1B7

------WebKitFormBoundaryv78rJ8mvP8YbHtBy
Content-Disposition: form-data; name="form3_hf_0"


------WebKitFormBoundaryv78rJ8mvP8YbHtBy
Content-Disposition: form-data; name="fileFld"; filename=""
Content-Type: application/octet-stream


------WebKitFormBoundaryv78rJ8mvP8YbHtBy
Content-Disposition: form-data; name="modeImage"

0
------WebKitFormBoundaryv78rJ8mvP8YbHtBy
Content-Disposition: form-data; name="msgImage"


------WebKitFormBoundaryv78rJ8mvP8YbHtBy
Content-Disposition: form-data; name="loadBtn2"

1
------WebKitFormBoundaryv78rJ8mvP8YbHtBy--
{noformat}

With the working form, the request is urlencoded form:

{noformat}
POST /chaincode?0-1.IBehaviorListener.0-form2-loadBtn3 HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 36
Origin: http://localhost:8080
Wicket-FocusedElementId: loadBtn32
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, 
like Gecko) Chrome/45.0.2454.101 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept: application/xml, text/xml, */*; q=0.01
X-Requested-With: XMLHttpRequest
Wicket-Ajax: true
Wicket-Ajax-BaseURL: chaincode?0
Referer: http://localhost:8080/chaincode?0
Accept-Encoding: gzip, deflate
Accept-Language: id,en-US;q=0.8,en;q=0.6,ms;q=0.4
Cookie: JSESSIONID=746B6931A8791427E02FCE5C1D20F1B7

form21_hf_0=&modeImage2=0&loadBtn3=1
{noformat}

"Probably" related with WICKET-5924, but I don't have issue with 
FileUploadField, my issue is with other form components in the same form as 
FileUploadField. Probably related to: 
http://stackoverflow.com/questions/28784942/fileupload-field-wicket-error

TODO: test case coming soon



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to