Ok, I think I finally understood the issue and what's going on. What we have when we use Jenkins' File parameter is a FileParameterValue.
The Jelly file used to render is very simple and it seems like the part we are missing here is that the input field's name must be "file", not "value".
If you want to cascade to other parameters, I think you will have to find some JavaScript that reacts to the event when the user chooses the file, then copies the file name in another input name="value".
So in summary, the only thing I changed from your example to get it working was: <input name="file" type="file" jsonAware="true" />
To match Jenkins' jelly file.
Could you check if that works for you Ioannis Moutsatsos, please? Here's a screen shot (also checked in the disk, and both files were uploaded, but no file name in the latter).
Sunil Batra did you ever figure this out? I'm facing the same issue.
This code results in the env.File parameter getting the value 'file0', but there is no file. Changing the input name to "file" also does not result in a file being uploaded.
EDIT: Figured it out. File was getting uploaded, needed to use input name "file" and I borrowed some of this code to get that file to the current workspace- https://github.com/janvrany/jenkinsci-unstashParam-library