0

我所知道的:我们创建的 actionformbean 是 ActionForm 的子类

现在假设我们创建... Struts action form bean: productbean.java Struts action class: productaction.java

在 productaction.java 的execute()方法中:- 我做了

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

但是 n 为空,当写入数据库时

使用这个 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 属性的默认值(通常为 null),而不是从name请求参数中提取的值,存储到 ProductBean Struts 创建并传递给execute()您的操作方法的实例。

当您的操作收到请求时,Struts 实例化表单 bean,用请求参数填充它,并使用表单 bean 调用您的操作。如果您创建另一个表单 bean 实例,它不会神奇地填充请求参数。

您正在执行的操作类似于以下内容:

  • 请某人(Struts)在一张纸上写下他们的名字并给你这张纸
  • 拿另一张白纸,阅读这张白纸上写的内容,并惊讶于没有找到 Struts 写的名字。
于 2012-05-03T10:32:24.520 回答