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