为什么我们将ActionForm对象强制转换为STRUTS中Action类中的java表单bean类?

时间:2012-05-03 10:15:27

标签: struts struts-1

我所知道的:我们创建的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

使用execute方法,一切正常:

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

我的问题是如果actionclass和formbean在同一个包中,为什么我们不能只创建formbean的对象并在actionclass中调用它的getter函数?为什么需要向下转换ActionForm对象?

1 个答案:

答案 0 :(得分:1)

因为如果您创建一个新的ProductBean实例并从此新实例获取名称,您将始终获得name属性的默认值(通常为null),而不是从{{1}中提取的值请求参数,存储在Struts创建的ProductBean实例中,并已传递给您的操作的name方法。

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

您正在做的事情类似于以下内容:

  • 请某人(Struts)在一张纸上写下他们的名字并给你这张纸
  • 拿另一张白纸,看看这张白纸上写的是什么,不要发现Struts写的名字。