-1

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

class ExampleBean {
  Integer id;
  String name;
  ExampleBean parent;

  // Constructors, getters, setters
}

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

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

4

1 回答 1

1

您没有提供足够的信息(所以我只能猜测发生了什么),但我认为这不是 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
}

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

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

对于这种情况,reset()可以使用 Struts 表单方法。您不在 bean 的内部属性中提供默认初始化,而是创建内部 bean 并在reset()方法内部的外部 bean 中对其进行初始化。

于 2012-11-25T14:55:23.677 回答