fileUpload
インターセプターを使用して、Web サイトにアップロードされたファイルに制限を加えようとしています。検証に失敗すると、後でvalidate()
メソッドで null ポインター例外を受け取ります。私は現在、次のstruts.xml
ようにインターセプターを持っています:
<interceptor-ref name="basicStack"/>
<interceptor-ref name="fileUpload">
<param name="maximumSize">1048576</param>
</interceptor-ref>
<interceptor-ref name="validation"/>
<interceptor-ref name="workflow"/>
この理由は、fileUpload
検証の前に来ることに関係している可能性があることがわかりました。この順序で実行する必要があることはわかっていますが、fileUpload
失敗した場合、フォームから他の入力データを取得できません。フィールドはすべてヌルです。
検証に失敗すると、検証に失敗した後、残りの入力データが既にフォームに入力された状態で、ユーザーをフォームに戻そうとしています。アップロードに失敗したら停止するのではなく、リクエストを続行するにはどうすればよいですか?
例外:
Struts Problem Report
Struts has detected an unhandled exception:
Messages:
File: profiles/actions/UpdateProfileAction.java
Line number: 183
Stacktraces
java.lang.NullPointerException
profiles.actions.UpdateProfileAction.validate(UpdateProfileAction.java:183)
com.opensymphony.xwork2.validator.ValidationInterceptor.doBeforeInvocation(ValidationInterceptor.java:251)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
etc.
これは、アクションの検証方法を示しています。
profile.setAvailabilityLength(Jsoup.clean(availabilityLength.trim(), Whitelist.basic()));
かどうかを確認していない場所availabilityLength == null
。確認することで問題は解決しますが、フォームにはユーザーが入力したデータではなく null データが再入力されます。