我有两个文本框来读取输入。提交页面后,我想在表格中显示数据。我在加载小部件时遇到问题;它表示没有定义dataView,也没有定义表id。但是,我在submit方法中定义了这个。代码如下。请帮帮我。
HomePage.java
public class HomePage extends WebPage {
private String memberNumber,lossNumber;
ArrayList <AssignmentDB> list = new ArrayList<AssignmentDB>(); int flag=0;
public HomePage(){
list.add(new AssignmentDB("1234","001","1678","10/june//2013"));
PropertyModel memberIdModel=new PropertyModel(this,"memberNumber");
PropertyModel lossIdModel=new PropertyModel(this,"lossNumber");
TextField memberIdField = new TextField("memberId",memberIdModel);
TextField lossIdField = new TextField("lossId",lossIdModel);
Form form=new Form("form1"){
public void onSubmit(){
list.add(new AssignmentDB("1234","001","1678","10/june//2013"));
list.add(new AssignmentDB("1235","003","1678","13/june//2013"));
DataView<List<AssignmentDB>> dataView = new DataView<List<AssignmentDB>>("AssignmentList", new ListDataProvider(list)) {
public void populateItem(Item<List<AssignmentDB>> item) {
AssignmentDB lists = (AssignmentDB) item.getModelObject();
if (lists.getMemberId().equals(memberNumber)){
if(lists.getLossId().equals(lossNumber)){
flag=1;
item.add(new Label("AOmemberId", lists.getMemberId()));
item.add(new Label("AOlossId", lists.getLossId()));
item.add(new Label("AOassignmentId", lists.getAssignmentId()));
item.add(new Label("AOdol", lists.getDOL()));
}
}
}
};
if (flag==0)
System.out.println("no matches");
form.add(dataView);
form.add(memberIdField);
form.add(lossIdField);
add(form);
}
public void setMemberNumber(String x)
{
this.memberNumber=x;
}
public void setLossNumber(String x)
{
this.lossNumber=x;
}
public String getMemberNumber(){
return this.memberNumber;
}
public String getLossNumber(){
return this.lossNumber;
}
}
homepage.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>EstimateSearcher</title>
</head>
<body>
<form wicket:id="form1">
Member Number <input type="text" wicket:id="memberId"><br/>
Loss Number <input type="text" wicket:id="lossId"><br/>
<input type="submit" value=search>
<table border="1">
<tr>
<th>MemberNo</th>
<th>LossNo</th>
<th>AssignmentNo</th>
<th>dol</th>
</tr>
<div wicket:id="AssignmentList">
<tr>
<td wicket:id="AOmemberId"></td>
<td wicket:id="AOlossId"></td>
<td wicket:id="AOassignmentId"></td>
//<td> <a href="#" wicket:id="AssignmentIdLink"><span wicket:id="AOassignmentId">[Address]</span></a> </td>
<td wicket:id="AOdol"></td>
</tr>
</div>
</table>
</form>
</body>
</html>
答案 0 :(得分:1)
您需要在提交函数之外添加表,因为在呈现页面时应填充所有html wicket:id(除了具有不可见父项的那些)。您可以做的是使用空列表创建和添加数据视图,然后使用ajax更新列表并重新呈现列表:
form.add(new AjaxButton("ajax-button", form)
{
@Override
protected void onSubmit(AjaxRequestTarget target, Form<?> form)
{
list.add(new AssignmentDB("1234","001","1678","10/june//2013"));
list.add(new AssignmentDB("1235","003","1678","13/june//2013"));
// repaint the dataView
target.add(dataView);
}
@Override
protected void onError(AjaxRequestTarget target, Form<?> form)
{
// error handling
}
});
您可以做的第二件更容易的事情就是创建一个包含您要显示的列表的构造函数,并在表单setResponsPage(new HomePage(listYouWantToUse));
中执行onSubmit()
。