我所知道的:我们创建的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对象?
答案 0 :(得分:1)
因为如果您创建一个新的ProductBean实例并从此新实例获取名称,您将始终获得name属性的默认值(通常为null),而不是从{{1}中提取的值请求参数,存储在Struts创建的ProductBean实例中,并已传递给您的操作的name
方法。
当请求进入您的操作时,Struts实例化表单bean,使用请求参数填充它,并使用表单bean调用您的操作。如果您创建另一个表单bean实例,它将不会被请求参数神奇地填充。
您正在做的事情类似于以下内容: