Java Wicket:动态添加文本字段/面板
我想在表单中动态添加一些Java Wicket:动态添加文本字段/面板,java,wicket,Java,Wicket,我想在表单中动态添加一些TextField,并隐藏或显示一些onClick 我想实现的图像(实际上是德语,所以我解释它): 左边是一周中的几天(周一、周二、周日)。如果您单击箭头指向右侧的按钮,则实际每周应隐藏,并显示下周 我存储了一个表示一个周期的整数。因此,如果在数据库中是一个3,我需要能够点击3次按钮“下周”。(注意:此数字可以动态更改)。所以如果我把数字3改为5,我需要这个表格的5倍 我希望我用“好”来形容它,我的英语不是最好的。对不起 我读到: 首先,我需要一个面板,在其中添加Tex
TextField
,并隐藏或显示一些onClick
我想实现的图像(实际上是德语,所以我解释它):
左边是一周中的几天(周一、周二、周日)。如果您单击箭头指向右侧的按钮,则实际每周应隐藏,并显示下周
我存储了一个表示一个周期的整数
。因此,如果在数据库中是一个3,我需要能够点击3次按钮“下周”。(注意:此数字可以动态更改)。所以如果我把数字3改为5,我需要这个表格的5倍
我希望我用“好”来形容它,我的英语不是最好的。对不起
我读到:
首先,我需要一个面板,在其中添加TextFields
,其次,我需要一个列表视图,它可以获取面板列表。但我不明白这是怎么回事。。这样做对吗
模板:
public class FoodFieldPanel extends Panel {
public FoodFieldPanel(String id) {
super(id);
WebMarkupContainer foodFields = new WebMarkupContainer("foodFields");
TextField monday = new TextField("monday");
TextField tuesday = new TextField("tuesday");
TextField wendnesday = new TextField("wendnesday");
TextField thursday = new TextField("thursday");
TextField friday = new TextField("friday");
TextField saturday = new TextField("saturday");
TextField sunday = new TextField("sunday");
foodFields.add(monday);
foodFields.add(tuesday);
foodFields.add(wendnesday);
foodFields.add(thursday);
foodFields.add(friday);
foodFields.add(saturday);
foodFields.add(sunday);
add(foodFields);
}
}
第页:
公共类FoodDetailPanel扩展面板{
public FoodDetailPanel(字符串id、最终IModel catModel、布尔字段启用){
超级(id,catModel);
setOutputMarkupId(真);
整数周期=4;
List textFields=new ArrayList();
对于(int a=1;a因此,考虑到您的显示是静态的,只有其背后的数据必须更改,您可以利用模型的强大功能。(我无法发布完整的解决方案,它可能太长,但希望它能向您展示总体思路。)
您还需要以类似的方式更改箭头的代码,但基本思想是,通过使用动态模型,您可以在不知道逻辑的情况下替换页面后面的数据,而不需要额外的ListView
。(虽然我个人会将一周中的几天存储在列表视图中
,但我不想让我的答案更加复杂。)
这种显示和模型的解耦是Wicket最强大的功能之一。因此,考虑到您的显示是静态的,只有其背后的数据需要更改,您可以利用模型的强大功能。(我无法发布完整的解决方案,可能会太长,但希望它能向您展示总体思路。)
您还需要以类似的方式更改箭头的代码,但基本思想是,通过使用动态模型,您可以在不知道逻辑的情况下替换页面后面的数据,而不需要额外的ListView
。(虽然我个人会将一周中的几天存储在列表视图中
,但我不想让我的答案更加复杂。)
这种显示和模型的解耦是Wicket最强大的功能之一。因此,考虑到您的显示是静态的,只有其背后的数据需要更改,您可以利用模型的强大功能。(我无法发布完整的解决方案,可能会太长,但希望它能向您展示总体思路。)
您还需要以类似的方式更改箭头的代码,但基本思想是,通过使用动态模型,您可以在不知道逻辑的情况下替换页面后面的数据,而不需要额外的ListView
。(虽然我个人会将一周中的几天存储在列表视图中
,但我不想让我的答案更加复杂。)
这种显示和模型的解耦是Wicket最强大的功能之一。因此,考虑到您的显示是静态的,只有其背后的数据需要更改,您可以利用模型的强大功能。(我无法发布完整的解决方案,可能会太长,但希望它能向您展示总体思路。)
您还需要以类似的方式更改箭头的代码,但基本思想是,通过使用动态模型,您可以在不知道逻辑的情况下替换页面后面的数据,而不需要额外的ListView
。(虽然我个人会将一周中的几天存储在列表视图中
,但我不想让我的答案更加复杂。)
这种显示和模型的解耦是Wicket最强大的功能之一。屏幕布局从未真正改变,任何时候只显示一周,这是对的吗?是的,只有一周准时显示,但文本字段中有不同的字符串,这使得答案简单得多:)每周文本字段中都会出现不同的字符串(这是一个餐厅的菜单卡),因此,稍后我需要加载数据库的字符串并将其放入该字段。我想我明白了你的意思,我不需要多次创建该面板。我只需要相同的表单,只需要在单击时更改日期和字段内容。我说得对吗?我说的对吗,屏幕布局从未真正改变,只有一周是正确的在任何时候都拥有?是的,只有一周的时间,但是文本字段中有不同的字符串,这使得答案更简单:)每个星期文本字段中都有不同的字符串(这是餐厅的菜单卡),因此,稍后我需要加载数据库的字符串并将其放入该字段。我想我明白了你的意思,我不需要多次创建该面板。我只需要相同的表单,只需要在单击时更改日期和字段内容。我说得对吗?我说的对吗,屏幕布局从未真正改变,只有一周是正确的在任何时候都拥有?是的,只有一周的时间,但是文本字段中有不同的字符串,这使得答案更简单:)每个星期文本字段中都有不同的字符串(这是餐厅的菜单卡),所以稍后我需要加载数据库的字符串并将它们放入该字段。我想我明白了你的意思,我不需要多次创建该面板。我只需要相同的表单,只需要更改cli上的日期和字段内容
public class FoodDetailPanel extends Panel {
public FoodDetailPanel(String id, final IModel<Category> catModel, boolean fieldsEnabled) {
super(id, catModel);
setOutputMarkupId(true);
int cycle = 4;
List<FoodFieldPanel> textFields = new ArrayList<FoodFieldPanel>();
for (int a = 1; a <= cycle; a++) {
textFields.add(new FoodFieldPanel("foodField"));
}
add(new ListView("test", textFields) {
protected void populateItem(ListItem item) {
FoodFieldPanel test = (FoodFieldPanel) item.getModelObject();
add(test);
}
});
}
}
<wicket:panel xmlns:wicket="http://wicket.apache.org">
<span wicket:id="test">
<div wicket:id="foodField">
</div>
</span>
</wicket:panel>
class WeekData {
private String monday;
private String tuesday;
// and so on
}
class AllData {
private final int minWeek;
private final int maxWeek;
private int currentWeek; // this is modified by clicking the arrows
private Map<Integer, WeekData> weekMap;
public IModel<WeekData> createDataModel() {
return new IModel<WeekData>() {
public WeekData getObject() {
return weekMap.get( currentWeek );
}
}
}
public IModel<Integer> createWeekModel() {
return new IModel<Integer>() {
public Integer getObject() {
return currentWeek;
}
}
}
}
public FoodFieldPanel(String id, IModel<AllData> model) {
super(id);
WebMarkupContainer foodFields = new WebMarkupContainer("foodFields", new CompoundPropertyModel( model.getObject().createDataModel() ) );
TextField monday = new TextField("monday");
TextField tuesday = new TextField("tuesday");
//...
foodFields.add(monday);
foodFields.add(tuesday);
//
add(foodFields);
}