Java 单击按钮后添加Wicket方法
我有个问题,点击按钮后如何“重新加载”添加方法?例如:Java 单击按钮后添加Wicket方法,java,wicket,Java,Wicket,我有个问题,点击按钮后如何“重新加载”添加方法?例如: ArrayList list = new ArrayList(); DataView dataView = new DataView("listview", new ListDataProvider(list)) { public void populateItem(final Item item) { final DBUser user = (DBUser) item.getModelObject();
ArrayList list = new ArrayList();
DataView dataView = new DataView("listview", new ListDataProvider(list)) {
public void populateItem(final Item item) {
final DBUser user = (DBUser) item.getModelObject();
item.add(new Label("id", String.valueOf(user.getid())));
}
};
final Load load = new Load(dataView);
Form<?> form2 = new Form<Void>("form2") {
@Override
protected void onSubmit() {
load.tick();
}
};
add(dataView);
}
现在add(line)方法只调用了一次,如何在每次单击按钮后调用它
这是我的.html
<table frame="below" border=1>
<tr wicket:id="listview">
<td align="center" width="40"><span wicket:id="id"></span></td>
</tr>
</table>
我认为,您可以通过以下方式重新加载数据视图:
Form<?> form2 = new Form<Void>("form2") {
@Override
protected void onSubmit() {
StartPage.this.replace( load.tick() );
// or you can use
// StartPage.this.addOrReplace( load.tick() )
// instead
}
};
Load类的实现:
public class Load {
private DataView dataView;
public Load(DataView dataView)
{
this.dataView = dataView;
}
public DataView tick()
{
Session session = HibernateUtil.getSessionFactory().openSession();//getCurrentSession();
session.beginTransaction();
Query query = session.createQuery(
"from DBUser");
ArrayList list = new ArrayList();
for (Iterator it=query.iterate();it.hasNext();) {
DBUser row = (DBUser) it.next();
DBUser dbuser = new DBUser(row.getid());
list.add(dbuser);
}
dataView = new DataView("listview", new ListDataProvider(list)) {
public void populateItem(final Item item) {
final DBUser user = (DBUser) item.getModelObject();
item.add(new Label("id", String.valueOf(user.getid())));
}
};
session.close();
return dataView;
}
public class Load {
public List tick() {
List result = new ArrayList();
// ...
// populate list from database
// ...
return result;
}
}
希望这能有所帮助。为什么它会被多次调用?它只是坐在你的代码中间。它是否在应该调用的方法中?这显然不是有效的Java语法。请提供更多的代码。您想归档什么?字符串不是可以添加到组件中的内容?这段代码根本没有任何意义。你的整个方法表明你完全没有抓住Wicket的要点。您不需要将页面上的组件替换为绑定到新数据的组件。Wicket允许您设置组件,通过将其与
型号连接来自动刷新其数据。关于它们是什么以及如何在您的案例中应用它们的讨论超出了SO回答的范围,但我建议您重新阅读教程或Wicket in Action。您似乎还对Java中字段的工作方式感到困惑。当您执行load=newload(数据视图)时
,然后在加载
更改其数据视图
字段的值的方法中,这不会更改该字段最初从中填充的局部变量的值。@fen1kss您应该只需要创建一个数据视图
;然后可以将其存储为页面上的字段。这将是处理Wicket的惯用方法。Load
类不应该存在-其中的代码应该在DataView
使用的IDataProvider
中。主要的一点是添加StartPage.this.replace(Load.tick());
private DataView createDataView(List list) {
return new DataView("listview", new ListDataProvider(list)) {
public void populateItem(final Item item) {
final DBUser user = (DBUser) item.getModelObject();
item.add(new Label("id", String.valueOf(user.getid())));
}
};
}
public class Load {
public List tick() {
List result = new ArrayList();
// ...
// populate list from database
// ...
return result;
}
}