2012-06-26 2 views
0

playframework를 사용하여 파일을 업로드하려고합니다. 다음과 같이 폼과 해당 컨트롤러를 만듭니다.PlayFramework의 다른 메서드에 파일 인스턴스를 전달할 때 NullPointerException이 발생했습니다.

<form action="@{Admin.testUpload()}" method="POST" enctype="multipart/form-data"> 
    <input type="text" name="title" /> 
    <input type="file" name="f1" /> 
    <input type="file" name="f2" />  
    <input type="submit" value="Send it..." /> 
</form> 


public static void testUpload(File f1, File f2) { 
    System.out.println(f1.getName()); 
    System.out.println(f2.getName()); 
} 

이제는 인스턴스 f1과 f2로 파일을 가져올 수 있습니다. 그러나 파일 인스턴스를 다른 메서드에 전달하려면 null 포인터 예외가 발생합니다. 예 :

public static void testUpload(File f1, File f2) { 
    test2(f1); 
} 

public static void test2(File f1) { 
    System.out.println(f1.getName()); 
} 

test2 메소드 내에서 예외가 발생합니다. 그리고 나는 playframework가 tmp 폴더에서 이미지를 얻으려고하는 것을 발견했습니다. 그것은 playframework 자동으로 tmp 폴더에 파일을 업로드하고 내가 업로드 한 파일 이름으로 폴더를 만드는 것 같습니다.

재생 메커니즘입니까?

+0

게시물을 편집하고 실제 스택 추적을 추가하고 어떤 명령문에서 예외가 발생했는지 나타냅니다. –

답변

4

컨트롤러에서 public static method으로 전화를 걸면 다른 동작을 호출하는 것으로 판단되기 때문에 Play는 HTTP 리디렉션을 수행합니다.

그래서 리디렉션 할 때 두 번째 파일 개체가 존재하지 않습니다. 여기에 두 가지 옵션이 있습니다.

첫째, test2을 비공개로 설정할 수 있습니다.

두 번째로, 메서드에 @Util으로 주석을 달 수 있습니다.이 메서드는 Play에 액션이 아니라는 것을 알려주므로 리디렉션을 시도하지 않습니다.

+0

매우 명확합니다. 고맙습니다! –