2017-07-17 7 views
0

アクション内でデフォルトメソッドを定義する方法はありますか?私。もし私が "register"と呼ばれるいくつかのアクション(そのメソッドに関連するさまざまなメソッドを持っている)があったら、渡されたメソッドが不明な場合、私はcertianメソッドをデフォルトにできますか?Struts 1のアクション内にデフォルトメソッドを定義する

説明すると、私はlocalhost:8000/register.do?method = processRegistrationを持っています。ここでprocessRegistrationはregisterアクション内のメソッドです。ここで、存在しないメソッド(つまり、localhost:8000/register.do?method = foobar)にナビゲートすると、スタックトレースエラーがブラウザに表示され、 "NoSuchMethodException"が返されます。私の考えは、例外をトリガするケースで実行されるデフォルトのメソッドを定義することになります。私の考え方が正しいかどうかは分かりませんが、どんな助けもありがたいです。ありがとう!

答えて

0

おそらく、スタックトレースを隠すためにエラーページを作成する必要がありますか?はいの場合は、ストラットには関係ありません。たとえば、web.xmlにカスタムエラーページを定義します。

あなたは本当に私はあなたがこのような何かを持って推測しているこれをしたい場合:

public class RegisterAction extends DispatchAction { 

    public ActionForward processRegistrion(...) { 
     ... 
    } 
} 

DispatchActionはそうDispatchActionを拡張し、例外をキャッチし、デフォルトのメソッドに送る例外がスローされます:

public abstract class MyDispatchAction extends DispatchAction { 

    public ActionForward execute(...) { 
     try { 
      return super.execute(...); 
     } catch (Exception e) { 
      return defaultMethod(...);   
     } 

    public abstract ActionForward defaultMethod(...); 

} 

とあなたのクラスは今拡張「MyDispacthAction and implements defaultMethod`:

public class RegisterAction extends MyDispatchAction { 

    public ActionForward processRegistrion(...) { 
     ... 
    } 

    public ActionForward defaultMethod(...) { 
     ... 
    } 

} 

しかし、defaultMethodは実際に何をしますか?

0

別の解決策を探している場合は、不特定のDispatchActionメソッドをオーバーライドできます。私の場合は

public final class MyAction extends DispatchAction { 

    @Override 
    public ActionForward unspecified(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request, 
     final HttpServletResponse response) throws Exception { 
    } 
} 

、私はあまりにもgetParameterメソッドをオーバーライドしている...パラメータ/メソッド名の間にケースを管理するために、(小文字を強制)。

関連する問題