Struts2 文件上传 - 未调用 execute()
Struts2 file upload - execute() is not being invoked
我正在使用 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()。
新问题是:如何正确注释我的 class 以验证文件上传?
我必须删除 @RequiredFieldValidator 注释,让我的操作实现 ValidationAware,然后实现 validate() 方法并手动将验证放在那里。
我正在使用 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()。
新问题是:如何正确注释我的 class 以验证文件上传?
我必须删除 @RequiredFieldValidator 注释,让我的操作实现 ValidationAware,然后实现 validate() 方法并手动将验证放在那里。