Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从Wicket数据表获取所有模型对象_Java_Wicket - Fatal编程技术网

Java 如何从Wicket数据表获取所有模型对象

Java 如何从Wicket数据表获取所有模型对象,java,wicket,Java,Wicket,我正在使用WicketDefaultDataTable。它包含一些用户应该输入值的文本字段。这张桌子是一种形状。当我提交表单时,我希望掌握所有的“行”,这样我就可以遍历它们。我不想使用AJAX 我已经成功地将表绑定到一个“Contact”对象,其中有一个EditablePropertyColumn,在我想要的列中显示正确的字段和输入框 如何获取行项目dataTable.getDefaultModelObject()在提交表单时返回null。提交的数据填充在联系人对象中。这就是PropertyCo

我正在使用Wicket
DefaultDataTable
。它包含一些用户应该输入值的文本字段。这张桌子是一种形状。当我提交表单时,我希望掌握所有的“行”,这样我就可以遍历它们。我不想使用AJAX

我已经成功地将表绑定到一个“Contact”对象,其中有一个
EditablePropertyColumn
,在我想要的列中显示正确的字段和输入框


如何获取行项目
dataTable.getDefaultModelObject()
在提交表单时返回
null

提交的数据填充在联系人对象中。这就是PropertyColumn的工作原理。

提交的数据填充在Contact对象中。这就是PropertyColumn的工作原理。

DefaultDataTable有一个方法newRowItem。在该方法中,您可以捕获表中显示的模型:

  private List<IModel<T>> models= new LinkedList<IModel<T>>();
    @Override
    protected Item<T> newRowItem(final String id, int index,
            final IModel<T> model) {
              models.add(model);
    }
private List models=new LinkedList();
@凌驾
受保护项newRowItem(最终字符串id,整数索引,
最终IModel模型){
模型。添加(模型);
}

DefaultDataTable有一个方法newRowItem,在该方法中,您可以捕获表中显示的模型:

  private List<IModel<T>> models= new LinkedList<IModel<T>>();
    @Override
    protected Item<T> newRowItem(final String id, int index,
            final IModel<T> model) {
              models.add(model);
    }
private List models=new LinkedList();
@凌驾
受保护项newRowItem(最终字符串id,整数索引,
最终IModel模型){
模型。添加(模型);
}

如果你展示了你所拥有的代码,就更容易具体化,但我可以想出两种通用的方法来实现这一点

一种方法是在构建模型时,在
DefaultDataTable
之外的某处维护模型引用列表

如果很难找到这样做的方法,另一种可能的方法是使用Wicket的
IVisitor
实现来搜索数据表中的组件,以查找包含模型的组件

WebMarkupContainer
类有一个方法

public final <S extends Component> Object visitChildren(final Class<?> clazz,
    final IVisitor<S> visitor)

由这些“访问”方法调用,每个组件作为参数。返回值是继续或退出遍历的信号,您定义的方法可以将它在组件中找到的内容收集到一个列表中。

如果您显示了您得到的代码,则更容易明确,但我可以想出两种通用方法

一种方法是在构建模型时,在
DefaultDataTable
之外的某处维护模型引用列表

如果很难找到这样做的方法,另一种可能的方法是使用Wicket的
IVisitor
实现来搜索数据表中的组件,以查找包含模型的组件

WebMarkupContainer
类有一个方法

public final <S extends Component> Object visitChildren(final Class<?> clazz,
    final IVisitor<S> visitor)

由这些“访问”方法调用,每个组件作为参数。返回值是继续或退出遍历的信号,您定义的方法可以将它在组件中找到的内容收集到一个列表中。

老实说,听起来好像您还有其他(更基本的)错误。正如martin-g所提到的,可编辑属性列使用属性模型,这意味着当表单提交时(如果所有验证等都通过),它将在该模型上调用setObject,而该模型将在支持表中该行数据的POJO上调用setFoo(其中“foo”是该列的属性)

您可以(正如Don提到的)使用访问者遍历表的子项。然而,总的来说,这意味着你在做别的错事。Wicket是这样编写的,这样您就不必从表单提交中提取数据并自己将其推送到POJO上。模特应该为你做这件事。你不应该在自己周围“推”数据


显示一些代码可能会有所帮助,但还不够:无论您的表从何处获取数据(一些联系人列表等)——尝试从这些相同的对象中提取数据。应该已经为您填充了它。如果不是,请发布一些代码-尤其是在初始化表及其数据提供程序的地方。

老实说,听起来您好像还有其他(更基本的)错误。正如martin-g所提到的,可编辑属性列使用属性模型,这意味着当表单提交时(如果所有验证等都通过),它将在该模型上调用setObject,而该模型将在支持表中该行数据的POJO上调用setFoo(其中“foo”是该列的属性)

您可以(正如Don提到的)使用访问者遍历表的子项。然而,总的来说,这意味着你在做别的错事。Wicket是这样编写的,这样您就不必从表单提交中提取数据并自己将其推送到POJO上。模特应该为你做这件事。你不应该在自己周围“推”数据


显示一些代码可能会有所帮助,但还不够:无论您的表从何处获取数据(一些联系人列表等)——尝试从这些相同的对象中提取数据。应该已经为您填充了它。如果不是,请发布一些代码-尤其是在初始化表及其数据提供程序的地方。

谢谢,但这并不能回答我的问题:在添加到表单的datatable中(即datatable列出了一组contactobject),如何在onsubmit按钮中获取datatable行并遍历它们?应该是“按下表单提交按钮时,如何获取数据表行并在onsubmit覆盖中遍历它们“但它确实。。。数据被放入联系人对象中,该对象可从您的数据提供程序获得。因此,无需访问行,只需从提供程序获取列表并在该列表上迭代即可。谢谢,但这并不能回答我的问题:在添加到表单的datatable中(即列出一组contactobject的datatable),如何获取datatable行