2016-05-24 27 views
1

私は、このウィジェットを空にしてフォームに送信すると、number型の入力ウィジェットを持つstruts2フォームを持つjspを持っています。私は(「予期しない例外」)は、この例外をキャプチャしたいstruts2アクションでフォームからの入力を検証する方法

19:10:30,734 ERROR [com.opensymphony.xwork2.interceptor.ParametersInterceptor.error:34] Developer Notification (set struts.devMode to false to disable this message): 
Unexpected Exception caught setting 'someDto.intCol' on 'class mypackage.MyAction: Error setting expression 'someDto.intCol' with value ['', ] 

、何かして、バリで(アクションで)セットアップActionSupportクラスからaddFieldErrorとエラーを実行します。デバッグログにこれを取得します

ありがとうございます。

EDIT:

DTOクラス:

public class SomeDto() { 

    private Integer intCol; //{with getters&setters} 

問題は、ユーザが(JSPで)で入力をクリアしたときに、ストラットは[「」]に変換しようとすることである(または文字列空他の言葉では)(Log lineのように)ParametersInterceptorクラスを持つIntegerに渡します。

したがって、dtoにはgetterとsetterがあります。あなたがライン299の周りParametersInterceptorを見れば、あなたはこのループ見つける@RomanCことで言及したよう

+0

intCol変数のデータ型は何ですか? –

+0

この目的のためには、別のparamsインターセプタが必要です。それがなければ、話題にならないので、あなたはMCVEを投稿する必要があります。 –

+0

セッターがありません –

答えて

1

あなたは "ParameterAware" インターセプターを使用することができます。

@Override 
public void setParameters(Map<String, String[]> parameters) { 
    System.out.println("parameters: " + parameters); 

    if (parameters.get("someDto.intCol")[0].length() == 0) { 
     parameters.put("someDto.intCol", new String[]{"0"}); 
    } 
} 

これは、JSPからのparamをキャッチし、空の代わりに0を置く場合ならば、

よろしく。

0

:例外が発生し、ログメッセージを参照してくださいのはここ

for (Map.Entry<String, Object> entry : acceptableParameters.entrySet()) { 
      String name = entry.getKey(); 
      Object value = entry.getValue(); 
      try { 
       newStack.setParameter(name, value); 
      } catch (RuntimeException e) { 
       if (devMode) { 
        notifyDeveloperParameterException(action, name, e.getMessage()); 
       } 
      } 
     } 

です。 ParametersInterceptorを拡張して、必要な操作を行うことができます。たとえば、ValueStackにいくつかのパラメータを入れて、それをactionで使用することができます。

しかし、あまりにもトリッキーすぎるようです。このインターセプタコードを直接処理する代わりに、問題を解決する別の方法があります。たとえば、intColStringに変換し、バリデータを使用します。

関連する問題