Struts2文件上载-未调用execute()

问题描述 投票:0回答:1

我正在使用Struts2 2.5.20,并且编写了几乎可以正常工作的文件上传操作。我在调试器中可以看到正在调用setReport(),setReportContentType()和setReportFileName(),并且参数值正确。但是,永远不会调用execute()方法。我尝试按照调用堆栈进行操作,以了解应在何处调用它,但是层接一层的拦截器无法找到底部。

有人知道执行execute()的原因吗?

public class ImportReportAction extends CampaignerActionSupport implements ValidationAware
{
  private File              report;
  private String            reportContentType;
  private String            reportFileName;


  @Override
  public String execute() throws Exception
  {
    ...
    return SUCCESS;
  }

  public void setReport(
    File report)
  {
    this.report = report;
  }   

  public void setReportContentType(
    String reportContentType)
  {
    this.reportContentType = reportContentType;
  }

  @RequiredFieldValidator(type = ValidatorType.FIELD, key = "errors.required", messageParams = { "getText('labels.report.file')" })
  public void setReportFileName(
    String reportFileName)
  {
    this.reportFileName = reportFileName;
  }
}

更新:我发现问题出在具有RequiredFieldValidator批注。如果存在,验证总是会失败,但是s:actionerror标记不会显示任何消息。当注释不存在时,它允许用户不选择文件而仍然调用execute()。

新问题是:如何正确注释我的班级以验证文件上载?

java struts2
1个回答
0
投票

我必须删除@RequiredFieldValidator批注,使我的操作实现ValidationAware,然后实现validate()方法并手动将验证放入其中。

© www.soinside.com 2019 - 2024. All rights reserved.