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 件のコメント:
コメントを投稿