在为包含对同一类的成员引用的类设置 Struts 表单时,我发现了一个问题。
class ExampleBean {
Integer id;
String name;
ExampleBean parent;
// Constructors, getters, setters
}
访问包含表单的网页时,该过程似乎进入了无限循环,直到它返回异常。
如果有任何帮助,我正在使用 xdoclet 生成表单。
您没有提供足够的信息(所以我只能猜测发生了什么),但我认为这不是 Struts 的问题。
当您在 Struts 表单中使用嵌套属性时,您可以为 HTML 输入名称指定类似的内容:parent.id
和parent.name
.
当 Struts 在使用请求数据填充您的操作表单时发现这一点时,它会尝试在您getParent().setId(...)
的getParent().setName(...)
表单上执行操作。
如果getParent()
返回 null,你会从 BeanUtils 中得到一个错误,类似于java.lang.IllegalArgumentException: No bean specified
. 因此,为了使内部 bean 绑定起作用,您必须对其进行初始化,然后让 Struts 进行绑定。
你有没有机会做这样的事情:
class ExampleBean {
Integer id;
String name;
ExampleBean parent = new ExampleBean();
// Constructors, getters, setters
}
因为这确实会导致无限递归以及StackOverflowError
当 JVM 尝试创建实例时。
你真的应该展示你正在使用的完整代码!
对于这种情况,reset()
可以使用 Struts 表单方法。您不在 bean 的内部属性中提供默认初始化,而是创建内部 bean 并在reset()
方法内部的外部 bean 中对其进行初始化。