Java 添加到ModelAndView的变量似乎消失了

Java 添加到ModelAndView的变量似乎消失了,java,spring,jsp,Java,Spring,Jsp,我试图在我的SpringMVC/jsp项目中获得一个文件上传页面,并且我已经正确地上传了文件。。它在日志文件中输出文件名,然后我将文件名添加到ModelAndView,当我尝试在视图(.jsp文件)中访问它们时,它们似乎不存在。。但是我添加的另一个对象 这是我将文件名添加到ModelAndView的控制器: @RequestMapping(value = "/uploadFiles.html", method = RequestMethod.POST) public String save(@M

我试图在我的SpringMVC/jsp项目中获得一个文件上传页面,并且我已经正确地上传了文件。。它在日志文件中输出文件名,然后我将文件名添加到ModelAndView,当我尝试在视图(.jsp文件)中访问它们时,它们似乎不存在。。但是我添加的另一个对象

这是我将文件名添加到ModelAndView的控制器:

@RequestMapping(value = "/uploadFiles.html", method = RequestMethod.POST)
public String save(@ModelAttribute Token token, @ModelAttribute("uploadForm") FileUpload fileUpload, ModelAndView mav)
{
    List<MultipartFile> files = fileUpload.getFiles();

    List<String> fileNames = new ArrayList<String>();

    if(files != null && files.size() > 0)
    {
        for(MultipartFile file : files)
        {
            if(!file.isEmpty())
            {
                fileNames.add(file.getOriginalFilename());
                logger.info("Got file with name: " + file.getOriginalFilename());
            }
        }

        logger.info("Total filenames: " + fileNames.size());
    }

    mav.addObject("files",fileNames);
    mav.addObject("token",token);
    return "etl/EtlUploadSuccess";
}
以下是success页面的代码片段,其中应显示文件名:

    <p>The following files have been uploaded successfully with the token ${token.name}:</p>
    <c:forEach items="${files}" var="file">
        ${file}<br/>
    </c:forEach>

安妮:就这样。。。我不明白为什么文件名不显示

它只在文件不为空时显示,所以文件可能为空

if(!file.isEmpty()) {
    fileNames.add(file.getOriginalFilename());
    logger.info("Got file with name: " + file.getOriginalFilename());
}

只是猜测。

它只在文件不为空时显示,所以可能文件为空

if(!file.isEmpty()) {
    fileNames.add(file.getOriginalFilename());
    logger.info("Got file with name: " + file.getOriginalFilename());
}

只是猜测。

尝试更改方法签名以返回ModelAndView,如下所示

@RequestMapping(value = "/uploadFiles.html", method = RequestMethod.POST)
public ModelAndView save(@ModelAttribute Token token, @ModelAttribute("uploadForm")    FileUpload fileUpload) 
{
    List<MultipartFile> files = fileUpload.getFiles();

    List<String> fileNames = new ArrayList<String>();

    if(files != null && files.size() > 0)
    {
        for(MultipartFile file : files)
        {
            if(!file.isEmpty())
            {
                fileNames.add(file.getOriginalFilename());
            logger.info("Got file with name: " + file.getOriginalFilename());
            }
        }

        logger.info("Total filenames: " + fileNames.size());
    }

    ModelAndView mav = new ModelAndView("etl/EtlUploadSuccess");
    mav.addObject("files",fileNames);
    mav.addObject("token",token);
    return mav;
}
@RequestMapping(value=“/uploadFiles.html”,method=RequestMethod.POST)
公共ModelAndView保存(@ModelAttribute令牌,@ModelAttribute(“uploadForm”)文件上载文件上载)
{
List files=fileUpload.getFiles();
列表文件名=新的ArrayList();
if(files!=null&&files.size()>0)
{
用于(多部分文件:文件)
{
如果(!file.isEmpty())
{
add(file.getOriginalFilename());
info(“获取了名为:+file.getOriginalFilename()的文件);
}
}
logger.info(“总文件名:+filenames.size());
}
ModelAndView mav=新ModelAndView(“etl/etl上传成功”);
mav.addObject(“文件”,文件名);
mav.addObject(“令牌”,令牌);
返回mav;
}

注意我还删除了方法的ModelAndView参数

尝试更改方法签名以返回ModelAndView,如下所示

@RequestMapping(value = "/uploadFiles.html", method = RequestMethod.POST)
public ModelAndView save(@ModelAttribute Token token, @ModelAttribute("uploadForm")    FileUpload fileUpload) 
{
    List<MultipartFile> files = fileUpload.getFiles();

    List<String> fileNames = new ArrayList<String>();

    if(files != null && files.size() > 0)
    {
        for(MultipartFile file : files)
        {
            if(!file.isEmpty())
            {
                fileNames.add(file.getOriginalFilename());
            logger.info("Got file with name: " + file.getOriginalFilename());
            }
        }

        logger.info("Total filenames: " + fileNames.size());
    }

    ModelAndView mav = new ModelAndView("etl/EtlUploadSuccess");
    mav.addObject("files",fileNames);
    mav.addObject("token",token);
    return mav;
}
@RequestMapping(value=“/uploadFiles.html”,method=RequestMethod.POST)
公共ModelAndView保存(@ModelAttribute令牌,@ModelAttribute(“uploadForm”)文件上载文件上载)
{
List files=fileUpload.getFiles();
列表文件名=新的ArrayList();
if(files!=null&&files.size()>0)
{
用于(多部分文件:文件)
{
如果(!file.isEmpty())
{
add(file.getOriginalFilename());
info(“获取了名为:+file.getOriginalFilename()的文件);
}
}
logger.info(“总文件名:+filenames.size());
}
ModelAndView mav=新ModelAndView(“etl/etl上传成功”);
mav.addObject(“文件”,文件名);
mav.addObject(“令牌”,令牌);
返回mav;
}

注意我还删除了方法的ModelAndView参数

OP不会记录两个文件。不,两个文件中肯定都有数据。正如您可以从控制台输出中看到的那样,它达到了这一点:get file,name:ExcelFileOne.xlsx您将ModelAndView返回到哪里?因为您有那个mav实例,但它能到达jspx吗?@JDiPierro既然有了它,请尝试在mav中设置视图名称并返回它。@JDiPierro不用担心。很高兴你找到了解决方案。OP不会记录两个文件。不,两个文件中肯定都有数据。正如您可以从控制台输出中看到的那样,它达到了这一点:get file,name:ExcelFileOne.xlsx您将ModelAndView返回到哪里?因为您有那个mav实例,但它能到达jspx吗?@JDiPierro既然有了它,请尝试在mav中设置视图名称并返回它。@JDiPierro不用担心。很高兴你找到了解决办法。