Wicket动态添加组件到表单

2024-03-15

我在动态添加组件到表单时遇到问题。我想做的是: 为用户提供一个下拉列表,其中包含他们可以选择的项目,例如姓名、年龄……

当用户按下 add: 时,1 个组件中会出现一个(标签 + 输入框),允许他们输入值。您可能认为我可以隐藏那些未选择的组件,但用户也可以向下拉列表添加值。

我遇到的问题是如何在 HTML 中没有 wicket:ids 的情况下添加和删除组件(标签输入框)?

这就是我想添加的内容:

<wicket:panel>
  <div wicket:id="hldValue">
    <label wicket:id="lblValue"></label>
    <input type="text" wicket:id="value"/>
  </div>
</wicket:panel>

我这里遇到的问题是 ID 始终是我想要动态命名的值。使用动态 HTML 创建此组件是一个好主意吗?我凌驾于一切之上getMarkupResourceStream and getCacheKey为了达成这个。但我仍然觉得这不是正确的方法。还有其他建议吗?


你需要一个ListView,因为你可以有面板类型,一个用listview添加逻辑的模型,至少2个表单,一个用于DropDown,用户在其中选择添加数据,最后另一个用于提交整个数据列表显示。您可以使用 AJAX 但可选

为了了解如何将转发器(ListView 是一个高级转发器)与表单组件一起使用,您可以检查here https://cwiki.apache.org/confluence/display/WICKET/ListView+and+other+repeaters了解他的基本用法,here http://wicketinaction.com/2008/10/building-a-listeditor-form-component/对于他与表单组件的使用,最后here https://cwiki.apache.org/confluence/display/WICKET/How+to+repaint+a+ListView+via+Ajax了解如何将其与 AJAX 结合使用。

顺便说一句,我有一个例子,这只是代码的关键部分。

这是 ListView.class 上的 populateItem 方法

 @Override
 protected void populateItem(ListItem<ListViewModel> item) {     
     item.add(new TextField<Integer>("quantity", new PropertyModel<Integer>(item.getDefaultModelObject(),
     "averageQuantity"));
     item.add(new TextField<Integer>("position", new PropertyModel<Integer>(item.getDefaultModelObject(), "order"))
     .add(new IntegerValidator()));
     item.add(new Label("description", item.getModelObject().getName()));
     item.setOutputMarkupId(true);
 }

在其他地方,您应该将下拉列表添加到他自己的表单中,然后在提交时操作 listView 对象

 // I use a AjaxButton to perform the user submit if you don't 
 // want use it, you should reload the entire page
 @Override
 protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
     //redraw the parent of the list view 
     target.add(theContainerOfTheListView);
     //the submited model of the dropdown
     ListViewModel item = form.getObject();                
     List<ListViewModel> list = listViewObject.getObject();
     list.add(item);
     //you could sort the list object in order to sort the listViewObject
 }

UPDATE:在将新项目添加到列表视图之前,您应该提交列表视图的表单组件,如果不这样做,您将丢失用户更改

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Wicket动态添加组件到表单 的相关文章

随机推荐