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



我正在使用 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((。

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

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

最新更新