0

注釈によってアクションに FileUploadInterceptor を設定しようとしています:

@Namespace("/")
@ParentPackage("my-package")
@Result(name = "success", location = "/WEB-INF/jsp/result.jsp")
@InterceptorRef("fileUpload")
public class UploadAction extends ActionSupport {

  private File upload;
  private String uploadContentType;
  private String uploadFileName;

  public void setUpload(File upload) {
    this.upload = upload;
  }
  public void setUploadContentType(String uploadContentType) {
    this.uploadContentType = uploadContentType;
  }
  public void setUploadFileName(String uploadFileName) {
    this.uploadFileName = uploadFileName;
  }
  public File getUpload() {
    return this.upload;
  }
  public String getUploadContentType() {
    return this.uploadContentType;
  }
  public String getUploadFileName() {
    return this.uploadFileName;
  }
  @Override
  @Action("doUpload")
  public String execute()
  {
    System.out.println("Upload ok : " + (this.upload != null));
    return SUCCESS;
  }
}

私の問題は、アクションクラスにインターセプターを設定しない場合にのみ機能することです。上記のように FileUploadInterceptor であっても、インターセプターを設定するとすぐに、属性は入力されません。

基本的に、これは機能します:

public class UploadAction extends ActionSupport {...

しかし、これは機能しません:

@InterceptorRefs({
  @InterceptorRef("fileUpload")
})
public class UploadAction extends ActionSupport {...

また

@InterceptorRefs({
  @InterceptorRef("fileUpload"),
  @InterceptorRef("myOtherinterceptor")
})
public class UploadAction extends ActionSupport {...

見つけた!解決策は次のとおりです。

@InterceptorRefs({
  @InterceptorRef("fileUpload"),
  @InterceptorRef("basicStack")
})
public class UploadAction extends ActionSupport {...
4

1 に答える 1

0

インターセプターを設定する場合はすべてのインターセプターを設定する必要があります。基本的に、アップロードインターセプター以外はすべてオフにしていますが、これはあなたが望んでいるものではありません。

インターセプターを手動で構成し、複数のインターセプターを参照する必要がある場合は、 InterceptorRef docs@InterceptorRefsに従って「ラッパー」アノテーションを使用します。

于 2012-02-08T23:35:16.407 に答える