我正在尝试使用wicket框架在按钮单击事件的表单中添加文本字段和下拉框。使用JavaScript生成文本字段并使用唯一的wicket动态下拉:html page.at java页面上的id如何在提交按钮事件中将动态生成的文本字段的值存储在字符串类型数组中。
用于生成文本字段和下拉框的HTML脚本
<SCRIPT type="text/javascript">
var intTextBox=0;
function f()
{
intTextBox = intTextBox + 1;
var testdiv = document.getElementById('testdiv');
var testdiv1 = document.getElementById('testdiv1');
var newTBDiv = document.createElement('div');
var newTBDiv1 = document.createElement('div');
var data0="A";
var data1="B";
var data2="C";
var data3="D";
var data4="E";
var data5="F";
newTBDiv.setAttribute('id','strText'+intTextBox);
newTBDiv.innerHTML = "Field "+intTextBox+":<input type='text' wicket:id='id"+intTextBox + "' size='"+50+"' maxlength='"+100+"''/>";
newTBDiv1.innerHTML = "<select wicket:id='dropdownid"+intTextBox+"' style=width:10em;> <option>"+data0+"</option> <option>"+data1+"</option> <option>"+data2+"</option> <option>"+data3+"</option> <option>"+data4+"</option> <option>"+data5+"</option></select>";
testdiv.appendChild(newTBDiv);
testdiv1.appendChild(newTBDiv1);
return true;
}
</SCRIPT>
在我试图做的Java文件中
String textFielddata[] = new String[intTextfieldcount];
String textFieldtype[] = new String[intTextfieldcount];
int count=0;
for(int i=0;i<intTextfieldcount;i++)
{
count=count+1;
form.add(new TextField<String>"id"+count).setRequired(true));
form.add(new new DropDownChoice<String>("dropdownid"+count).setRequired(true));
//downControl.add(new TextField<String>("id"+count,new PropertyModel<String>(this,"id"+count))).setOutputMarkupId(true);
textFielddata[i]=form.getDefaultModelObjectAsString("id"+count);
textFieldtype[i]=form.getDefaultModelObjectAsString("dropdownid"+count);
System.out.println(textFielddata[i]);
System.out.println(textFieldtype[i]);
}
textFieldData []和textFieldtype []是字符串类型数组, inttextfieldcount是整数类型,其值等于动态生成的文本字段和下拉框的数量
输出: ID1 dropdownid1
ID2 dropdownid2
问题它没有显示动态生成的文本字段中的数据并选择下拉框的值
或建议我在Wicket中使用任何其他方式来实现此功能而不使用JavaScript
答案 0 :(得分:2)
您可以正常创建下拉菜单和文本字段,并最初隐藏它们。然后使用按钮单击事件处理程序通过ajax显示组件。
答案 1 :(得分:0)
final MarkupContainer rowPanel = new WebMarkupContainer("rowPanel");
rowPanel.setOutputMarkupId(true);
form.add(rowPanel);
//列出所有行
ArrayList rows = new ArrayList(2);
rows.add(new String());
rows.add(new String());
final ListView lv = new ListView("rows", rows) {
@Override
protected void populateItem(ListItem item) {
int index = item.getIndex() + 1;
item.add(new Label("index", index + "."));
TextField text = new TextField("text", item.getModel()));
item.add(text);
}
};
rowPanel.add(lv);
AjaxSubmitLink addLink = new AjaxSubmitLink("addRow", form) {
@Override
public void onSubmit(AjaxRequestTarget target, Form form) {
lv.getModelObject().add(new String());
if (target != null)
target.addComponent(rowPanel);
}
};
addLink.setDefaultFormProcessing(false);
rowPanel.add(addLink);