-1

@Action を使用してアクション クラスを定義していますが、使用するaddActionMessageにはクラスを拡張する必要がありActionSupportます。

コントローラーが抽象クラスを拡張しているため、クラスを拡張できませんActionSupportaddActionMessage拡張せずに使用するにはどうすればよいですかActionSupport

import org.apache.struts2.convention.annotation.Action;

@Action
public class MyClass extends AbstractOtherClass implements ModelDriven {
      ....
    public String Messages(){
       addActionMessage("g");  << cannot find symbol error 
    }
}
4

1 に答える 1

1

これにより、継承に関する問題の1つが明らかになります。階層内の適切なポイントでクラスを拡張していることを確認する必要があります。ここでのコメントは正しいです(そしておそらく答えになるはずです):拡張する必要があるのは抽象基本クラスですActionSupport

とはいえ、それが最善のアプローチであるかどうかについては、いくつかの議論があります。S2のクラス階層は、それが確かに最も簡単なアプローチであることを意味しますが、適切なインターフェイスを実装し、既存のS2機能を使用して、より多くの労力を費やしても同じ結果を達成できる場合もあります。

S2は(正しく)アクションがPOJOになる可能性があると主張していますが、実際には、そうすると多くのS2機能が失われます。アクションは、クライアント(通常はブラウザー)と実際に処理を実行するコードとの間のインターフェースと見なす必要があります。WebレイヤーをWebフレームワークに結び付けることは、実際には問題ではありません。わずかな柔軟性が失われる可能性がありますが、その柔軟性は他の場所でエンコードしてWebレイヤーで使用する必要があります。

于 2013-03-12T11:46:49.433 に答える