Struts2 + Seaser2 で警告文


Struts2.1.* では問題なかったんだが


Struts2.2以降からこんな警告ばっかりでてきやがる(;・∀・)


「プロパティ(container)が見つからないので設定をスキップします」


って何?
食べられるの?


まずSeasar2の仕様を読んでみると(´・ω・`)

------------------------------------------------------------------

定義ファイルに記述しなくても暗黙的に使えるコンポーネントが存在します。 これらのコンポーネントは、次のようにプロパティを定義しておけば自動的にDIされます。

S2Container container;

HttpServletRequest request;

HttpServletResponse response;

ServletContext application;

------------------------------------------------------------------



ということは裏でcontainerを設定する事がわかった(´・ω・`)



そしてstruts2側のActionSupport.javaを読むと
xwork-core.jarより

@Inject
public void setContainer(Container container) {
 this.container = container;
}



んこれをSeaser側がDIしようとして警告が出たのか(;・∀・)

クラス違うのに(´;ω;`)wwwww



対応としてcontenerをDIしなければいいんだから

まず共通Actionを作成

test.action
CmnAction,java ← 追加
├ Hoge01Action,java
└ Hoge02Action.java




次に継承をActionからCmnActionに変更

public class Hoge01Action extends CmnAction {

 // 処理~~~

}


public class Hoge02Action extends CmnAction {

 // 処理~~~

}



仕上げにCmnActionを作成

public abstract class CmnAction extends ActionSupport {

 // 処理~~~

 // ここ重要
 @Override
 @Binding(bindingType = org.seasar.framework.container.annotation.tiger.BindingType.NONE)
 public void setContainer(com.opensymphony.xwork2.inject.Container container) {
  super.setContainer(container);
 }
}



@Binding(bindingType = BindingType.NONE)
→自動バインディングを行わない


これでDIされなくなった(´・ω・`)
起動も問題なく行われる(;´∀`)




ヒヤヒヤさせやがって(^ω^)


参考サイト
・SAStrutsチュートリアルよりファイルアップロード
・seasar2 S2Containerより暗黙的なコンポーネント





※追記
ActionSupport を使わない方法が紹介されてるけどって言われたけど(´・ω・`)

「addFieldErrorやgetTextメソッドは美味しくないので使いません」と言うならそれでいんじゃね?(・∀・)
ソースも食べ物も好き嫌いはあると思うので(;´Д`)

0 件のコメント:

コメントを投稿