1

println()Actionクラスの各メソッドに入れます。

public String execute() throws Exception {
  System.out.println("execute");
  //...
 }
 public void prepare() throws Exception {
  System.out.println("prepare");
  //...
 }
 public Object getModel() {
  System.out.print("getModel");
  //...
 }

順番はそうだと思いました。準備→実行→getModel。

本で読んだことを覚えているので、以前はBeanクラスを作成し、でいくつかのロジックを実行しprepare()、でSUCCESSを返していましたexecute()。そして、getModelはBeanをvalueStackにプッシュするためのものだと思いますよね?

...とにかくコンソールは私にこれを示しました。それは非常に奇妙です。準備→getModel→実行。

そして、これは私にとって大きな問題になりつつあります。その理由を英語で説明するのはとても難しいです...でもやってみます!

以前は同じBeanを処理する各アクションクラスを作成していましたが、もちろん、各アクションクラスには同じコード(変数とそのゲッターとセッター)が複製されています。

今、私はその重複を避けるために1つのアクションを作成しようとしています。このアクションクラスにはいくつかのメソッドがあります(このようにstruts.xmlにマップされています; <action name="View_board" method="view">)。

そして、コンソールで見たように、これview()は最後にのようなアクションクラスで呼び出されexecute()ます。はprepare()Beanを構築するだけで、view()実際のジョブを実行します。ただし、getModel()を呼び出す前に呼び出されるview()ため、BeanをValueStackに配置する機会はありません。

私が説明しようとしていることを皆さんが理解してくれることを願っています。

要約すると、BoardView、BoardDelete、BoardWriteなどの各アクションクラスがあり、それらはうまく機能しました!しかし、私はその重複したものが嫌いなので、BoardManagerクラスを作成しました。view()このクラスには、クラス(BoardViewなど)によって処理された各メソッド(など)があります。ただし、このview()はの呼び出し後に呼び出されたgetModel()ため、bean(return of getModel())はValueStackにプッシュされる機会がありません。

私を助けてください。現場でのノウハウを教えてください。私はそれをすべて自分で開発しています、そしてこれは私をとても難しく感じさせています。

ありがとうございました!!

4

2 に答える 2

5

モデル駆動型インターセプターは、nullでない場合にのみスタックにプッシュできるため、Modelオブジェクトを自分で設定する必要があります。getModel()が次のようになっている場合:

SomeModelClass myModelObject = null;

public Object getModel()
{
   return myModelObject;
}

... valueStackにプッシュできるように、modelObjectを設定する必要があります。あなたは私が推測するこの方法でそれを行うことができます:

public void prepare(){
   myModelObject = new myModelObject("I'm so new");
}

...またはフィールドで初期化します。

SomeModelClass myModelObject = new myModelObject("I'm so new");

適切なインターフェイス(ModelDrivenおよびPreparable)を実装することを忘れないでください。これが少し役立つことを願っています。

于 2010-08-11T12:24:09.957 に答える
0

私は自分自身の解決策を見つけました..しかし、良い解決策ではありません..

セッターでドメインオブジェクトを設定するときは、手動で値スタックにプッシュします。

それはうまく機能し、私のクラスに追加されたのは2行だけです。

しかし、私はそれほど気分が良くありません。

于 2010-08-10T12:26:21.087 に答える