gpt4 book ai didi

java - 点击按钮后Wicket添加方法

转载 作者:行者123 更新时间:2023-12-02 07:32:14 24 4
gpt4 key购买 nike

我有一个问题,如何在按钮单击后“重新加载”添加方法?例如:

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);

现在加载类:

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;
}

}

现在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>

最佳答案

我认为,您可以通过以下方式重新加载 DataView:

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
}
};

但是你的代码也需要认真的重构!对于我来说,我会这样写以提高可读性:

final Load load = new Load();

Form<?> form2 = new Form<Void>("form2") {
@Override
protected void onSubmit() {
StartPage.this.replace( createDataView( load.tick() ) );
}
};
add(form2);

add( createDataView( new ArrayList() ) );

createDataView(list)方法的实现:

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())));
}
};
}

Load类的实现:

public class Load {

public List tick() {
List result = new ArrayList();
// ...
// populate list from database
// ...
return result;
}
}

希望这有帮助。

关于java - 点击按钮后Wicket添加方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12751233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com