使用 Wicket MultiFileUploadField 在输入字段上设置 id 属性

Setting id attribute on input field using Wicket MultiFileUploadField

在我的面板中 class 我有以下代码:

private Fragment fileUploadField(String id, UploadFeedbackPanel feedbackPanel, ComponentFeedbackPanel componentFeedbackPanel) {
    String uploadType = isJSEnabled ? "multiple" : "single";
    Fragment uploadFragment = new Fragment( "uploadContainer", uploadType, this );

    if (isJSEnabled) {
        multipleUpload = new MultiFileUploadField( id, new PropertyModel<Collection<FileUpload>>( this, "multiUploads" ), MAX_FILES );
        uploadFragment.add( multipleUpload = multipleUpload);
        multipleUpload.add( newOnChangeAjaxBehavior( feedbackPanel, componentFeedbackPanel ) );
    } else {
        uploadFragment.add( singleUpload = new FileUploadField( id ) );
        singleUpload.add( newOnChangeAjaxBehavior( feedbackPanel, componentFeedbackPanel ) );
    }
    return uploadFragment;
}

我想为此字段添加标签,但我无法获得实际的输入字段 ID。您可以看到这适用于单个上传字段,因为输入字段本身是在没有任何周围元素的情况下呈现的。然而,这在使用 MultiFileUploadField.

时似乎没有暴露

另一个可接受的答案是使用 FileUploadField 和一组具有 multiple=true 属性的文件。但是我不确定如何将文件数量限制为 MAX_FILES

    <label wicket:for="file"><wicket:msg key="file">File:</wicket:msg></label>
    <div wicket:id="uploadContainer" class="col-right">[upload fragment shows here]</div>
    <wicket:fragment wicket:id="single">
        <input wicket:id="file" type="file"/>
    </wicket:fragment>
    <wicket:fragment wicket:id="multiple">
        <div wicket:id="file" class="mfuex"></div>
    </wicket:fragment>

Wicket 版本 6.15.0.

MultiFileUploadField 使用 JavaScript 生成输入字段:https://github.com/apache/wicket/blob/master/wicket-core/src/main/java/org/apache/wicket/markup/html/form/upload/MultiFileUploadField.js#L91 看看你是否能以某种方式插入那里。如果您找到一种优雅的方式,我们很乐意将其包含在下一版本的 Wicket 中!

如果您使用 'multiple' 属性,请检查: How do I limit the number of file upload in html?