0

私が知っていること:私たちが作成するactionformbeanはActionFormのサブクラスです

Struts アクション フォーム Bean: productbean.java Struts アクション クラス: productaction.java

productaction.java のexecute()メソッド:- やった

{
productbean p1 = new productbean();
String n =p1.getName();   // calling the getter, that returns the product name 
}

ただし、データベースに書き込まれると n は null です

この inexecuteメソッドを使用すると、すべて正常に動作します。

{
productbean p1 = (productbean)form; // downcasting of ActionForm object
String n = p1.getName(); 
}

私の質問は、actionclass と formbean が同じパッケージにある場合、formbean のオブジェクトを作成して、actionclass で getter 関数を呼び出すことができないのはなぜですか? なぜ ActionForm オブジェクトのダウンキャストが必要なのですか?

4

1 に答える 1

1

新しい ProductBean インスタンスを作成し、この新しいインスタンスから名前を取得すると、name要求パラメーターから抽出されて ProductBean に格納された値ではなく、name プロパティのデフォルト値 (通常は null) が常に取得されるためです。 Struts が作成しexecute()、アクションのメソッドに渡したインスタンス。

アクションに対するリクエストが届くと、Struts はフォーム Bean をインスタンス化し、リクエスト パラメータを入力して、フォーム Bean でアクションを呼び出します。別のフォーム Bean インスタンスを作成しても、魔法のようにリクエスト パラメータが設定されることはありません。

あなたがしていることは、次のようなものです。

  • 誰か (Struts) に名前を紙に書いてもらい、この紙をあなたに渡すように頼む
  • 別の白紙を用意して、この白紙に書かれている内容を読んでみてください。驚いたことに、Struts によって書かれた名前が見つかりません。
于 2012-05-03T10:32:24.520 に答える