如何使用递归类成员设置Struts表单



在为包含对同一类的成员引用的类设置Struts表单时,我发现了一个问题。

class ExampleBean {
Integer id;
String name;
ExampleBean parent;
// Constructors, getters, setters
}

当访问包含表单的网页时,过程似乎进入了一个无限循环,直到返回异常。

如果有任何帮助的话,我正在使用xdoclet来生成表单。

您没有提供足够的信息(所以我只能猜测发生了什么),但我认为这不是Struts的问题。

当您在Struts表单中使用嵌套属性时,您可以为HTML输入名称指定类似的内容:parent.idparent.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
}

因为当JVM尝试创建实例时,这确实会导致无限递归和StackOverflowError

你真的应该展示你正在使用的完整代码!

对于这种情况,Struts形式的reset()方法就是要使用的方法您没有在bean的内部属性中提供默认初始化,而是创建内部bean并在reset()方法内的外部bean中对其进行初始化。

相关内容

  • 没有找到相关文章

最新更新